游戏开发俄罗斯方块设计说明书.doc_第1页
游戏开发俄罗斯方块设计说明书.doc_第2页
游戏开发俄罗斯方块设计说明书.doc_第3页
游戏开发俄罗斯方块设计说明书.doc_第4页
游戏开发俄罗斯方块设计说明书.doc_第5页
已阅读5页,还剩11页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

游戏开发设计说明书题 目俄罗斯方块学号2011115010812学生姓名袁帅指导教师谢逸所在班级计科1108班专业名称计算机科学与技术 目录游戏开发设计说明书1目录2一课程设计主要内容31.题目32.需求分析33.设计环境3二详细设计说明41.系统程序流程图42.系统概要说明53.功能说明54.系统各函数及知识点说明5三游戏运行说明141.游戏运行流程图141.游戏开始142.游戏进行153.游戏结束15四课程设计总结16一 课程设计主要内容1. 题目俄罗斯方块2. 需求分析制作一个俄罗斯方块的小游戏,用户能够通过上下左右键来控制方块,满行消去。3. 设计环境运行环境:windows xp,windows 2003 windows 7开发环境:vc 6.0编写语言:c+二 详细设计说明1. 系统程序流程图开始随机产生一个方块交给当前图形变量根据变化绘图图形到底了吗N绘图一次图形下降一行Y随机生成一个图形交给提示图形变量结束游戏清所有数据Y行满YNN表格满消除行并把上面的行数据下移并置Y绘图提示图形变量给当前图形结束2. 系统概要说明 本程序是在vc6.0环境下编写的Windows应用程序,函数中利用了画图函数绘制基本方块模型,并通过相应键盘相应对应地执行相应的操作。在产生7中不同类型的方块中,调用了随机函数,随机产生17中的任何一个数字,每一个数字都对应了不同的模块,通过这种方式,实现了游戏中其中不同模块的随机产生。3. 功能说明(1) 实现其中形状不同的方块(2) 实现各个方块的上下左右移动和旋转的功能;(3) 实现消行的功能;4. 系统各函数及知识点说明1主函数 主函数为一有返回值型的整型函数,主要功能为执行游戏主线及定义边界。2. DrawCell函数(画方格) DrawCell类的功能定义了单个方块的构架。此类中,定义了一内一外两个正方形,使方块看起来更有立体感。画正方形通过调用四个LineTo()函数,即画出一个张方形。代码说明:void DrawCell (HDC hdc, int l, int t, int r, int b)/ 函数DrawCell: 画【方格】,/参数: 设备环境句柄和【方格】的四角坐标,每个方格由内外两个【正方形】(DrawCell)画成,使其有立体感 MoveToEx (hdc, l+1, t+1, NULL);/内正方形, MoveToEx()函数,设置画笔当前位置的函数 LineTo (hdc, r-1, t+1);/LineTo()函数,从当前位置向指定坐标点画直线的函数,x和y为线段的终点坐标 LineTo (hdc, r-1, b-1); LineTo (hdc, l+1, b-1); LineTo (hdc, l+1,t+1); MoveToEx (hdc, l+3, t+3, NULL);/外正方形 LineTo (hdc, r-3, t+3); LineTo (hdc, r-3, b-3); LineTo (hdc, l+3, b-3); LineTo (hdc, l+3,t+3);3. DrawBlock函数(画方块)此函数调用绘图函数,首先定义画笔,然后定义一个for循环,依次调用自定义的DrawCell函数,最后画出一个由四个方格组合成的方块代码说明: void DrawBlock (HDC hdc, int block42)/ 函数DrawBlock: 画【方块】/ 参数: 设备环境句柄和【方块】中四个【方格】在游戏区域中的位置 int i; HPEN hpen; hpen =CreatePen(PS_SOLID,1,RGB(255,255,255);/用指定的样式、宽度和颜色创建一个画笔,PS_SOLID画笔画出的是实线 SelectObject(hdc,hpen);/该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。/hpen,被选择的对象的句柄,该指定对象必须由如下的函数创建for(i=0;i4;i+) DrawCell(hdc,(blocki0-1)*CELL,(blocki1-1)*CELL,blocki0*CELL,blocki1*CELL); DeleteObject(hpen);/释放所有与该对象有关的系统资源,在对象被删除之后,指定的句柄也就失效了。4. Cover函数(消除方块原来位置)当方块每一次移动时,都需要消除方块原先的位置,这时候就需要自定义一个函数,每次位置变化时,就调用此函数,因为游戏背景是黑色的,因此每次方块位置发生改变时,只需要把原先的位置的方块变成黑色即可达到消除方块的作用。 首先调用SelectObject函数替换先前的相同类型的对象,同时定义颜色为黑色,然后通过for循环依次调用Rectangle函数,参数与没改变位置之前,调用的DrawCell函数一样,绘制四个黑色的正方形,以达到消除的目的代码说明:void Cover (HDC hdc, int org42)/ 函数Cover: 清除原来位置的【方块】/ 参数: 设备环境句柄和待清除的【方块】/ 清除【方块】即在该【方块】的每个【方块】处画一个正方形的黑块 int i; SelectObject (hdc,(HBRUSH)GetStockObject(BLACK_BRUSH); for(i=0; i4; i+) Rectangle (hdc,(orgi0-1)*CELL,(orgi1-1)*CELL,orgi0*CELL,orgi1*CELL);5. 游戏执行函数(窗口函数)此函数接受玩家发出的键盘响应,针对不得不同的消息调用不同的函数进行消息处理,控制整个游戏的循环以及对各子函数的调用。各函数具体实现说明:(1).创建窗口响应函数(case WM_CREATE)当用户创建新的窗口时,会产生这个消息,此消息在CreateWindow 函数返回之前被送到消息处理函数。此函数主要控制了随着方块的往底部的堆积情况,控制方块的活动范围。代码具体实现说明:case WM_CREATE: top=H-1;/top定义了距离顶部的高度 for(i=0; iH; i+)/ 将第一列和最后一列【方格】置1,控制【方块】不超出游戏区域 cells0i=1; cellsW+1i=1; for(i=0; iW+2; i+) / 将最底下一行【方格】置1,控制【方块】不超出游戏区域 cellsiH-1=1; for(i=1; i=W; i+) for(j=0; jH-1; j+)/ 其他【方格】置0,游戏方块只能在这里移动 cellsij=0; return 0;(2).新的模块产生响应函数(case MS_NEWBLOCK:)产生新的方块进行消息处理,该函数首先检查是否有某一行全部被方格都填满,若该行被填满,则将上一行的填充状态复制到该行,依此类推,即从该行开始,所有的方格都下移一行,然后产生随机方块,随机模块的产生如下:随机方块的产生首先通过调用rand()%7;函数,获取07中7个随机数,在通过switch语句,针对七个数据,绘制相应的方块形状,最后实现随机模块的产生具体代码说明:sel =rand()%7; / 产生随机数,分别代表【方块】的种形状 switch(sel) case 0: / / org00=block00=10; org01=block01=0; org10=block10=11; org11=block11=0; org20=block20=10; org21=block21=1; org30=block30=11; org31=block31=1; break; case 1: / org00=block00=9; org01=block01=0; org10=block10=10;org11=block11=0; org20=block20=11; org21=block21=0; org30=block30=12; org31=block31=0; break; case 2: / / / org00=block00=10;org01=block01=0; org10=block10=10; org11=block11=1; org20=block20=11; org21=block21=1; org30=block30=11; org31=block31=2; break; case 3: / / / org00=block00=11;org01=block01=0; org10=block10=11;org11=block11=1; org20=block20=10;org21=block21=1; org30=block30=10;org31=block31=2; break; case 4: / / / org00=block00=10;org01=block01=0; org10=block10=10; org11=block11=1; org20=block20=10;org21=block21=2; org30=block30=11; org31=block31=2; break; case 5:/ / / org00=block00=10; org01=block01=0; org10=block10=10; org11=block11=1; org20=block20=10; org21=block21=2; org30=block30=9;org31=block31=2; break; case 6: / / org00=block00=10; org01=block01=0; org10=block10=9; org11=block11=1; org20=block20=10; org21=block21=1; org30=block30=11; org31=block31=1; break; default: SendMessage (hwnd,MS_NEWBLOCK,0,0); break; (3).键盘消息响应控制(case WM_KEYDOWN:)此函数分别对键盘消息。即(上,下,左,右)进行处理当响应消息为下,左,右,的时候,直接更改方块的再矩阵的位置,以达到方块移动的效果,当相应消息上的时候,就需要改变方块的定位。首先定义一个整型变量,记录变换的次数,然后通过switch语句,当前方块作为条件,不同的方块,所旋转的消息处理函数也不一样,每一个方块随后所变化的种类也不相同,因此,根据不同的方块,在进行旋转除的余数,对方块中四个方格的位置进行改变,当旋转后新位置时有方格时,则旋转取消具体代码实现如下:case WM_KEYDOWN: / 响应键盘控制 r=0; switch(int)wParam) case VK_LEFT: for(i=0;i4;i+) blocki0-; break; case VK_RIGHT: for(i=0; i4; i+) blocki0+; break; case VK_DOWN: for(i=0;i4;i+) blocki1+; break; / 按向上键,【方块】顺时针旋转 /【方块】的旋转不是真正的旋转,而是根据不同的【方块】形状和 / 该【方块】旋转过的次数来移动其中的一个或几个【方格】,从而 / 达到旋转的效果 case VK_UP: r=1; flag+; /【方块】旋转加 switch(sel) / sel代表当前【方块】的形状 case 0: break; case 1: flag =flag%2; for(i=0; i4; i+) blocki(flag+1)%2 =org2(flag+1)%2; blockiflag =org2flag-2+i; break; case 2: flag =flag%2; if(flag) block01 +=2; block30 -=2; else block01 -=2; block30 +=2; break; case 3: flag =flag%2; if(flag) block01 +=2; block30 +=2; else block01 -=2; block30 -=2; break; case 4: flag=flag%4; switch(flag) case 0: block20 +=2; block30 +=2; block21 +=1; block31 +=1; break; case 1: block20 +=1; block30 +=1; block21 -=2; block31 -=2; break; case 2: block20 -=2; block30 -=2; block21 -=1; block31 -=1; break; case 3: block20 -=1; block30 -=1; block21 +=2; block31 +=2; break; break; case 5: flag=flag%4; switch(flag) case 0: block20 +=1; block30 +=1; block21 +=2; block31 +=2; break; case 1: block20 +=2; block30 +=2; block21 -=1; block31 -=1; break; case 2: block20 -=1; block30 -=1; block21 -=2; block31 -=2; break; case 3: block20 -=2; block30 -=2; block21 +=1; bl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论