您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 俄罗斯方块编程-课程设计报告
课程设计报告题目:俄罗斯方块设计设计者:**专业班级:**学号:**指导教师:**所属系部:****年**月**日、目录目录...................................................................................2一.设计的目的和要求...................................................2二.设计内容...................................................................3三.设计任务...................................................................3四.游戏基本规则...........................................................3五.总体设计...................................................................3六.详细设计与程序实现...............................................4七.主要处理流程..............................................................7八.游戏设计源程序..........................................................9九.截图............................................................................29十心得体会......................................错误!未定义书签。十一参考文献...............................................................30一.设计的目的和要求加深对《C语言》课程所学知识的理解,进一步巩固C语言语法规则。学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力。二.设计内容在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用,包括时间函数、绘图函数,以及文件的读写操作等。三.设计任务1.游戏欢迎界面。2.游戏执行功能,包括计算得分。3.游戏结束界面。四.游戏基本规则游戏共由7种不同形状的方块组成,游戏开始以后随机产生一个方块由屏幕的顶端开始向下落下,落到低端则固定到桌面,并开始下一个方块。在游戏窗口的左边作为游戏的桌面,用宽度10和高度20的表格表示。游戏桌面的右边靠上显示得分,最下边显示游戏帮助。如果固定到游戏桌面的方块超出了顶端游戏结束。方块固定以后如果桌面上已经固定了的方块满一行,则消除一行并将消除行之上的部分向下移动,消除一行得1分。基本操作如下:(1)方块落下的过程中可以用左右方向键移动方块的位置。(2)上方向键用来旋转方块,即所谓的变形。(3)下方向键用来加速方块下落。(4)游戏中按下回车键暂停游戏。再次按回车键继续游戏。五.总体设计游戏以Windows窗口的形式运行。窗口的左边作为游戏的桌面,桌面的大小是10X20个单位。随机出现一个方块从游戏桌面的上方开始向下移动,并随机生产一个向下方块显示到桌面的右边。方块的颜色分为7种。在显示下一个方块的上面显示玩家得分,下面显示游戏帮助。当方块不能向下移动的时候,将方块固定到桌面上,固定的方法是将方块的每个部分所在的坐标的桌面数值设置为1.固定以后,判断桌面数值的每一行,如果一行的数值全部都是1的话,就将桌面上的这一行数值删除,并将这一行上面所有行向下移动一行。删除一行的同时,玩家的得分加1。上述操作完成以后,将下一个方块从桌面的顶部开始下落,重新生成下一个方块。在固定方块到桌面的时候,还要判断方块的最顶端部分是否超出桌面范围,并以此作为游戏结束的依据。六.详细设计与程序实现一.方块设计游戏的核心和重点在于7种方块的设计,这7种方块的形状分别为Z形、S形、线形、T形、方形、L形和反L形、其数据结构分别用相对坐标表示如下:{{0,-1},{0,0},{-1,0},{-1,1}}{{0,-1},{0,0},{1,0},{1,1}}{{0,-1},{0,0},{0,1},{0,2}}{{-1,0},{0,0},{1,0},{0,1}}{{0,0},{1,0},{0,1},{1,1}}{{-1,-1},{0,-1},{0,0},{0,1}}{{1,-1},{0,-1},{0,0},{0,1}}因为屏幕的左上角为原点,向右为x轴增加的方向,向下为y轴增加的方向,将上述坐标对号入座即可得到向对应的方块形状。二.方块形状①.Z形方块Z形方块对号入座如下图所示:{{0,-1},{0,0},{-1,0},{-1,1}}Z形方块坐标图②.S型方块S形方块对号入座如下图所示:{{0,-1},{0,0},{1,0},{1,1}}S形方块坐标图③.线形方块线形方块对号入座如图所示:{{0,-1},{0,0},{0,1},{0,2}}线形方块坐标图④.T型方块T型方块对号入座如图所示:{{-1,0},{0,0},{1,0},{0,1}}T型方块坐标图⑤.方形方方形方块对号入座如图所示:{{0,0},{1,0},{0,1},{1,1}}方形方块坐标图⑥.L形方块L.L型方块对号入座如图所示:{{-1,-1},{0,-1},{0,0},{0,1}}.L型方块坐标图⑦.反L形方块反L形方块对号入座如图所示:{{1,-1},{0,-1},{0,0},{0,1}}L形方块坐标图在方块相对坐标基础上加上x和y的偏移量,就可以在屏幕的不同位置得到相应的反面方块。完成方块的向左,向右及向下移动。将方块的相对坐标旋转90度得到的新坐标就算变形后的坐标。顺时针操作的公式是:x’=-yy’=x逆时针旋转操作的公式是:x’=yy’=x其中,x和y代表旋转前方块的相对坐标,x和y代表旋转后方块的相对坐标。唯一例外的是方形方块,在旋转处理的时候不做处理。七.主要处理流程游戏的主要流程图如下:左键上键下键当前方块能够左移向左移动当前方块当前方块能够右移向右移动当前方块当前方块能够旋转当前方块能够下移旋转当前方块向下移动当前方块右键否八.游戏设计源程序//zhangdi#includewindows.h#includetime.h#includestdio.h#includetetris.h#defineAPP_NAMETETRIS#defineAPP_TITLETetrisGame#defineGAMEOVERGAMEOVER#defineSHAPE_COUNT7#defineBLOCK_COUNT4#defineMAX_SPEED5#defineCOLUMS10#defineROWS20#defineREDRGB(255,0,0)#defineYELLOWRGB(255,255,0)#defineGRAYRGB(128,128,128)#defineBLACKRGB(0,0,0)#defineWHITERGB(255,255,255)#defineSTONERGB(192,192,192)#defineCHARS_IN_LINE14#defineSCORESCORE%4d//全局变量定义charscore_char[CHARS_IN_LINE]={0};char*press_enter=PressEnterkey...;//帮助提示信息char*help[]={Pressspaceorupkeytotransformshape.,Pressleftorrightkeytomoveshape.,Pressdownkeytospeedup.,Pressenterkeytopausegame.,Enjoyit.:-),0};//枚举游戏的状态enumgame_state{game_start,game_run,game_pause,game_over}state=game_start;//定义方块的颜色COLORREFshape_color[]={RGB(255,0,0),RGB(0,255,0),RGB(0,0,255),RGB(255,255,0),RGB(0,255,255),RGB(255,0,255),RGB(255,255,255)};//定义方块的种类型intshape_coordinate[SHAPE_COUNT][BLOCK_COUNT][2]={{{0,-1},{0,0},{-1,0},{-1,1}},{{0,-1},{0,0},{1,0},{1,1}},{{0,-1},{0,0},{0,1},{0,2}},{{-1,0},{0,0},{1,0},{0,1}},{{0,0},{1,0},{0,1},{1,1}},{{-1,-1},{0,-1},{0,0},{0,1}},{{1,-1},{0,-1},{0,0},{0,1}}};intscore=0;//得分shapenext=0;//下一个方块shapecurrent=0;//当前方块intcurrent_coordinate[4][2]={0};//当前方块的每一部分坐标inttable[ROWS][COLUMS]={0};//游戏桌面intshapex=0;//当前方块的x坐标intshapey=0;//当前方块的y坐标intspeed=0;//方块下移速度clock_tstart=0;//每一帧开始时间clock_tfinish=0;//每一帧结束时间/*windows绘图用变量*/HWNDgameWND;/*window窗口句柄*/HBITMAPmemBM;/*内存位图*/HBITMAPmemBMOld;/*内存原始位图*/HDCmemDC;/*内存DC*/RECTclientRC;/*客户端矩形区域*/HBRUSHblackBrush;/*黑色画笔*/HBRUSHstoneBrush;/*深灰色画笔*/HBRUSHshapeBrush[SHAPE_COUNT];/*方块画笔,种方块,每种一个*/HPENgrayPen;/*灰色画笔*/HFONTbigFont;/*大字体,用来显示游戏名字和GameOver*/HFONTsmallFont;/*小字体用来显示帮助信息等*//*主要处理函数*/intmaxX()/*取最大坐标,函数名称:maxX;函数功能:取得当前方块的最大x坐标*/{inti=0;/*取最大坐标,函数名称:maxX;函数功能:取得当前方块的最大x坐标*/intx=current_coordinate[i][0];/*取最大坐标,函数名称:maxX;函数功能:取得当前方块的最大x坐标*/intm=x;/*取最大坐标,函数名称:maxX;函数功能:取得当前方块的最大x坐标*/for(i=1;iBLOCK_COUNT;i++)/*取最大坐标,函数名称:maxX;函数功能:取得当前方块的最大x坐标*/{x=current_coordinate[i][0];/*取最大坐标,函数名称:maxX;函数功能:取得当前方块的最大x坐标*/if(mx)/*取最大坐标,函数名称:maxX;函数功能:取得当前方块的最大x坐标*/{m=x;/*取最大坐标,函数名称:maxX;函数功能:取得当前方块的最大x坐标*/}}returnm;/*取最大坐标,函数名称:maxX;函数功能:取得当前方块的最大x坐标*/}intminX()/*取最小坐标,函数名称:minX;函数
本文标题:俄罗斯方块编程-课程设计报告
链接地址:https://www.777doc.com/doc-5964896 .html