1、C语言课程设计俄罗斯方块实训报告实训名称: C语言课程设计(俄罗斯方块)院 系: 计算机科学与工程学院 专 业: 物联网工程 班 级: 152 学 号: * * * * 开课时间: 2015 至2016 学年短学期一、需求分析1.1需求概述1.11市场需求:俄罗斯方块游戏是一个经典的小游戏,由于它操作简单,上到老人、下到小孩都可以玩,曾广 受人们欢迎。现在游戏之风盛行,一款款画面精美、音乐动听的大型游戏就在我们身边,但需要投 入大量的人力、物力去开发,还需要发大量的精力去玩,而且特别容易上瘾。现在的人,也许大都 不屑于玩俄罗斯方块这种“弱智”的游戏,但仔细观察,我们身边还是有人玩这个的。俄罗斯
2、方块 也确实是一个很不错的休闲游戏。1.12对功能需求:功能界面:游戏开始,音乐响起,让人感觉到是一种享受,这时,由计算机随机产生所定义 的图形,记录所产生的图形的形状的数目, 无操作时,方块竖直缓慢下落,图形在接触障碍物之前,可以由键盘控制向左右下移动, 向下加速或翻转,可以进行暂停,当某一行被下落的方块填满后消除并计分。1.2功能简介1.21.随机产生俄罗斯方块图形1.22.方向键和wasdrz实现下落方块的左移、右移、加速下落、变形、交换等基本操作1.23.正确判断游戏结束1.24 .对游戏成绩进行记分注:运行环境 windows 7 控制台(80 * 43 );二、总体设计2.1开发环
3、境与工具开发环境:CodeBlocks 工具:prosesson2.2游戏总模块流程图(见图2.2 )图2.2游戏总模块流程图三、详细设计3.1 模块介绍(创建,预览下一个方块和删除方块模块)3.11 开始动画和文字显示(见图 3.11)图3.11 开始动画在本模板下,首先在界面底部会同时出现两个简单的小人迎面相遇,接着, 过程中会等待按键触发,等待过程中Tetris字样会进行颜色变化,实现闪动效果,按任意键即可开始游戏。3.12 随机创建方块的代码函数名:int creat_block()函数描述:制作方块函数函数功能:实现俄罗斯方块制作方块的功能输入:NULL输出:NULL备注:实现方块的
4、制作在本模块下,我们要完成当前方块的创建和下一个方块的提前创建与预览。函 数名: int delete_block(int x,int y,int shape ,int status )函数描述: 在指定位置消除指定方块函数函数功能: 实现俄罗斯方块消除方块的功能输入:x,y,shape , status输出:NULL备注:实现消除方块,为下面的消行做铺垫在本模块下,我们要根据操作者对方块发出的移动指令,对之前位置的方块做正确的删除。3.14 结束界面当操作者在按下N (n)键之后,屏幕上会出现lose字幕和一堆由1与0两个 数字组成的乱码,表明游戏已经结束,最后按任意键退出整个游戏界面。3.
5、2 核心代码3.21随机创建方块的代码int creat_block()shape=block_ next_shape;status=block_ next_status;block_colour=block_ next_colour;block_x=17;block_y=1;n ext_block();block_xj(shape);int n ext_block()delete_block(NEXT_BLOCK_X,NEXT_BLOCK_Y ,block_ next_shape,block_ next_status);block_ next_colour=ra nd()%(0x10);bl
6、ock_ next_shape=ra nd()%7;block_ next_status=ra nd()%4;if(block_ next_colour=OxOO)block_ next_colour=OxOf;prin tf_block(NEXT_BLOCK_X,NEXT_BLOCK_Y,block_ next_shape,block_ next_status,block_ next_colour);3.22删除方块的代码int delete_block(i nt x,i nt y,i nt shape ,int status )int i,j;for(i=0;i4;i+)for(j=0;j
7、4;j+)cursor(j+x,i+y);if(blocksshapestatusij=1)SetCo nsoleTextAttribute(ha ndle ,0x00); printf( ”);3.23开始动画以及开始文字int dh()int k1=0,k2=0,k3=0,k4=0;clock_t now3;clock_t Iast3;last3 =clock();int k5=0,k6=0,k7=0,k8=0;clock_t now4;clock_t last4;last4 =clock();int i=0;while(i0.35f*CLOCKS_PER_SEC)no w3=clock(
8、);while( no w3-last30.01f*CLOCKS_PER_SEC)no w3=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);SetCo nsoleTextAttribute(ha ndle ,0x00);pri ntf();k3+;cursor(6+
9、1+k4,19-k4);SetCo nsoleTextAttribute(ha ndle ,0x00);pri ntf();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(); cursor(6+1+k4,19-k4);SetCo
10、nsoleTextAttribute(handle ,0x0a);printf(/ ); cursor(7+2+18-k5,16-k5);SetConsoleTextAttribute(handle ,0x00);printf( );k5+; cursor(7+2+18-k6,17-k6);SetConsoleTextAttribute(handle ,0x00);printf( );k6+; cursor(6+2+18-k7,18-k7);SetCo nsoleTextAttribute(ha ndle,0x00);pri ntf();k7+;cursor(6+2+18-k8,19-k8);
11、SetCo nsoleTextAttribute(ha ndle,0x00);pri ntf();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(); cursor(6+2+18-k8,19-k8);SetCo
12、nsoleTextAttribute(handle ,0x0b);printf( );i+;if(i=7) break;int game_star()dh();clock_t clock_ no w,clock_last;clock_last=clock();while(1)clock_ no w=clock();if(clock_ now-clock_last =0;i-)while(i)time_no w=clock();if(time_now-time_last0.45F * CLOCKS_PER_SEC)SetConsoleTextAttribute(handle ,0x0a); cu
13、rsor(ra nd()%84,ra nd()%25);prin tf(0);SetConsoleTextAttribute(handle ,0x0a); cursor(ra nd()%84,ra nd()%25);prin tf(1);SetConsoleTextAttribute(handle ,0x0a); cursor(ra nd()%84,ra nd()%25);prin tf(0);SetConsoleTextAttribute(handle ,0x0a); cursor(ra nd()%84,ra nd()%25);prin tf(1);SetCo nsoleTextAttrib
14、ute(ha ndle ,(ra nd()%(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);pri ntf( cursor(10,6);pri ntf( cursor(10,8);pri ntf( cursor(11,4);pri ntf( c
15、ursor(13,5);pri ntf( cursor(13,7);pri ntf( cursor(13,9);pri ntf( cursor(17,4);pri ntf( cursor(17,6);pri ntf( cursor(20,8);pri ntf( cursor(18,4);pri ntf( cursor(17,9);pri ntf( cursor(26,7);pri ntf( cursor(25,4);pri ntf( cursor(25,6);pri ntf( cursor(25,8);pri ntf(););cursor(10,7);printf(” ););cursor(1
16、0,9);printf( ); );cursor(13,4);printf( ););cursor(13,6);pri ntf();cursor(13,8);pri ntf();cursor(11,9);pri ntf();cursor(17,5);pri ntf();cursor(20,7);pri ntf();cursor(20,9);pri ntf();); );););); );cursor(17,7);printf( ); );cursor(26,4);printf( ); );cursor(26,9);printf( ););cursor(25,5);pri ntf();curso
17、r(25,7);pri ntf();cursor(25,9);pri ntf();););cursor(15,17);printf(按任意键关闭屏幕);i-;四、运行结果回运行结果(一一)控制方向Author:姚锋等级XXXXXXXXXXXX XXX xxxxxxMrB暮 觀柱二 警上键 齟以回空十 000000010001运行结果(二)运行结果(二)010 10L 10 101 110311IBISB0101101 3101Bl fillBl IS1 101 13011110101Bit aiei01 mil 010 1101 1 1001010 01 111 0 0011 Bl llB B
18、ll011 0 如 011011111 0 31108anmiQi 1 01B11031B13 BIBB1S119L0B 611 011 1 QIQI11 1 01 01110110 130 011 110 0 1110 0 0 0101 01 Q 10111 M 01 11311010 0 0 * 01101133*1111 1 11 0 1311 01 01300101310 0101 1 31 tlfl 31B11HI 011 1H Bill0 1001 lflfito continue.B 1 ltl 10 0 011 01011 IB 0 11911 11L11 00 100 1 1
19、 0191010111011 11 11091 11103 01Q 1910BS1 0009aiai311Q1101111 831I 113S 103111 1 1B1 011B Q 311 J1U1& 09911 1011 1010 119fil0 161 01 110001101 0101 31H R 1 R10101B11P 1011 1 101.1內Qi si airess an v key13110 0rocess101 10 1 1 01001 0 011 0 011 0 0101 1 011肮盹按任意键关闭屏幕0101111001131 010 1returned 0 execu
20、tion time : 52.561 si1 010 0131LQ010 10 0 110131101 110111110991090 01010100 11QI10 091 1101 1 101091 010101 IL101 0101 Q101001 O101L 0101091110LQ1 Q0 1110 (dlQ0 0 1111010 ML01101 011 1 01101010101 011 01013 01 011 01010 1 010 i 10110 01 01010 ill DID丄丄 10311 1 01011 101 1100 1 ti丄丄0 1i ltiiiii luii
21、aiy t)丄丄unyiu yin 丄丄0 MB 1011110J1 1 Uan1 0110110m 1LULU询01181131 1 3 01L 1F1 0 e 1 101100011831 1011010 01 Bl 811R1R 03 100001 0(1 11 01010 1 1 1011003 0 10011 0 1 I 0 1 1 101 111 1 10tll31 0 1 1 01011 1叢疹命方拱墨诉,运行结果(四)& 1 1IS | 1111B18 111 11B1I1 B10QI 3911131 1100ill0 3五、总结在编这项项目的过程中, 我发现了很多问题, 课堂上学得那些知识并不牢固,一实践和检验的 时候往往会出现这样和那样的错误, 所以要想真正掌握这门知识,光靠记忆和在深入理解也是远远不够的,必须上机多敲键盘,多打代码,遇到错误,要冷静的分析和修改,但经常很多问题不是我 们个人能解决的,有时我们只是局限于一角, 忽略其他的方块隐藏的潜在简单的错误, 可能一个局外人一眼就可以发现了, 有时可能我们是真的停留在程序表面,所以运用经常出错,因此必须把知 识和实践相结合,凭一己之力不能解决的事千千万,我们要与他人团结合作,发挥团队的强大性。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1