1、1.12 对功能需求: 功能界面:游戏开始,音乐响起,让人感觉到是一种享受,这时,由计算机随机产生所定义的图形,记录所产生的图形的形状的数目,无操作时,方块竖直缓慢下落,图形在接触障碍物之前,可以由键盘控制向左右下移动,向下加速或翻转,可以进行暂停,当某一行被下落的方块填满后消除并计分。 1.2 功能简介 1.21.随机产生俄罗斯方块图形 1.22.方向键和wasdrz实现下落方块的左移、右移、加速下落、变形、交换等基本操作 1.23.正确判断游戏结束 1.24.对游戏成绩进行记分 注:运行环境 windows 7 控制台(80 * 43);二、总体设计 2.1 开发环境与工具 开发环境:Co
2、deBlocks 工具:prosesson2.2 游戏总模块流程图(见图2.2) 图2.2 游戏总模块流程图三、详细设计 3.1 模块介绍(创建,预览下一个方块和删除方块模块) 3.11 开始动画和文字显示(见图3.11) 图 3.11 开始动画在本模板下,首先在界面底部会同时出现两个简单的小人迎面相遇,接着,过程中会等待按键触发,等待过程中Tetris字样会进行颜色变化,实现闪动效果,按任意键即可开始游戏。 3.12 随机创建方块的代码 函 数 名: int creat_block() 函数描述: 制作方块函数 函数功能: 实现俄罗斯方块制作方块的功能 输 入: NULL 输 出: 备 注:
3、 实现方块的制作 在本模块下,我们要完成当前方块的创建和下一个方块的提前创建与预览。 图3.12 随机创建方块 3.13 删除方块 函 数 名: int delete_block(int x,int y,int shape ,int status ) 在指定位置消除指定方块函数 实现俄罗斯方块消除方块的功能 x,y,shape,status 实现消除方块 ,为下面的消行做铺垫 在本模块下,我们要根据操作者对方块发出的移动指令,对之前位置的方块做正确的删除。 图3.13 删除方块流程图 3.14 结束界面 当操作者在按下N(n)键之后,屏幕上会出现lose字幕和一堆由1与0两个数字组成的乱码,表
4、明游戏已经结束,最后按任意键退出整个游戏界面。 3.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; next_block(); block_xj(shape);int next_block() delete_block(NEXT_BLOCK_X,NEXT_BLOCK_Y,block_next_shape,block_next_status); block_n
5、ext_colour=rand()%(0x10); block_next_shape=rand()%7; block_next_status=rand()%4; if(block_next_colour=0x00) block_next_colour=0x0f; printf_block(NEXT_BLOCK_X,NEXT_BLOCK_Y,block_next_shape,block_next_status,block_next_colour); 3.22 删除方块的代码int delete_block(int x,int y,int shape ,int status ) int i,j;
6、for(i=0;i4;i+) for(j=0;jj+) cursor(j+x,i+y); if(blocksshapestatusij=1) SetConsoleTextAttribute(handle ,0x00); printf(); 3.23 开始动画以及开始文字int dh() int k1=0,k2=0,k3=0,k4=0;clock_t now3;clock_t last3;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*
7、CLOCKS_PER_SEC) while(now3-last30.01f*CLOCKS_PER_SEC) last3=clock(); cursor(7+1+k1,16-k1);SetConsoleTextAttribute(handle ,0x00);printf( k1+; cursor(7+1+k2,17-k2);k2+; cursor(6+1+k3,18-k3);k3+; cursor(6+1+k4,19-k4);k4+;SetConsoleTextAttribute(handle ,0x0a);-0/ cursor(7+2+18-k5,16-k5);k5+; cursor(7+2+
8、18-k6,17-k6);k6+; cursor(6+2+18-k7,18-k7);SetConsoleTextAttribute(handle,0x00);k7+; cursor(6+2+18-k8,19-k8);k8+;SetConsoleTextAttribute(handle ,0x0b); F i+; if(i=7) break;int game_star() dh(); clock_t clock_now,clock_last; clock_last=clock(); while(1) clock_now=clock(); if(clock_now-clock_last =0;i-
9、) while(i) time_now=clock(); if(time_now-time_last0.45F * CLOCKS_PER_SEC) SetConsoleTextAttribute(handle ,0x0a); cursor(rand()%84,rand()%25);1 cursor(4,4);cursor(4,5); cursor(4,6);cursor(4,7); cursor(4,8);cursor(4,9); cursor(5,9);cursor(10,4); cursor(10,5); cursor(10,6);cursor(10,7); cursor(10,8);cu
10、rsor(10,9); cursor(11,4);cursor(13,4); cursor(13,5);cursor(13,6); cursor(13,7);cursor(13,8); cursor(13,9);cursor(11,9);cursor(17,5);cursor(20,7); cursor(20,8);cursor(20,9); cursor(18,4);cursor(17,7); cursor(17,9);cursor(26,4); cursor(26,7);cursor(26,9);cursor(25,5); cursor(25,6);cursor(25,7); cursor
11、(25,8);cursor(25,9);按任意键关闭屏幕 i-;四、运行结果 运行结果(一)运行结果(二)运行结果(三)运行结果(四)五、总结 在编这项项目的过程中,我发现了很多问题,课堂上学得那些知识并不牢固,一实践和检验的时候往往会出现这样和那样的错误,所以要想真正掌握这门知识,光靠记忆和在深入理解也是远远不够的,必须上机多敲键盘,多打代码,遇到错误,要冷静的分析和修改,但经常很多问题不是我们个人能解决的,有时我们只是局限于一角,忽略其他的方块隐藏的潜在简单的错误,可能一个局外人一眼就可以发现了,有时可能我们是真的停留在程序表面,所以运用经常出错,因此必须把知识和实践相结合,凭一己之力不能解决的事千千万,我们要与他人团结合作,发挥团队的强大性。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1