俄罗斯方块课程设计.docx
- 文档编号:27945564
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:20
- 大小:62.04KB
俄罗斯方块课程设计.docx
《俄罗斯方块课程设计.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
俄罗斯方块课程设计
JIUJIANGUNIVERSITY
课程设计
题目俄罗斯方块
英文题目Russiansquare
院系信息科学与技术学院
专业计算机科学与技术
姓名xxx
班级学号XXXXXX
指导教师xxx
二○一二年五月
摘要
教学和科研是各大专院校的两项中心工作,教学质量决定了培养人才质量的高低,科研水平是高校综合实力的重要标志。
近年来,各大中专院校越来越重视自身的科研工作。
俄罗斯方块(Tetris,俄文:
Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
由于上手简单、老少皆宜,从而家喻户晓,风靡世界。
关键词:
俄罗斯方块,小游戏
目录
摘要I
目录II
1绪论1
1.1软件1
1.2软件工程1
1.3软件开发方法1
1.4C语言特点1
1.5章节小结2
2需求分析2
2.1分析案例2
2.2系统分析3
2.2.1系统流程图3
2.2.2系统顶层数据流图4
2.2.3系统的数据字典的描述4
2.3对所选项目进行分析5
2.3.1经济、技术和操作方面的分析5
2.3.2对项目中的问题和解决方案5
2.3.3结论6
2.4章节小结6
3系统设计6
3.1总体设计6
3.2详细设计7
3.2.1主界面和出错设计7
3.2.2程序流程图完成模块详细设计8
4编码实现9
4.1主控函数9
4.2二级函数10
4.3各函数的代码12
5系统测试14
5.1代码分析14
5.2白盒测试用例15
5.3黑盒测试用例16
5.4评价测试结果17
6总结与展望18
6.1总结18
6.2展望18
致谢20
参考文献21
1绪论
1.1软件
软件是用户与硬件之间的接口界面。
是一系列按照特定顺序组织的计算机数据和指令的集合。
一般来讲软件被划分为编程语言、系统软件、应用软件和介于这两者之间的中间件。
1.2软件工程
软件工程是指导计算机软件开发和维护的一门工程科学。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
1.3软件开发方法
软件开发是为了运用方法而提供的自动的或半自动的软件工程支撑环境,完成软件开发的各项技术方法,获得高质量的软件所需要完成的一系列任务,具有传统的开发方法和面向数据结构的开发方法、及面向对象方法的开发方法。
1.4C语言特点
C语言是结构化语言,及其数据类型丰富,简洁紧凑,灵活方便,运算符丰富;C语法限制不太严格,程序设计自由度大;C语言允许直接访问物理地址,可以直接对硬件进行操作;C语言程序生成代码质量高,程序执行效率高;C语言适用范围大,可移植性好。
1.5章节小结
本章只要对软件及软件工程的原理进行定义,力求使读者对软件工程的基本原理和方法有概括的本质的认识。
现在科学技术将人类带入了信息社会,计算机软件扮演着十分重要的角色,软件工程已成为信息社会高技术竞争的关键领域之一,而“软件工程”已成为高等学校计算机教育计划中的一门核心课程。
软件开发方法具有传统的开发方法和面向数据结构的开发方法、及面向对象方法的开发方法。
2需求分析
俄罗斯方块游戏是一款经典的小游戏,游戏的过程是需要玩家将不断下落的的各种形状的方块移动,翻转,如果某一行满了,就自动消行,积累分数,而当窗口中无法再容纳下落的方块时,就宣告游戏结束。
2.1分析案例
1、方块、方块移动、变形
在整个俄罗斯方块游戏中,方块的设计是核心,本系统设计了一个方块类:
用来生成方块以及实现块的左移、右移、快速、下降、变形、基本游戏元素。
2、自动升级
当分数积累到一定大小时,系统将自动为玩家提高难度,本系统设置没消10行方块(测试所用)就增加一级难度。
3、游戏音乐
为了增加游戏娱乐性,本游戏增加音乐功能,游戏开始音乐自动播放,游戏过程中都有音乐提示,如消行等,游戏结束同样有音乐提示。
2.2系统分析
2.2.1系统流程图
图2-1系统流程图
2.2.2系统顶层数据流图
图2-2系统顶层数据流图
2.2.3系统的数据字典的描述
名字:
GameForm
别名:
游戏界面
描述:
游戏界面的各种属性
定义:
GameForm=窗体区域信息(位置、大小)+网格区域信息+分数区域信息+背景色+前景色+方块的边长
位置:
显示在屏幕上
名字:
方块编码表BoxTable
别名:
描述:
唯一地标识方块的类型的编码
定义:
方块编码=方块号+形态号
位置:
游戏界面
名字:
Box
别名:
方块
描述:
描述方块的属性
定义:
方块=方块代码表+位置+方块号+形态号
位置:
游戏界面
名字:
score
别名:
分数
描述:
记录游戏过程中所获得的分数
定义:
分数=0{数字}1000
位置:
游戏界面
名字:
Grid
别名:
网格
描述:
承接方块的网格
定义:
网格=位示图(存储网格的每个点的占用情况,每个点用一位表示。
1为占用;0为空闲。
)
位置:
游戏界面
图2-3数据字典
2.3对所选项目进行分析
2.3.1经济、技术和操作方面的分析
经济可行性:
由于本游戏的主要背景是课程设计,不注重直接的经济效益和其中的发展方向,只在注重自身水平和能力的提高,对自身的经济要求不高,所以不用考虑到经济问题。
技术可行性:
本游戏使用的编程语言有C++,至于选择C++作为编程语言,这考虑到编写程序的困难度和对语言的了解程度。
需要对变量定义,界面、游戏初始化,及游戏过程的操作处理。
操作可行性:
本游戏采用纯键盘输入操作。
2.3.2对项目中的问题和解决方案
系统开发的总体任务是实现游戏的可操作性、美观性、及时性。
对于系统的需求分析要考虑到软件过程中的能见度,及对软件开发过程中的控制及管理,所以对软件需求完全理解是有必要的。
做好需求分析,就得对游戏的过程及操作及其了解。
在对系统的逻辑模型及物理模型进行描述时就有问题,这个用语言是很难解释清楚,所以用系统流程图对系统的物理元素及元素间流动和处理进行描述,而对系统的逻辑模型,则采用数据流图进行描述,并用数据字典精确定义数据流图中的元素。
2.3.3结论
本游戏软件的技术成熟、完备,各方面均无重大问题,因此本游戏可开始着手编写。
2.4章节小结
可行性研究进一步探讨问题定义阶段所确定的问题是否有可行的问题。
经过定义问题、分析问题、提出问题的反复过程,最终提出一个符合系统目标的高档次的逻辑模型。
用系统流程图对系统的物理元素及元素间流动和处理进行描述,而对系统的逻辑模型,则采用数据流图进行描述,并用数据字典精确定义数据流图中的元素。
3系统设计
3.1总体设计
1、按照总体设计的要求分析各组案例
根据最初提出的方案,在需求分析阶段得到的数据流图确定了该方案的实现基础,再经过一系列的需求分析,系统功能设计,在可行性研究确认了本方案的可行性。
所以本次提出的俄罗斯方块实现方案是可行的。
2、用层次图完成软件结构设计
图3-1俄罗斯方块层次图
3.2详细设计
3.2.1主界面和出错设计
主界面:
本游戏使用的C++编程:
分为三个界面、游戏界面、结束界面;
出错设计:
玩家错误,在开始界面时不满足输入规则发生错误,按Enter键开始游戏,其它无效;运行时错误,游戏界面交互时,由于本游戏由VC++编写,较稳定,基本不会崩溃,而且有各种游戏提示。
3.2.2程序流程图完成模块详细设计
图3-1程序流程图
程序复杂度的度量:
V=24-19+2=8;
4编码实现
4.1主控函数
voidmain()
{
Gamegame;
Gridgrid;
Boxbox;
Boxnext_box;
Rectgame_rect={0,0,480,520};//游戏整个界面的区域信息
Rectgrid_rect={6,8,398,502};//网格区域的位置信息
Rectscore_rect={412,328,475,364};//分数区域的位置信息
Rectgrade_rect={412,282,475,300};//等级区域的位置信息
StartFormstart_form(game_rect,GREEN,WHITE);
GameFormgame_form(game_rect,grid_rect,score_rect,grade_rect,GREEN,WHITE,25);
OverGameFormover_game_form(game_rect,GREEN,WHITE);
GameControlc(&box,&next_box,&grid,&game_form,&start_form,&game,&over_game_form);
c.StartGame();//游戏开始
}
4.2二级函数
voidClearLines(VectIntfullLines);//清行
VectIntGetFullLines(void)const;//获取满行数
boolAcceptBox(constBox&box);//接收方块
voidshow(void);//测试代码,显示网格
boolIsOccupied(intx,inty)const;//判断指定位置的网格是否被占有
voidSetOccupied(intx,inty);//填充指定位置的网格
voidresetGrid();//重置网格用于游戏重新开始
voiddrawNextBox(constBox&box)const;//下一个方块的擦除
voiddrawScore(intscore)const;//绘制分数
voideraseScore()const;//擦除分数
voiddrawGrade(intgrade)const;//绘制游戏等级
voideraseGrade()const;//擦除等级
voideraseGrid(void)const;//擦除网格
voiddrawGrid(constGrid&grid)const;//绘制网格
GameForm(Rectr,Rectg,Rects,Rectgrade,
COLORREFbColor,COLORREFfColor,intsize);
voiddraw(void)const;//绘制界面
voiddrawBox(constBox&box)const;//绘制方块
voideraseBox(constBox&box)const;//擦除方块
voidflash(VectIntlines)const;//闪烁
voidMoveLeft();//方块左移
voidMoveRight();//方块右移
boolDrop();//方块下落
voidRotate();//方块旋转
voidStraightDown();//方块直降
boolIsObstacle();//判断方块是否遇到障碍
voidClearLine();//清行
voidStartGame();//开始游戏
voidOverGame();//结束游戏
virtualvoiddraw(void)const=0;//绘制
voiderase(COLORREFeraseColor)const;//擦除
CommandreadOperator(void)const;//读取用户指令
voidMoveLeft(void);//逻辑左移
voidMoveRight(void);//逻辑右移
voidDrop(void);//逻辑下降
voidRocate(void);//逻辑旋转
voidInit(void);//初始化方块
voidshow(void);//测试代码,显示方块
CoordGetBoxPosition(void)const;//获取方块在网格中的位置
BoxCodeGetBoxCode(void)const;//获取方块编码
intGetBoxNo(void)const;//获取方块形态号
intgetScore(void);//获取分数
intgetGrade(void);//获取游戏等级
voidupGrade(intscore);//升级
voidscoring(intscore);//计分
intgetSpeed(void);//获取游戏速度
boolagain(void);//游戏重来一次
4.3各函数的代码
游戏方块的控制:
voidGameControl:
:
MoveLeft()//方块左移
{
BoxtempBox;
m_pGameForm->eraseBox(*m_pBox);
tempBox=*m_pBox;
m_pBox->MoveLeft();
if(true==IsObstacle())
{
*m_pBox=tempBox;
}
m_pGameForm->drawBox(*m_pBox);
}
voidGameControl:
:
MoveRight()//方块右移
{
BoxtempBox;
m_pGameForm->eraseBox(*m_pBox);
tempBox=*m_pBox;
m_pBox->MoveRight();
if(true==IsObstacle())
{
*m_pBox=tempBox;
}
m_pGameForm->drawBox(*m_pBox);
}
boolGameControl:
:
Drop()//方块下落
{
BoxtempBox;
m_pGameForm->eraseBox(*m_pBox);
tempBox=*m_pBox;
m_pBox->Drop();
if(true==IsObstacle())
{
*m_pBox=tempBox;
m_pGameForm->drawBox(*m_pBox);
returnfalse;
}
m_pGameForm->drawBox(*m_pBox);
returntrue;
}
voidGameControl:
:
Rotate()//方块旋转
{
BoxtempBox;
m_pGameForm->eraseBox(*m_pBox);
tempBox=*m_pBox;
m_pBox->Rocate();
if(true==IsObstacle())
{
*m_pBox=tempBox;
}
m_pGameForm->drawBox(*m_pBox);
}
voidGameControl:
:
StraightDown()//方块直降
{
while(true==Drop())
{
}
}
5系统测试
5.1代码分析
上次试验描述为例的描述:
主要功能为控制方块的移动以及方块的变形,先将原有的方块擦除,然后重新画出新位置的方块,不管左移、右移、快速下降、旋转原理都一样。
5.2白盒测试用例
图5-1被测试模块流程图
5.3黑盒测试用例
表3-1游戏方块移动模块测试
功能描述
测试游戏方块的移动
用例目的
功能是否相应实现
前提条件
游戏已开始
输入/动作
期望输出/相应
实际情况
按方向键"→"键
方块向右移动
与期望结果一致
按方向键"←"键
方块向左移动
与期望结果一致
按方向键"↑"键
方块选择变形
与期望结果一致
按方向键"↓"键
方块快速下降
与期望结果一致
除了空格键、Enter键和Esc键外的数字键和字母键
屏幕无反应
与期望结果一致
5.4评价测试结果
本次测试并没有列举所有功能模块对应的测试用例,只取了一些比较常用的测试用例,初步的测试了一下系统的功能,测试结果显示对应的模块功能在测试用例的显示下基本能正常运行,暂时未发现相关的BUG,日后扩展的功能将进行进一步的测试。
6总结与展望
6.1总结
游戏设计与实践是一项复杂而且庞大的工作,在选题之后,我才意识到过程的艰难,因为以前从来没有接触过游戏设计,刚开始时有点迷茫和彷徨。
后来通过看书和在网上查找资料,逐渐找到了一些感觉,也依照资料自己动手编写了简单经典的游戏。
本次设计让我初步懂得了电子游戏所涉及到的有关技术、方法,包括电子游戏分类、选题、构思等。
并实现几个可演示的游戏软件,其中有很多应用了学习的相关技术,并且做到了图、文、声并茂,能实际演示。
此次设计过程中印象最深的收获有:
1、学到了很多新知识,并且对老知识进行了回顾。
经过长时间的学习,更进一步熟悉了JAVA语言。
2、通过不断上机实验,调试程序,总结经验,从对课题的不理解到能够开始动手去做,提出问题并自己想办法解决问题,自己多实践,所以增强了动手能力。
3、提高了中、英文资料的检索能力。
这次过程中我查阅了很多资料,不但有图书馆的期刊、杂志、馆藏图书,还有网络中的电子文档、电子书籍、网页及下载的视频教学课程;不但有中文资料还有英文资料。
这些资料,使我的眼界更开阔,对课题的认识更加深刻,编写程序的时候思路更加清楚,少走了很多弯路。
但如果真的要从事游戏设计的工作,需要走的路还很长,即便是对于国际知名的大公司,也是在不断的探索和实践中前进。
但这并不表明前途就是渺茫的,通过这次实践,进行了一次从底而上和自上而下的归纳和演绎的过程,在变化多端的游戏面前,总算领悟了一点它的奥妙。
内容繁复、采用的表现手段多姿多彩的游戏世界,即便是再复杂,也可以通过一定程度的归纳演绎得出适应其规则和表现的契合点。
6.2展望
电子游戏自出现以来,经过几十年曲折的发展,已经成为一个成熟的产业,但它仍在不断的发展之中。
在我看来,游戏正朝着三维化、智能化和网络化三个方向发展。
三维化也就是我们通常所说的3D,以前我们玩的几乎都是2D平面游戏,缺乏真实感和形象感。
随着旋转、打光、材质贴图、模型等一系列技术在游戏中的应用,以及硬件处理能力的发展,3D游戏随之出现。
3D游戏以其更贴近现实的场景,3D游戏甚至可以让人不能清晰的区分虚拟和现实,达到忘我的境界,让玩家获得极大的满足,所以一出现就受到广大玩家的热烈欢迎。
以《磨兽世界》等为代表的3D游戏给了我们以全新的感觉,将来必将有更多的3D游戏出现。
智能化也就是应用人工智能技术使计算机能像人一样进行思考和推理。
早在20年前,世界各地的计算机专家们就预测,总有一天我们的电脑能像我们一样聪明。
事实证明这并不容易,专家们也都困惑起来,人工智能也陷入了低谷。
但自从世界顶级象棋大师被电脑击败以后,似乎又让人们看到了一些光明,因为人工智能研究者们开发的许多有用技术,非常适合游戏行业。
这使得电子游戏更加接近现实也更容易吸引玩家,以后必将有更多的人工智能出现在游戏中。
网络化更是有目共睹的事实,现在我们玩的大多数游戏都是网络游戏,网络游戏的规模也早已大大超过了单机游戏。
随着因特网的快速发展,网络提供了对声音、影像、音乐、3D动画和超文本等多媒体成分的完全支持,使开发者可以在开发出基于网络的高交互性的游戏,在游戏中可以建立一个虚拟的世界,玩家可以充当这个世界中的各种角色,并且和这个世界里的各种角色交流与合作等等。
网络使游戏变得更加奇妙和吸引人。
致谢
课程设计完成之际,谨向我的导师xx老师致以衷心的谢意!
老师渊博的科学知识、敏锐的学术思维、严谨求实的治学态度和不断进取的科研作风使本人受益匪浅。
在设计论文撰写期间,恩师不辞辛劳的指导以及鼓励,对我在专业方向上的进一步发展产生了积极的影响。
在此向王老师表示崇高的敬意和最衷心的感谢。
感谢所有关心和帮助过我的老师、同学和朋友,愿他们身体健康、工作愉快!
由于笔者经验不足、能力有限,论文中难免有缺陷和不足,恳请各位老师和同学多多指正。
参考文献
[1]张海藩.软件工程导论[J].清华大学出版社,2009,05(3):
忽略此处..
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 俄罗斯方块 课程设计