C语言课程设计俄罗斯方块.docx
- 文档编号:11957959
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:19
- 大小:81.17KB
C语言课程设计俄罗斯方块.docx
《C语言课程设计俄罗斯方块.docx》由会员分享,可在线阅读,更多相关《C语言课程设计俄罗斯方块.docx(19页珍藏版)》请在冰豆网上搜索。
C语言课程设计俄罗斯方块
实训报告
实训名称:
C语言课程设计(俄罗斯方块)
院系:
计算机科学与工程学院
专业:
物联网工程
班级:
152
学号:
*********
*************
*******
开课时间:
2015至2016学年短学期
一、需求分析
1.1需求概述
1.11市场需求:
俄罗斯方块游戏是一个经典的小游戏,由于它操作简单,上到老人、下到小孩都可以玩,曾广受人们欢迎。
现在游戏之风盛行,一款款画面精美、音乐动听的大型游戏就在我们身边,但需要投入大量的人力、物力去开发,还需要发大量的精力去玩,而且特别容易上瘾。
现在的人,也许大都不屑于玩俄罗斯方块这种“弱智”的游戏,但仔细观察,我们身边还是有人玩这个的。
俄罗斯方块也确实是一个很不错的休闲游戏。
1.12对功能需求:
功能界面:
游戏开始,音乐响起,让人感觉到是一种享受,这时,由计算机随机产生所定义的图形,记录所产生的图形的形状的数目,无操作时,方块竖直缓慢下落,图形在接触障碍物之前,
可以由键盘控制向左右下移动,向下加速或翻转,可以进行暂停,当某一行被下落的方块填满后消
除并计分。
1.2功能简介
1.21.随机产生俄罗斯方块图形
1.22.方向键和wasdrz实现下落方块的左移、右移、加速下落、变形、交换等基本操作
1.23.正确判断游戏结束
1.24.对游戏成绩进行记分
注:
运行环境windows7控制台(80*43);
二、总体设计
2.1开发环境与工具
开发环境:
CodeBlocks工具:
prosesson
2.2游戏总模块流程图(见图2.2)
图2.2游戏总模块流程图
三、详细设计
3.1模块介绍(创建,预览下一个方块和删除方块模块)
3.11开始动画和文字显示(见图3.11)
图3.11开始动画
在本模板下,首先在界面底部会同时出现两个简单的小人迎面相遇,接着,过程中会等待按键
触发,等待过程中Tetris字样会进行颜色变化,实现闪动效果,按任意键即可开始游戏。
3.12随机创建方块的代码
函数名:
intcreat_block()
函数描述:
制作方块函数
函数功能:
实现俄罗斯方块制作方块的功能
输
入:
NULL
输
出:
NULL
备
注:
实现方块的制作
在本模块下,我们要完成当前方块的创建和下一个方块的提前创建与预览。
函数名:
intdelete_block(intx,inty,intshape,intstatus)
函数描述:
在指定位置消除指定方块函数
函数功能:
实现俄罗斯方块消除方块的功能
输
入:
x,y,shape,status
输
出:
NULL
备
注:
实现消除方块,为下面的消行做铺垫
在本模块下,我们要根据操作者对方块发出的移动指令,对之前位置的方块做正确的删除。
3.14结束界面
当操作者在按下N(n)键之后,屏幕上会出现lose字幕和一堆由1与0两个数字组成的乱码,表明游戏已经结束,最后按任意键退出整个游戏界面。
3.2核心代码
3.21随机创建方块的代码
intcreat_block()
{
shape=block_next_shape;
status=block_next_status;
block_colour=block_next_colour;
block_x=17;
block_y=1;
next_block();
block_xj(shape);
}
intnext_block()
{
delete_block(NEXT_BLOCK_X,NEXT_BLOCK_Y,block_next_shape,block_next_status);
block_next_colour=rand()%(0x10);
block_next_shape=rand()%7;
block_next_status=rand()%4;
if(block_next_colour==OxOO)
{
block_next_colour=OxOf;
}
printf_block(NEXT_BLOCK_X,NEXT_BLOCK_Y,block_next_shape,block_next_status,block_next_colour);
}
3.22删除方块的代码
intdelete_block(intx,inty,intshape,intstatus)
{
inti,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cursor(j+x,i+y);
if(blocks[shape][status][i][j]==1)
{
SetConsoleTextAttribute(handle,0x00);printf("■”);
}
}
3.23开始动画以及开始文字
intdh()
{
intk1=0,k2=0,k3=0,k4=0;clock_tnow3;clock_tIast3;last3=clock();
intk5=0,k6=0,k7=0,k8=0;clock_tnow4;clock_tlast4;last4=clock();
inti=0;
while(i<7)
{
now3=clock();
while(now3-last3>0.35f*CLOCKS_PER_SEC)
{
now3=clock();
while(now3-last3<0.01f*CLOCKS_PER_SEC)
{
now3=clock();
}
last3=clock();
cursor(7+1+k1,16-k1);SetConsoleTextAttribute(handle,0x00);printf("");k1++;
cursor(7+1+k2,17-k2);SetConsoleTextAttribute(handle,0x00);printf("");k2++;cursor(6+1+k3,18-k3);SetConsoleTextAttribute(handle,0x00);printf("
");k3++;
cursor(6+1+k4,19-k4);SetConsoleTextAttribute(handle,0x00);printf("
");k4++;
cursor(7+1+k1,16-k1);SetConsoleTextAttribute(handle,0x0a);printf("-");cursor(7+1+k2,17-k2);SetConsoleTextAttribute(handle,0x0a);printf("0");
cursor(6+1+k3,18-k3);SetConsoleTextAttribute(handle,0x0a);printf("
");k7++;
cursor(6+2+18-k8,19-k8);SetConsoleTextAttribute(handle,0x00);printf("
");k8++;
cursor(7+2+18-k5,16-k5);SetConsoleTextAttribute(handle,0x0b);printf("-");cursor(7+2+18-k6,17-k6);SetConsoleTextAttribute(handle,0x0b);printf("0");cursor(6+2+18-k7,18-k7);SetConsoleTextAttribute(handle,0x0b);printf("
i++;
if(i==7)
{break;
}
}
}
}
intgame_star()
{
dh();
clock_tclock_now,clock_last;
clock_last=clock();
while
(1)
{
{
clock_now=clock();
if(clock_now-clock_last<0.33f*CLOCKS_PER_SEC)
{
SetConsoleTextAttribute(handle,(rand()%(0x10)));
printf("■■■■■
cursor(3,3);
■■■■■
■■■
■■■■
■■■■■
■■■■■
■");
■");
cursor(3,5);printf("■
■■■■■
■
■■■■■
■
■■■■
cursor(3,7);printf("■
■■■■■
■
■■
■■■
■■■■
■");
cursor(5,4);printf("■");
cursor(5,6);printf("■");
cursor(9,4);printf("■");
cursor(9,6);printf("■”);
cursor(17,4);printf("■");
cursor(17,6);printf("■");
cursor(21,4);printf("■");
cursor(25,4);printf("■");
cursor(21,6);printf("■");
cursor(24,6);printf("■");
cursor(29,4);printf("■");
cursor(29,6);printf("■");
cursor(33,4);printf("■");
cursor(37,6);printf("■");
SetConsoleTextAttribute(handle,0x0e);clock_last=clock_now;
}
{
SetConsoleTextAttribute(handle,(rand()%(0x10)));cursor(15,17);
printf(”按任意键开始");
}
if(_kbhit())
{getch();clear_p();return0;
}
}
}
3.24游戏结束
intgameover()
{
inti;
handle=GetStdHandle(STD_OUTPUT_HANDLE);
clock_ttime_now,time_last;
time_last=clock();
for(i=700;i>=0;i--)
{
while(i)
{
time_now=clock();
if(time_now-time_last>0.45F*CLOCKS_PER_SEC)
{
SetConsoleTextAttribute(handle,0x0a);cursor(rand()%84,rand()%25);
printf("0");
SetConsoleTextAttribute(handle,0x0a);cursor(rand()%84,rand()%25);
printf("1");
SetConsoleTextAttribute(handle,0x0a);cursor(rand()%84,rand()%25);
printf("0");
SetConsoleTextAttribute(handle,0x0a);cursor(rand()%84,rand()%25);
printf("1");
SetConsoleTextAttribute(handle,(rand()%(0x10)));cursor(4,4);printf(“■");cursor(4,5);printf(“■");
cursor(4,6);printf("■");cursor(4,7);printf("■”);cursor(4,8);printf("■");cursor(4,9);printf("■");
cursor(5,9);printf("■■■");cursor(10,4);printf("■");
cursor(10,5);printf("cursor(10,6);printf("cursor(10,8);printf("cursor(11,4);printf("cursor(13,5);printf("cursor(13,7);printf("cursor(13,9);printf("cursor(17,4);printf("cursor(17,6);printf("cursor(20,8);printf("cursor(18,4);printf("cursor(17,9);printf("cursor(26,7);printf("cursor(25,4);printf("cursor(25,6);printf("cursor(25,8);printf("
■");
■");cursor(10,7);printf(”■");
■");cursor(10,9);printf("■");
■■■");cursor(13,4);printf("■");
■");cursor(13,6);printf("
■");cursor(13,8);printf("
■");cursor(11,9);printf("
■");cursor(17,5);printf("
■");cursor(20,7);printf("
■");cursor(20,9);printf("
■");
■");
■■■");
■");
■");
■");
■■■");cursor(17,7);printf("■■■");
■■■");cursor(26,4);printf("■■■");
■■■");cursor(26,9);printf("■■■");
■");cursor(25,5);printf("
■");cursor(25,7);printf("
■");cursor(25,9);printf("
■");
■");
■");
cursor(15,17);printf("按任意键关闭屏幕");
i--;
}
四、运行结果
回
运行结果(一一)
控制方向
Author:
姚锋
□等级
XXXXXXXXXXXXXXXxxxxxxMr
B暮觀柱二警上键齟」以回空
十★
000000010001
运行结果(—二)
运行结果
(二)
01010L1
■■■■0
■101110
■311IBIS
■■■■B
01
01
1
013101
Bl■■
fill
BlIS
110
113011
110101
Bitaiei
01mil0101
10111001
0100111100
011BlllBBll
0110如
■■01
10111110
■■31108
anmiQi101B11031B13BIB
B1S119L0B61
10111QIQI
1
110101
1
@1011
013001111001
1
1
000010101Q10111M011131101
000************01
101
133****111111101311010130010131001
01131tlfl31B11HI0111
HBill
01001lflfi
tocontinue.B1ltl10001101011IB0119111
1L1
10
0100110191010111
011111109111
10301Q191
0BS
10009
aiai
3
11Q1
1011
1
1831
I113
S10311
111B1011BQ
■■■■31
1J1U1
&09911101
11
010119
fil
016
1011100
01101010131
HR1R1
01
01B11
P1
0111101
.1內
Qisiai
'ressanvkey
1
31100
'rocess
1011011010010011001
1001011011肮盹按任意键关闭屏幕01011110011310101
returned0<0x0>executiontime:
52.561si1010013
1LQ01
010011013110
111011111
09910900101
010
01
1
QI1009111
01»11
01
091010
101IL
1010101Q1010
01O101L010109111
0LQ
1Q
01
110(dlQ
0011
11010ML0110101110110101
010101101
0130101
101
0101010i1
011001010
10illDID丄丄103
11101011101110
01ti丄丄
01
iltiiiiiluiiaiyt)丄丄unyiuyin丄丄
0MB101111
0J11U
an
10
110110m1LULU
询0
1
181
1311301L1F»10e110110001
18311011
01001Bl811
R1R031
0
0
0
010(11
10101011101
100301001101I011101111110tll31011010111
叢疹命方拱墨诉,
运行结果(四)
&11
IS|1111
B1811111B1I
1B10
QI3
91113
11
100
■ill
■0
■3
五、总结
在编这项项目的过程中,我发现了很多问题,课堂上学得那些知识并不牢固,一实践和检验的时候往往会出现这样和那样的错误,所以要想真正掌握这门知识,光靠记忆和在深入理解也是远远
不够的,必须上机多敲键盘,多打代码,遇到错误,要冷静的分析和修改,但经常很多问题不是我们个人能解决的,有时我们只是局限于一角,忽略其他的方块隐藏的潜在简单的错误,可能一个局
外人一眼就可以发现了,有时可能我们是真的停留在程序表面,所以运用经常出错,因此必须把知识和实践相结合,凭一己之力不能解决的事千千万,我们要与他人团结合作,发挥团队的强大性。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 俄罗斯方块