




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计(面向对象程序设计(C+C+)课程大作业)课程大作业 设计题目:设计题目: 院院 系:系: 计算机科学与信息工程学院计算机科学与信息工程学院 专业班级:专业班级: 学号姓名:学号姓名: 指导教师:指导教师: 2015 年年 1 月月 目目 录录 一、一、 成员分工成员分工.1 1 二、需求分析二、需求分析 .2 2 三、总体设计三、总体设计 .3 3 四、详细设计四、详细设计 .8 8 五、系统测试五、系统测试 .2424 六、总结六、总结 .3030 七、参考文献七、参考文献 .3131 - - 1 一一 成员分工成员分工 我们小组成员共有三名,分别是,为了能按时圆满的完成这次 VC+课程设计,我们小组进行了详 细的分工,以确保设计能按时完成。经过周密的考虑和详细的调查最终确定该俄罗斯方块游戏需要以 下几个功能模块: (1)需求分析 (2)界面的设计 (3)背景色的选择模块 (4)游戏随机选择方块模块 (5)游戏预览功能模块 (6)收埋功能模块 (7)记分功能模块 (8)鼠标控制功能模块 (9)模块联结 (10) 系统测试 经过小组成员的讨论,并根据个人的特长和具体爱好做如下具体分工: 刘国松具体完成以下模块的设计与实现: (1 ) 需求分析 (2 ) 界面的设计 (3 ) 背景色的选择模块 吕秀锦具体完成以下模块的设计与实现: (1)游戏随机选择方块模块 (2)游戏预览功能模块 (3)收埋功能模块 (4)记分功能模块 高婉婉主要具体完成以下模块的设计与实现: (1)鼠标控制功能模块 (2)模块联结 (3)系统测试 - - 2 二二 需求分析需求分析 1 1系统概述系统概述 该游戏软件在 Windows 系统为玩家提供传统俄罗斯方块游戏的基本功能,玩家可以通过键盘控制 在游戏区中堆积软件随机提供的由四个小方块不同组合的 7 种类型不同颜色的方块,每个小方格的颜 色也是随机的,并且在整个下落的过程中,其颜色也呈动态变化。游戏过程中,每在游戏区堆满一行 后,自动消除并记分。同时消去的行数越多,那一次性所加的分数也就越多。一行是 100,两行是 300,三行是 600,四行是 1000 分。为了得到更多的分,那么我们游戏者就要想办法一次尽可能多的 消去方块。当游戏区不能再堆积新来的方块时,游戏结束。游戏设定 3 个级别,初级,中级和高级, 级别越高,方块下降的速度越快、难度越大,玩家可以根据自己的需要自由设定初始游戏级别,达到 最高级别时不再增加。游戏以最终玩家获得的分数来判断玩家水平的高低。游戏为对战型俄罗斯方块, 玩家依靠自己消层和使用道具来打击对手。当玩家游戏池中的砖块累积到顶端时游戏失败。 2 2系统运行环境系统运行环境 (1)硬件环境。本系统适用于那种 Inter386 以上计算机,内存容量为 128M,应配备,键盘,鼠 标,显示器等外部设备。 (2)软件环境。本系统的设计采用 Visual C+6.0 编写。在 Windows XP SP2 环境下测试通过 (3)本游戏软件在 Windows 平台下都可以运行。 3 3功能需求描述功能需求描述 这是一次尝试,一个比较成功的设计,其精彩的算法与漂亮的程序结构足以让人兴奋了。 这个游戏,不仅可以满足游戏爱好者对游戏的要求,同时我们增加了美观因素,让游戏有一个比 较美观的界面,满足我们游戏爱好者的视觉要求。 这有别于常规的俄罗斯方块算法,游戏中,玩家依靠自己消层来得分。当玩家游戏池中的砖块累 积到顶端时游戏失败。 - - 3 三三 总体设计总体设计 1 1屏幕的组成屏幕的组成 一个游戏一定要有一个界面供游戏者对游戏控制。 这个界面中要包含让游戏者更加清楚游戏状态的信息,比如,一个方块在下落过程中,它的位置 如何,形状是怎么样的,要如何放置这个方块,以及下一个方块是什么形状,这样关系着游戏者要如 何放置方块,让整体有个更加的布局,有利于游戏的进行。屏幕由 20 行 13 列的网格组成;其中 02 行:初始的形状将在这里形成然后下落,这三行用户不可见;319 区域;20,其标记已到屏幕底部。 在界面的右边就是相关的游戏信息,级别控制,开始游戏控制,背景色的选择,当前方块的坐标,组 型,颜色及类型(ZZ 表示)以及目前的得分情况,下一个预览方块,鼠标控制信息(变形,左移,右 移和加速下落) , 收埋信息(分别向上,下,左和右收埋,及结束游戏收埋,这时将显示版权信息) 。 2 2形状的组成形状的组成 每一种形状都是由四个方块组成,比如由四个方块横向排列而成 3 3形状的统一形状的统一 等共 19 种形状(旋转前后的形状归为不同的形状) ,虽然在玩游戏时我们会去将各种不 同的形状有个不同的命名(比如“条子” , “方块”等) ,但在设计游戏是它们却是统一的,它们都是 “形状” 。这一点是游戏成功的基础。 为了使各种不同的形状达到统一的设计,我设计了如下解决方案:将形状始终放在 44 的格子 中,以该 44 格子的第一个格子为“基础点” ,只要给出组成形状的四个块相对于该基础点的相对坐 标。 为基础点,形状各块的相对坐标是相对于这个基础点的 那么在其中就如图:其四个方块相对于基础点的网格坐标就为 (0,2) (1,2) (2,2) (3,2) 02122232 - - 4 我们将用一个 int8记录下这四个相对坐标值 同理: 02120313 这样,我们只要知道某个形状的相对坐标值数组,就可以轻松地求出它的各方块的排列方式,也 就是其形状(样子) 。 4 4移动与旋转的统一移动与旋转的统一 从上面我们可以看出形状的移动可以这样来实现: 移动基础点的网格坐标,然后组成形状的四 个方块按照其与基础点坐标的相对值而改变网格坐标,则表现为移动。 旋转与移动的原理一样:设旋转前的形状为 ZZ = 0,旋转后的形状为 ZZ=1,组成形状 A 的四 个方块按照 B(而不是按照 A)的相对于基础点坐标的相对值而改变网格坐标,则表现为旋转。 比如, 02122232 移动: 设其基础点网格坐标为(gX,gY),其各方块当前坐标(gX+0,gY+2), (gX+1,gY+2), (gX+3,gY+2), (gX+3,gY+2) 。如果其向左移动一格,那么它的基础了坐标 gX-=1; gY=gY; 其各方 块移动后坐标 (gX+0,gY+2), (gX+1,gY+2), (gX+3,gY+2), (gX+3,gY+2) 。 旋转:设其基础点网格坐标为(gX,gY),其各方块当前坐标(gX+0,gY+2), (gX+1,gY+2), (gX+3,gY+2), (gX+3,gY+2) 。如果其旋转一次,旋转后的形状如图 10111213 那么其旋转后的各方块坐标 (gX+1,gY+0), (gX+1,gY+1), (gX+1,gY+2), (gX+1,gY+3) 如果我们将各形状编号,比如编号 0,其旋转 90 度以后的形状为编号 1 那么 0 旋转目标为 1,1 的旋转目标为 0 所以所有形状便得到了统一,如图形状 - - 5 - - 6 - - 7 - - 8 四四 详细设计详细设计 1程序流程图程序流程图 (1)数据流图)数据流图 数据流图是对系统数据流向的一种描述,并从本质上让程序的使用者,大致了解系统的使用方法。 本俄罗斯游戏的大致流程图如下 (2)系统功能模块)系统功能模块 - - 9 (3) 系统流程图系统流程图 系统流程图是对系统的大致流程进行描述,本游戏的系统流程图如下: 2 2 程序模块详细设计程序模块详细设计 根据上面所介绍的本系统的各个模块及其需要实现的功能,下面详细设计如下: (1 1)界面的设计)界面的设计 程序界面程序在启动运行时,系统会通过调用视图类中的重绘图函数对界面进行界面的初始化。 使程序界面更加友好,在使用上给用户一种清新怡然的感觉。其界面如图所示: - - 10 (2 2)背景色的选择模块)背景色的选择模块 实现此功能代码如下: void CGameDlg:OnBackcolor()/背景色 CColorDialog dlg(BackColor);/ if(dlg.DoModal()=IDOK) BackColor=dlg.GetColor(); Back=1; - - 11 (3 3)游戏随机选择方块模块)游戏随机选择方块模块 在游戏中,每一个下落的方块都是随机的,包括颜色,形状。 实现此功能相关代码如下: void CGameDlg:Shape()/外部框架 int line=18; int rr=4; CDC *pDC=GetDC(); ASSERT(pDC!=NULL); CPen pen; pen.CreatePen (PS_SOLID,1,RGB(0,0,0); CBrush brush1,brush2,brush3; brush1.CreateSolidBrush(RGB(60,60,60); brush3.CreateSolidBrush(RGB(0,170,0); brush2.CreateSolidBrush(BackColor); pDC-SelectObject (pen); pDC-SelectObject (brush1); pDC-Rectangle(X-line,Y-line,X+M*r+line,Y+N*r+line); int b=line*2/3,c=b-rr; pDC-SelectObject (brush3); pDC-Rectangle(X-b,Y-b,X+M*r+b,Y+N*r+b); pDC-SelectObject (brush1); pDC-Rectangle(X-c,Y-c,X+M*r+c,Y+N*r+c); pDC-SelectObject (brush2); pDC-Rectangle(X-2,Y-2,X+M*r+2,Y+N*r+2); DeleteObject(pen);DeleteObject(brush1); DeleteObject(brush2);DeleteObject(brush3); ReleaseDC(pDC); - - 12 void CGameDlg:one(int Type, int i, int j) /某元格颜色 位置 if(Runing=0) OnDestroy(); return; CDC *pDC=GetDC(); ASSERT(pDC!=NULL); COLORREF color,L_color=RGB(0,0,0); switch(Type) case 0: color=L_color=BackColor;break; case 1: color=RGB(131,129,222); break; case 2: color=RGB(250,90,130); break; case 3: color=RGB(40,220,250); break; case 4: color=RGB(40,120,50); break; case 5: color=RGB(0,250,0); break; case 6: color=RGB(131,19,222); break; case 7: color=RGB(120,190,30); break; case 8: color=RGB(140,20,150); break; case 9: color=RGB(40,120,150); break; case 10: color=RGB(23,62,180); break; case 11: color=RGB(131,129,22); break; case 12: color=RGB(20,190,130); break; case 13: color=RGB(40,234,220); break; case 14: color=RGB(140,70,150); break; case 15: color=RGB(30,150,40); break; case 16: color=RGB(78,203,30);break; case 17: color=RGB(120,100,30); break; case 18: color=RGB(240,70,20); break; case 19: color=RGB(40,180,90); break; case 20: color=RGB(123,62,180); break; - - 13 case 21: color=RGB(120,0,20);break; case 22: color=RGB(0,0,250);break; case 23: color=RGB(0,250,0);break; case 24: color=RGB(0,250,250);break; case 25: color=RGB(250,0,0);break; case 26: color=RGB(250,0,250); break; case 27: color=RGB(250,250,0);break; case 28: color=RGB(250,250,250);break; case 29: color=RGB(rand()%250,rand()%250,rand()%250); break; case 30: color=RGB(rand()%250,rand()%250,rand()%250); break; case 31: color=RGB(rand()%250,rand()%250,rand()%250); break; case 32: color=RGB(rand()%250,rand()%250,rand()%250); break; case 33: color=RGB(rand()%250,rand()%250,rand()%250); break; case 34: color=RGB(rand()%250,rand()%250,rand()%250); break; CPen pen; CBrush brush; pen.CreatePen(PS_SOLID,1,L_color); brush.CreateSolidBrush (color); pDC-SelectObject(pen); pDC-SelectObject(brush); pDC-Rectangle(X+i*r,Y+j*r,X+(i+1)*r,Y+(j+1)*r); DeleteObject(pen); DeleteObject(brush); ReleaseDC(pDC); (4 4)游戏预览功能模块)游戏预览功能模块 此模块用来为游戏爱好者提供下一个方块的信息, 实现此功能相关代码如下: void CGameDlg:PreView()/预先显示组 if(Runing=0) - - 14 OnDestroy(); return; CTime tm=CTime:GetCurrentTime(); object2.Type=(rand()+tm.GetMinute()+tm.GetSecond()%V+1; object2.x=M/2;object2.y=0; object2.group=(tm.GetMinute()*tm.GetSecond()+rand()%7+1; ZZ2=(rand()+tm.GetDay()*tm.GetHour()%97; b0=b1=b2=b3=b4=b5=b6=b7=0; switch(object2.group) case 1: b2=0;b3=1;b4=1;b5=0;b6=1;b7=1; break; case 2: b2=0;b3=1;b4=0;b5=-1;b6=1;b7=-1;break; case 3: b2=0;b3=1;b4=0;b5=-1;b6=1;b7=1; break; case 4: b2=0;b3=1;b4=0;b5=2;b6=0;b7=-1; break; case 5: b2=0;b3=-1;b4=1;b5=0;b6=1;b7=1; break; case 6: b2=0;b3=1;b4=1;b5=0;b6=1;b7=-1; break; case 7: b2=0;b3=1;b4=0;b5=2;b6=1;b7=1; break; for(int i=0;iZZ2;i+) ChangeShape(object2); if(object2.y+b30|object2.y+b50|object2.y+b70|object2.y0 void CGameDlg:OnButton1() CDC *pDC = GetDC(); ASSERT(pDC != NULL); OnDraw(pDC); ReleaseDC(pDC); - - 15 void CGameDlg:OnDown() if(!Runing) return; MoveOn(3); ObjectGroup(object); KillTimer(11); SetTimer(11, 10, NULL); void CGameDlg:OnLeft() if(!Runing) return; MoveOn(4); void CGameDlg:OnRight() if(!Runing) return; MoveOn(2); void CGameDlg:OnUp() if(!Runing) return; MoveOn(1); void CGameDlg:MoveOn(int n) / TODO: Add your message handler code here and/or call default CDC *pDC=GetDC(); ASSERT(pDC!=NULL); DeleteGroup(object);int b_x=object.x,b_y=object.y; switch(n) - - 16 case 1: ChangeShape(object); ObjectGroup(object); break; case 2: object.x = object.x 1?object.y-1:0; if(check2()object.y=b_y; ObjectGroup(object); break; Show(object); ReleaseDC(pDC); void CGameDlg:ClearUp()/清空预备显示 地方 CDC *pDC=GetDC(); ASSERT(pDC!=NULL); COLORREF color=RGB(233,230,214); CPen pen; - - 17 CBrush brush; pen.CreatePen(PS_SOLID,1,color); brush.CreateSolidBrush (color); pDC-SelectObject(pen); pDC-SelectObject(brush); pDC-Rectangle(J_x,J_y,J_x+118,J_y+155); DeleteObject(brush); DeleteObject(pen); ReleaseDC(pDC); (5 5)收埋功能模块)收埋功能模块 此模块用来收藏游戏界面。 实现此功能相关代码如下: void CGameDlg:OnTimer(UINT nIDEvent) /处理往下运动过程 /=2 往右收埋 if(nIDEvent=2) MoveWindow(p1.x,p1.y,m_W,m_H); p1.x+=10; if(p1.xdesktopRect.Width() KillTimer(2); Set=2; Si.left=LW-T; Si.top=Sj.top; Si.right=LW; Si.bottom=Sj.bottom; if(nIDEvent=6) - - 18 MoveWindow(p1.x,p1.y,m_W,m_H); p1.x-=10; if(p1.xdesktopRect.Height() KillTimer(3); Set=3; Si.left=Sj.left; Si.top=LH-T; Si.right=Sj.right; Si.bottom=LH; if(nIDEvent=7) MoveWindow(p1.x,p1.y,m_W,m_H); p1.y-=10; if(p1.y0) Runing=0; AfxMessageBox(游戏结束!); CGameDlg dlg; dlg.DoModal(); return; for( j = N-1; j = 0; j-) for(i=0,k=0;i0) k+; if(k=M) o+; - - 21 for(p=j;p=1;p-) for(q=0;qM;q+) Gqp=Gqp-1; one(Gqp,q,p); for(q=0;qM;q+) Gq0=0; one(Gqp,q,p); j+; Score+=100*o; (7 7)鼠标控制功能模块)鼠标控制功能模块 此模块也是本游戏的重点,玩家通过鼠标控制进行游戏。向上是变换图形,向下是很方块快速下 落,向左是使方块向左移动,向右是很方块向右移动。 程序的具体实现部分如程序清单如下所示。 void CGameDlg:ChangeShape(OBJECT object)/转组 int z42 = 0; int i,j,k; if(Runing=0) OnDestroy(); return; do switch(object.group) - - 22 case1:ZZ=0;z10=1;z11=0;z20=0;z21=1;z30=1;z31=1;break; case 2:ZZ+; ZZ%=4;switch(ZZ) case 0:z10=-1;z11=0; z20=1;z21=0;z30=-1;z31=-1;break; case 1:z10=0;z11=1; z20=0;z21=-1;z30=1;z31=-1;break; case 2:z10=-1;z11=0; z20=1;z21=0;z30=1;z31=1;break; case 3:z10=0;z11=-1; z20=0;z21=1;z30=-1;z31=1;break; break; case 3:ZZ+; ZZ%=4; switch(ZZ) case 0:z10=-1;z11=0; z20=1;z21=0;z30=1;z31=-1;break; case 1:z10=0;z11=1; z20=0;z21=-1;z30=1;z31=1;break; case 2:z10=-1;z11=0; z20=1;z21=0;z30=-1;z31=1;break; case 3:z10=0;z11=-1; z20=0;z21=1;z30=-1;z31=-1;break; break; case 4: ZZ+; ZZ%=2; switch(ZZ) case 1:z10=0;z11=-1; z20=0;z21=2;z30=0;z31=1;break; case 0:z10=1;z11=0; z20=2;z21=0;z30=-1;z31=0;break; break; case 5: ZZ+; ZZ%=2; switch(ZZ) case 1:z10=0;z11=-1; z20=1;z21=0;z30=1;z31=1;break; case 0: z10=0;z11=1; z20=-1;z21=1;z30=1;z31=0;break; break; case 6:ZZ+; ZZ%=2; - - 23 switch(ZZ) case 1: z10=0;z11=1; z20=1;z21=0;z30=1;z31=-1;break; case 0:z10=-1;z11=0; z20=0;z21=1;z30=1;z31=1;break; break; case 7: ZZ+; ZZ%=4; switch(ZZ) case 0: z10=0;z11=-1; z20=1;z21=0;z30=-1;z31=0;break; case 1: z10=0;z11=1; z20=0;z21=-1;z30=1;z31=0;break; case 2: z10=0;z11=1; z20=-1;z21=0;z30=1;z31=0;break; case 3: z10=-1;z11=0; z20=0;z21=1;z30=0;z31=-1;break; break; int t8; for(i=0,k=0;i4;i+) for(j=0;j2;j+) tk=zij; k+; InPut(object,t); while(check2()|check1(); - - 24 五五 系统测试系统测试 1 1 运行游戏,进入游戏界面运行游戏,进入游戏界面 - - 25 2 2 开始游戏开始游戏 (1 1) 选择游戏背景颜色选择游戏背景颜色 - - 26 (2 2) 选择游戏级别选择游戏级别 - - 27 3 3 游戏得分游戏得分 - - 28 4.4.收埋功能
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业合规风险管理的挑战试题及答案
- Cloud Native应用开发考核试题及答案
- 软件设计师考试工具链构建试题及答案
- 法学概论考试中的法律规则与试题及答案梳理
- 2025年软考网络设备题型试题及答案
- 市场导向与公司战略风险识别试题及答案
- 2025届山西省朔州市朔城区七下数学期末复习检测试题含解析
- 未来企业战略中的技术驱动因素试题及答案
- 二级VB模拟考试报告试题及答案
- 法学概论法律科普教育的重要性试题及答案
- 汽车保养与维护实操考核
- 图纸会审会议纪要范本
- GB∕T 17466.1-2019 家用和类似用途固定式电气装置的电器附件安装盒和外壳 第1部分:通用要求
- 钻探设备工具材料共12
- 得到上市招股书:北京思维造物信息科技股份有限公司
- 浅谈高速公路沥青混凝土路面桥头跳车几种处理措施
- 机动车检测站授权签字人内部培训考题(含答案)
- 战略方法论三层面法和财务模型课件
- 病例报告表(CRF)模板
- 幼儿园:周佳茵 中班科学教案《有趣的纸桥》
- 厦门卫视企业联合赞助方案
评论
0/150
提交评论