面向对象程序设计(C++)大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象程序设计(C++)课程大作业
设计题目:
院系:计算机科学与信息工程学院
专业班级: 09软件工程(2)班
学号姓名: ************ 刘国松
200903004012 吕秀锦
200903040034 高婉婉
指导教师:**
目录
一、成员分工 (1)
二、需求分析 (2)
三、总体设计 (3)
四、详细设计 (8)
五、系统测试 (24)
六、总结 (30)
七、参考文献 (31)
一成员分工
我们小组成员共有三名,分别是刘国松、吕秀锦、高婉婉,为了能按时圆满的完成这次VC++课程设计,我们小组进行了详细的分工,以确保设计能按时完成。经过周密的考虑和详细的调查最终确定该俄罗斯方块游戏需要以下几个功能模块:
(1)需求分析
(2)界面的设计
(3)背景色的选择模块
(4)游戏随机选择方块模块
(5)游戏预览功能模块
(6)收埋功能模块
(7)记分功能模块
(8)鼠标控制功能模块
(9)模块联结
(10)系统测试
经过小组成员的讨论,并根据个人的特长和具体爱好做如下具体分工:
刘国松具体完成以下模块的设计与实现:
(1 )需求分析
(2 )界面的设计
(3 )背景色的选择模块
吕秀锦具体完成以下模块的设计与实现:
(1)游戏随机选择方块模块
(2)游戏预览功能模块
(3)收埋功能模块
(4)记分功能模块
高婉婉主要具体完成以下模块的设计与实现:
(1)鼠标控制功能模块
(2)模块联结
(3)系统测试
二需求分析
1.系统概述
该游戏软件在Windows系统为玩家提供传统俄罗斯方块游戏的基本功能,玩家可以通过键盘控制在游戏区中堆积软件随机提供的由四个小方块不同组合的7种类型不同颜色的方块,每个小方格的颜色也是随机的,并且在整个下落的过程中,其颜色也呈动态变化。游戏过程中,每在游戏区堆满一行后,自动消除并记分。同时消去的行数越多,那一次性所加的分数也就越多。一行是100,两行是300,三行是600,四行是1000分。为了得到更多的分,那么我们游戏者就要想办法一次尽可能多的消去方块。当游戏区不能再堆积新来的方块时,游戏结束。游戏设定3个级别,初级,中级和高级,级别越高,方块下降的速度越快、难度越大,玩家可以根据自己的需要自由设定初始游戏级别,达到最高级别时不再增加。游戏以最终玩家获得的分数来判断玩家水平的高低。游戏为对战型俄罗斯方块,玩家依靠自己消层和使用道具来打击对手。当玩家游戏池中的砖块累积到顶端时游戏失败。
2.系统运行环境
(1)硬件环境。本系统适用于那种Inter386以上计算机,内存容量为128M,应配备,键盘,鼠标,
显示器等外部设备。
(2)软件环境。本系统的设计采用Visual C++6.0编写。在Windows XP SP2环境下测试通过
(3)本游戏软件在Windows平台下都可以运行。
3.功能需求描述
这是一次尝试,一个比较成功的设计,其精彩的算法与漂亮的程序结构足以让人兴奋了。
这个游戏,不仅可以满足游戏爱好者对游戏的要求,同时我们增加了美观因素,让游戏有一个比较美观的界面,满足我们游戏爱好者的视觉要求。
这有别于常规的俄罗斯方块算法,游戏中,玩家依靠自己消层来得分。当玩家游戏池中的砖块累积到顶端时游戏失败。
三总体设计
1.屏幕的组成
一个游戏一定要有一个界面供游戏者对游戏控制。
这个界面中要包含让游戏者更加清楚游戏状态的信息,比如,一个方块在下落过程中,它的位置如何,形状是怎么样的,要如何放置这个方块,以及下一个方块是什么形状,这样关系着游戏者要如何放置方块,让整体有个更加的布局,有利于游戏的进行。屏幕由20行13列的网格组成;其中0~2行:初始的形状将在这里形成然后下落,这三行用户不可见;3~19区域;20,其标记已到屏幕底部。在界面的右边就是相关的游戏信息,级别控制,开始游戏控制,背景色的选择,当前方块的坐标,组型,颜色及类型(ZZ表示)以及目前的得分情况,下一个预览方块,鼠标控制信息(变形,左移,右移和加速下落),
收埋信息(分别向上,下,左和右收埋,及结束游戏收埋,这时将显示版权信息)。
2.形状的组成
每一种形状都是由四个方块组成,比如■■■■由四个方块横向排列而成
3.形状的统一
■■■■等共19种形状(旋转前后的形状归为不同的形状),虽然在玩游戏时我们会去将各种不同的形状有个不同的命名(比如“条子”,“方块”等),但在设计游戏是它们却是统一的,它们都是“形状”。这一点是游戏成功的基础。
为了使各种不同的形状达到统一的设计,我设计了如下解决方案:将形状始终放在4×4的格子中,以该4×4格子的第一个格子为“基础点”,只要给出组成形状的四个块相对于该基础点的相对坐标。
★□□□★为基础点,形状各块的相对坐标是相对于这个基础点的
□□□□
□□□□
□□□□
那么■■■■在其中就如图:其四个方块相对于基础点的网格坐标就为
(0,2)(1,2)(2,2)(3,2)
□□□□
□□□□
■■■■ 02122232
□□□□
同理:
□□□□
□□□□
■■□□
■■□□ 02120313
这样,我们只要知道某个形状的相对坐标值数组,就可以轻松地求出它的各方块的排列方式,也就是其形状(样子)。
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
所以所有形状便得到了统一,如图形状
□□□□
□□□□