软件工程课程
论文
政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载
(俄罗斯方块)
湖南农业大学课程论文
学 院:信息科学技术 班 级:08计算机2班 姓 名:漆勇 学 号:200841842207
课程论文题目:俄罗斯方块软件
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
与测试 课程名称:软件工程课程设计
评阅成绩:
评阅意见:
成绩评定教师签名:
日期: 年 月 日
俄罗斯方块软件设计与测试
引言:软件工程 (Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
,设计模式等方面。
在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。
围绕工程设计、工程支持以及工程管理已提出了以下四条基本原则:
(1)选取适宜的开发模型
该原则与系统设计有关。在系统设计中,软件需求、硬件需求以及其它因素间是相互制约和影响的,经常需要权衡。因此,必需认识需求定义的易变性,采用适当的开发模型,保证软件产品满足用户的要求。
(2)采用合适的设计方法
在软件设计中,通常需要考虑软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。合适的设计方法有助于这些特征的实现,以达到软件工程的目标。
(3)提供高质量的工程支撑
工欲善其事,必先利其器。在软件工程中,软件工具与环境对软件过程的支持颇为重要。软件工程项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。
(4)重视软件工程的管理
软件工程的管理直接影响可用资源的有效利用,生产满足目标的软件产品以及提高软件组织的生产能力等问题。因此,仅当软件过程予以有效管理时,才能实现有效的软件工程。 一、 需求分析
1、 软件功能描述
俄罗斯方块是史上最伟大的游戏之一,它的发明者是阿列克谢•帕基特诺夫(Alexey Pazhitnov)。究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。这款俄罗斯方块游戏是一款比较简单原始的游戏,没有太多功能,是对以往游戏的一个模仿。它的主要功能是玩家可以根据游资
规则
编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf
玩该游戏。
2、 系统功能需求
系统的功能有:
方块的构成:方块的构成总共有7种形状,分别以S、Z、L、J、I、O、T这7个字母的形状来命名;它们可以旋转变换,其中O形的不会变换形状,I形的两种,S和Z形的分别有两种,L、J、T的各有四种形状可以变换;所有方块均有4个小方块构成;
方块的操作:通过键盘的方向键控制方块的下落,左键控制左移,右键控制右移,上键控制变形,下键控制加速;其中移动是每按键一次移动一个网格,变形则每按键一次旋转到下一个形状,加速则每按键一次加速一个网格的下落;
游戏区域控制:当游戏开始,区域上方不断有方块掉落,通过方向键可以实现对掉落方块左右移动、变形加速的控制,使之能够填充游戏区域底部,当以行或者多行被填满,则消除该行所有方块,垒在其上的方块则掉下来代替该空间;游戏的结束是以下落方块的顶部到达游戏区域顶部作为判断依据,表示装满溢出;
方块的产生:游戏区域的右上方要预先提示,即显示下一个将要产生的方块;
游戏开始:游戏开始后,可以玩游戏;
游戏暂停:游戏暂停后,游戏状态定格在暂停的那一时刻,可以点击开始继续游戏,也可以结束游戏;
游戏结束:开始游戏后,可以结束游戏;
游戏级别设置:游戏共分为笑傲江湖、逐鹿中原、隐退江湖,每个级别的判断是根据方块下来的速度作为依据;
游戏区域大小:游戏区域可以分为2种,根据网格的多少分为12行10列和18行15列;
背景音乐:可以播放背景音乐或者取消背景音乐;
菜单栏:菜单栏里设置了三个item,分别是游戏,选项和帮助;游戏里又包括了5个item,分别是开始游戏,暂停游戏,结束游戏,游戏设置和退出游戏;选项里有两个item,分别是游戏级别设置和声音,级别设置的下拉菜单把所有级别都放在里面;
工具栏:工具栏里放了四个快捷操作,分别是开始,暂停,结束和选项;
游戏区域控制:当游戏开始,区域上方不断有方块掉落,通过方向键可以实现对掉落方块左右移动、变形加速的控制,使之能够填充游戏区域底部,当以行或者多行被填满,则消除该行所有方块,垒在其上的方块则掉下来代替该空间;游戏的结束是以下落方块的顶部到达游戏区域顶部作为判断依据,表示装满溢出;
方块的产生:游戏区域的右上方要预先提示,即显示下一个将要产生的方块;
游戏开始:游戏开始后,可以玩游戏;
游戏暂停:游戏暂停后,游戏状态定格在暂停的那一时刻,可以点击开始继续游戏,也可以结束游戏;
游戏结束:开始游戏后,可以结束游戏;
游戏级别设置:游戏共分为笑傲江湖、逐鹿中原、隐退江湖,每个级别的判断是根据方块下来的速度作为依据;
游戏区域大小:游戏区域可以分为2种,根据网格的多少分为12行10列和18行15列;
功能设置输入及显示,当鼠标选择游戏级别时,方块的下落速度有相应变化;选择方块样式时,方块样式有相应变化;选择背景音乐的复选框时,出现有音乐和无音乐的变化;所以综上所述,功能的选择合法,符合要求。
游戏进行过程功能实现:游戏开始,游戏区域出现方块下落并在区域右上方有下一下落方块提示;点击结束后,游戏区域方块消失,游戏右边所有显示消失;点击暂停后,游戏区域正在下落的方块停止不动,当点击结束后,界面恢复成刚打开游戏时模样;当再点击开始后,方块继续下落,游戏继续,符合预期效果。
背景音乐:可以播放背景音乐或者取消背景音乐;
菜单栏:菜单栏里设置了三个item,分别是游戏,选项和帮助;游戏里又包括了5个
item,分别是开始游戏,暂停游戏,结束游戏,游戏设置和退出游戏;选项里有两个item,
分别是游戏级别设置和声音,级别设置的下拉菜单把所有级别都放在里面; 工具栏:工具栏里放了四个快捷操作,分别是开始,暂停,结束和选项;
3、 系统数据流图
俄罗斯方块流程图
, 俄罗斯方块键盘操作的流程图,如图1-1所示
, 俄罗斯方块驱动流程图,如图1-2所示
, 俄罗斯方块所有绘图工作流程图,如图1-3所示
, 俄罗斯方块规则流程图,如图1-4所示
, 俄罗斯方块状态转换图,如图1-5所示
Down
记下下降图形时的位置
()
直接把图形下降到底
行满 Y
N N
网格满
消除行并把上面的行数提示图形变量给当前图形
据下移并置清行为true、
clearall 当前图改变为false
随机生成一个图形
交给提示图形变量 clear
draw Over
Over
图1- 1 键盘响应
Start
Random
交给当前图形变量
随机生成一个图形
交给提示图形变量
在每个时间片上执行根据变化绘图(绘提示一次 ) 图和当前图形
N 图形到底了吗
Y 图形下降一行
绘图一次
行满
Y
N
N
网格满
消除行并把上面的行数Y 提示图形变量给当前图形
据下移并置清行为true、
清所有数据 当前图改变为false 随机生成一个图形交给提
示图形变量 绘图(清屏) 绘图 Gameover
结束
图1-2 游戏驱动图
开始
输出分数
刚才位置的图形,包括清除提示图和当前图
当前图形
改变
绘当前图的现在位置
提示图形改
变真,
绘提示图
消行动作为
真,
重绘网格
游戏结束 清除所有数据并清屏
结束
图1-3 游戏区域绘制
场景生成规
则
积木生成规则
碰撞检测规检测成功
则
消除规则 检测失败
(在速度设置中满足时间间隔条件)
下落规则 移动规则 胜利与失败规
则
图1-4 规则流程图
开始
1.解释用户指令命令
2.根据不同的指示做出
相应功能的操作
3.1向左3.2向右3.3向下3.4变形 移动一个移动一个移动一个
单位 单位 单位
结束
图1-5
二、 软件具体设计
2、1 模块界面设计
游戏主界面
游戏界面
英雄版的名单
游戏设定界面
2、2详细说明:
本程序使用的是Win32 Api + HoHo游戏引擎完成。
a) 功能划分:
i. 菜单选择界面 (图标1)
ii. 游戏主界面 (图标2)
iii. 排行榜界面 (图标3)
iv. 游戏设定界面 (图标4)
v. 游戏退出
b) 功能说明:
i. 菜单选择界面
1. 要求菜单项使用半透明的字体完成(图片已经给出)
2. 当鼠标移动到某菜单项上时,或通过键盘选择某项时,要求该菜单突出显
示;
3. 能够通过敲入回车键,或鼠标单击某项时,进入相应的菜单项
4. 最后一个菜单项,能够退出程序
ii. 游戏主界面
1. 能够完成俄罗斯方块的基本功能,包括(方块的下落,变化,堆积,消除,
积分,过关)
2. 能够显示下一个方块,各种类型的方块要求有颜色的改变
3. 积分能够显示,等级能够显示
4. 敲入esc键能退回到菜单选择项,退回时要求游戏暂停(下同)
5. 游戏有暂停/恢复的功能
iii. 排行榜界面
1. 排行榜的显示,显示格式如图标3, 可以进行改进,但要求显示格式按
积分排序
iv. 游戏设定界面
1. 游戏需要有设定的功能,包括各种键盘的设定,难度设定,功能自定
2、3 软件实现部分代码
/* 功能:初始化图片变量
参数:void */
BOOL Game::InitBitmap()
{
m_pBackBMP = GetGraphics()->CreateBitmapFromJPG("res\\bgrp\\start.jpg");
//游戏进行
m_pGameBMP = GetGraphics()->CreateBitmapFromJPG("res\\bgrp\\sky.jpg");
m_pSet = GetGraphics()->CreateBitmapFromJPG("res\\bgrp\\set.jpg");
m_pHero = GetGraphics()->CreateBitmapFromJPG("res\\bgrp\\hero.jpg");
//初始化菜单图片
m_pMenu[0] = GetGraphics()->CreateBitmapFromTGA("res/menu/start.tga");
m_pMenu[1] = GetGraphics()->CreateBitmapFromTGA("res/menu/rec.tga");
m_pMenu[2] = GetGraphics()->CreateBitmapFromTGA("res/menu/set.tga");
m_pMenu[3] = GetGraphics()->CreateBitmapFromTGA("res/menu/over.tga");
m_pContinue= GetGraphics()->CreateBitmapFromTGA("res/menu/continue.tga");
//方块
m_pBlockBmp[0] = GetGraphics()->CreateBitmapFromBMP("res\\land\\red.bmp");
m_pBlockBmp[0]->SetColorKey(RGB2Hi(255,255,255));
m_pBlockBmp[1] = GetGraphics()->CreateBitmapFromBMP("res\\land\\blue.bmp");
m_pBlockBmp[1]->SetColorKey(RGB2Hi(255,255,255));
//级别
m_pLevel[0] = GetGraphics()->CreateBitmapFromTGA("res/level/level1.tga");
m_pLevel[1] = GetGraphics()->CreateBitmapFromTGA("res/level/level2.tga");
m_pLevel[2] = GetGraphics()->CreateBitmapFromTGA("res/level/level3.tga");
m_pLevel[3] = GetGraphics()->CreateBitmapFromTGA("res/level/level4.tga");
m_pLevel[4] = GetGraphics()->CreateBitmapFromTGA("res/level/level5.tga");
//返回主菜单
m_pBackMenu = GetGraphics()->CreateBitmapFromTGA("res/menu/mainmenu.tga");
//音乐菜单
m_pMusicMenu= GetGraphics()->CreateBitmapFromTGA("res/menu/musicmenu.tga");
//重置菜单
m_pClearMenu= GetGraphics()->CreateBitmapFromTGA("res/menu/reset.tga");
return true;
}
void Game::InitBkMusic()
{
//初始化背景音乐
g_pMusic = CreateMusic(m_hWnd);
g_pMusic->SetBGMode( TYPE_MIDI );
g_pMusic->SetBGRepeats( -1 );
g_pMusic->LoadBG( "res\\bkmusic.mid");
g_pMusic->PlayBG();
}
/************************************************************************/ /* 功能:游戏开始初始化
参数:hwnd 窗口句柄。*/
BOOL Game::Init(HWND hwnd)
{
m_hWnd = hwnd;
//创建显示
g_pDisplay = CreatePlane2D(hwnd,640,480,true);
g_pDisplay->SetDisplayFPS(false);
//创建字体
m_hFont = CreateFont(20, 20, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
GB2312_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH, "宋体");
//g_hFont = msCreateFont( "Font12.dat" );
InitBitmap();
InitBkMusic();
//初始化数据
memset(&m_Pinal, 0, 23 * 15 *4);
memset(&m_Block,0,16);
memset(&n_Block,0,16);
m_Sore = 0;
m_nextrad = -1;
m_rad = -1;
m_SelectMainMenu= -1;
m_GameScene = -1;
m_GameProcess = 0;
m_change = 0;
m_Speed = 1;
m_xIndex = 6;
m_yIndex = 0;
m_MianMenuFlag = 0;
m_selectSetMenu = 0;
m_ClearMenuFlag = 0;
m_IsBkMusicClose= TRUE;
m_FirstBlockFlag = TRUE;
return true;
}
* 功能:处理初始界面键盘消息
参数:wParam 键盘的键值 */
void Game::KeyMessage(WPARAM wParam) {
switch (wParam)
{
case VK_UP:
m_SelectMainMenu--;
if (m_SelectMainMenu < 0)
{
m_SelectMainMenu = 0;
}
break;
case VK_DOWN:
m_SelectMainMenu++;
if (m_SelectMainMenu > 3)
{
m_SelectMainMenu=3;
}
break;
case VK_RETURN:
{
HandleMenu();
break;
}
default:
break;
}
}
/* 功能:处理游戏设置界面消息
参数:msg 游戏设置界所 产生的消息
*/void Game::GameSetMsg(MSG& msg)
{
int yy = HIWORD(msg.lParam);
int xx = LOWORD(msg.lParam);
switch(msg.message)
{
case WM_KEYDOWN:
{
switch (msg.wParam)
{
case VK_UP:
{
if (m_selectSetMenu == 0)
{
m_Speed++;
if (m_Speed>5)
{
m_Speed = 5;
}
SetTimer(m_hWnd,ID_TIME,(500.0)/m_Speed,0);
}
if (m_selectSetMenu == 1)
{
m_IsBkMusicClose = false;
g_pMusic->PlayBG();
}
break;
}
case VK_DOWN:
if (m_selectSetMenu == 0)
{
m_Speed--;
if (m_Speed < 1)
{
m_Speed = 1;
}
SetTimer(m_hWnd,ID_TIME,(500.0)/m_Speed,0);
}
if (m_selectSetMenu == 1)
{
m_IsBkMusicClose = true;
g_pMusic->StopBG();
}
break;
case VK_LEFT:
{
m_selectSetMenu = abs((m_selectSetMenu+1)) % 3;
return;
}
case VK_RIGHT:
{
m_selectSetMenu = abs((m_selectSetMenu+1)) % 3;
return;
}
case VK_RETURN:
{
if (m_selectSetMenu == 2)
{
m_GameScene = -1;
}
break;
}
case VK_ESCAPE:
m_GameScene = -1;
return;
default:
break;
}
}
case WM_MOUSEMOVE:
{
m_MianMenuFlag = 0;
if (xx>220 && yy>350 && xx< 320 && yy < 400)
{
m_MianMenuFlag = 1;
}
return;
}
case WM_LBUTTONDOWN:
{
if (m_MianMenuFlag == 1)
{
m_GameScene = -1;
}
return;
}
default:
break;
}
}
三、 软件测试
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
键盘的输入:游戏开始后,通过上下键控制选择游戏级别,响应出现不同的游戏画面和级别,方块下落时键盘左键可控制方块左移,当移到游戏区域左边界时,继续按左键则操作无效;右键可控制方块右移,当移到游戏区域右边界时,继续按右键则操作无效;下键控制方块加速下落,当方块触碰到游戏区域底部或者已堆积的方块时下键操作无效;商检控制方块的旋转变形,当方块即将变换的下一形状会触碰区域左右边界或者底部边界或者底部堆积方块,则变形操作无效。通过检查,键盘输入均符合上述要求。
功能设置输入及显示,当鼠标选择游戏级别时,方块的下落速度有相应变化;选择方块样式时,方块样式有相应变化;选择背景音乐的复选框时,出现有音乐和无音乐的变化;所以综上所述,功能的选择合法,符合要求。
游戏进行过程功能实现:游戏开始,游戏区域出现方块下落并在区域右上方有下一下落方块提示;点击结束后,游戏区域方块消失,游戏右边所有显示消失;点击暂停后,游戏区域正在下落的方块停止不动,当点击结束后,界面恢复成刚打开游戏时模样;当再点击开始后,方块继续下落,游戏继续,符合预期效果。
四、 总结
此项目的开发所用到的工具是VC++,并用VC++里的MFC机制的文档-视图-框架结构实现对俄罗斯方块的设计。所以,我必须首先要做的有两件事,一是我必须弄明白俄罗斯方块这部经典游戏的玩法,观察方块的构成,场景的构造和玩这个游戏需要哪些控件来完成相应功能,从而总结出要完成这部游戏的开发,需要的核心思想是什么;二是我要弄懂怎么用MFC来编写小游戏,即怎么在空白窗口绘制图形,怎么实现键盘鼠标的响应和怎么实现物体的移动等功能。这些是前期工作,必须做好,接下来就该思考怎么样用代码实现方块的构成,观察得,俄罗斯方块共有7种不同形态的方块,其余都是变形得来的,然后它们每个方块都是由4个小方块构成然后依此构造下去,就构造好了方块。接下来就要把场景设置好,这里场景的绘制是在函数DrawGame里绘制的,然后被OnDraw调用实现场景绘制,接下来是游戏实现,先是正常流程实现,然后是对俄罗斯方块能够下降,移动,变形,销行等基本功能的实现,最后是功能的完善,有级别选择,背景音乐等。至此,源代码设计完成。
这次开发最后的所得的有源代码,软件工程文档以及可执行文件。本次开发的软件的主要功能是玩家可以根据游资规则玩该游戏。通过上下左右键控制方块的左右,下落速度和变形使得下落后的方块在堆满一行或几行后消掉。菜单栏里设置了三个选项,游戏、选项和帮助,工具栏里有开始,暂停,停止和设置四个选项。游戏里有开始游戏,暂停游戏,停止游戏,游戏设置和退出游戏的功能,选项里有级别和声音的选项,设置里有游戏区域大小的设置,游戏级别的选项,方块样式的选择,还有游戏声音的选择。
通过这次软件开发,学到了很多东西,对MFC也有比较清楚的了解,能够运用MFC编写小型游戏;对俄罗斯方块也有比较深刻的了解,发现这款游戏真的是款经典的游戏,不仅是玩,在制作上,也有很大的发展空间,通过最基本的核心理论,可以把这款游戏发展成多人同玩,对战,网上对战,2D游戏,或者添加一些阻碍等等。也遇到过很多困难,通过网上找资料和跑图书馆才得以解决。总之,让我受益匪浅,而且深刻感觉到,该多练习练习。 感谢这个过程中老师和同学对自己的帮助。