ImageVerifierCode 换一换
格式:DOCX , 页数:44 ,大小:148.51KB ,
资源ID:25611173      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25611173.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(湘潭大学软件设计实践副本.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

湘潭大学软件设计实践副本.docx

1、湘潭大学软件设计实践 副本软件设计实践报告单 位: 信息工程学院班 级: 计算机二班 学 号: 姓 名: 韩林波任课教师: 周维湘 潭 大 学2016年9月软件设计实践项目名称:俄罗斯方块一、 项目概述1、 概述作为家喻户晓的游戏,俄罗斯方块可谓是大名鼎鼎。不过,尽管它看起来比较简单,实际上对于我们新手而言确实是一个具有挑战性的项目。我们准备先简单的理解下俄罗斯游戏开发的大概算法和需要的知识,然后把这些知识组合开发俄罗斯方块。基本上实现俄罗斯方块游戏的控制和操作。并使用windows IDE搭建一个完整的windows应用程序。通过这个项目,提高自身的动手能力。2、 目的和用途我们在实际动手过

2、程中,将C+课程中所学的概念、理论和方法加以运用,按照C+程序设计的基本步骤,设计出了一个适当规模的程序来实现设计课程内容中的全部功能;设计了主控模块程序对给出的程序源代码给出了各部分的详细注释自己根据能力及需要添加相应功能模块,增强模拟系统功能。完整的项目内容也增强了我在课堂中的理论学习,为实习工作打下了基础。3、 需求说明利用Microsoft Visual stdio 2010编写一个windows窗口应用程序下的俄罗斯方块游戏。要求:(1)利用面向对象的方法编写。(2)能够记录游戏得分。(3)俄罗斯方块的多种类和旋转操作(4)信息提示时显示颜色变化。(5)暂停和重新开始4、 环境要求本

3、程序采用Microsoft Visual stdio 2010的专业版本进行编译。Microsoft Visual stdio 2010是Microsoft公司推出的基于Windows操作系统的可视化C+编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C+规范,有相当多的编程人员使用Microsoft Visual stdio 2010进行应用系统的开发。关于稳定性,经测试,本程序可以在windows操作系统中稳定运行,较为稳定。VC+是由Microsoft公司制作,基于WINDOWS环境的一款编程软件。由于WINDOWS操作

4、系统比起MS-DOS操作系统优越了许多。作为与之相搭配的编程软件自然也是功能非常强大,其最大的特点也就是可视化。不过在提供可视化的编程方式的同时,它采用了面向对象的程序设计方法,同传统的结构化程序设计方法相比,缩短了软件开发的周期,提高了软件的开发效率,使程序员可以更好地理解和管理庞大且复杂的程序。VC+中还集成了大量的最新技术,如ActiveX,COM等技术适合开发大型工程,这是相对于VB的一个优势。它的兼容性较好,还为用户提供了极为丰富的文档和范例。关于VC的参考资料也非常多,程序开发人员可以紧紧地把握住软件开发技术发展的方向,开发出功能强大的应用程序。二、 系统分析与设计1、 系统分析根

5、据分析,俄罗斯方块这个程序一共要实现如下几个功能,开始游戏、游戏的暂停继续、游戏控制和退出游戏。其中游戏控制最为主要和重要,它控制着整个游戏的画面和有关数据的操作,是游戏的核心部分。暂停和退出功能做成一体,在退出的提示下不做任何操作即可实现暂停的功能。程序结构如图。 2、 系统设计根据分析后的程序结构图设计出相应的流程图。俄罗斯方块的内容主要包括游戏开始,画背景和边框,显示分数等级和下一个方块的预览图;根据速度没隔一定时间方块自动下落,当有按键操作时,根据相应按键执行动作,每次动作前要判断是否动作可以执行。下落方块满一行时,消去该行,根据消去行数得到相应分数。分数达到一定程度,等级提升,速度加

6、快。同时可以响应Esc按键,提示是否退出程序。如图所示。 3、 模块/函数设计根据程序的结构,将俄罗斯方块需要实现的功能细化为相应的类成员函数。程序有三个类,一个Block类,作为程序的元素块组成其他元素。一个MyMap类,用于整个俄罗斯方块的地图相关操作。一个Manage类,用于整个游戏的相关操作。-Block类设计声明class CBlockpublic: CBlock(void); CBlock(void); void initBlock(); void _initNextBlock(); /初始化下一个方块 void SetBlockMove(bool isLeft); /方块移动 v

7、oid SetBlockDown(); void SetBlockChange(); /方块坐标变化public: BLOCK_POS * GetBlockHead() return m_blockDate; int GetBlockType() return m_blockType; int GetNextBlockType() return m_NextblockType; int GetBlockChangeType() return m_blockChangeType; BLOCK_POS * GetNextBlockHead() return m_NextblockDate;priv

8、ate: BLOCK_POS m_blockDateBLOCK_NUM; int m_blockType; int m_blockChangeType; BLOCK_POS m_NextblockDateBLOCK_NUM; int m_NextblockType; int m_NextblockChangeType;-MAP类设计声明(MyMap类)class CMyMappublic: CMyMap(void); CMyMap(void); void initMap(); /初始化地图 void DrawMap(HDC hdc); /绘制窗口地图 void SetMapVal(int ro

9、w,int col,int val); void SetMinMapVal(int row,int col,int val); int GetMapVal(int row,int col) return m_mapDaterowcol; /地图大小行列 int GetNum(); bool IsOver();/游戏是否结束 void SetBlockColor(int type); /地图块颜色 void SetNextBlockColor(int type);/下一个板块颜色private: int m_mapDateMAP_ROWMAP_COL; int m_NextMapDateBLOC

10、K_NUMBLOCK_NUM;private: RECT m_FillRect; HBRUSH m_BlockHr; HBRUSH m_FrameHr; HBRUSH m_RunBlockHr; HBRUSH m_MapHr; HBRUSH m_NextBlockHr;-Manager类设计声明(Manager类)class CManagepublic: CManage(HDC hdc); CManage(void); void initGame(); /初始化游戏 void UpdateGame(); /更新重新绘制游戏 void DrawGame(HDC hdc); /绘制游戏 void

11、MyHandleMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); void addGameSpeed(); /增加游戏速度 int getPause(); /是否暂停游戏 void setPause(int n); /暂停游戏 int getplayNum(); /获取游戏分数 void updateScoreList(int s); /更新游戏分数 private: HDC m_BuffDc; HBITMAP m_BuffBitmap;private: CMyMap *m_pMap; CBlock *m_pBloc

12、k; float m_GameSpeed; char m_Key; int m_PlayNum; int pause; /暂停标志;三、 系统实现1、 关键模块/函数的实现A游戏界面俄罗斯方块的游戏界面包括游戏区域边框、下落方块绘制、右部计分和预览图显示等。游戏区域边框的绘制比较简单,循环中确定光标的位置输出特定字符,即可完成边框绘制。游戏区方块的绘制,循环从数据数组中依次读出数据,根据读到的数据显示“”,最后组成方块的形状,完成方块的绘制。计分和预览图部分先画出一个矩形区域,然后控制光标在其中显示分数、等级、预览图和提示信息。具体实现:#include StdAfx.h#include My

13、Map.hCMyMap:CMyMap(void) for(int i = 0; i MAP_ROW; i+) for(int j = 0; j MAP_COL; j+) m_mapDateij = MAP_NULL; memset(m_NextMapDate,0,sizeof(int) * BLOCK_NUM * BLOCK_NUM); m_FillRect.top = 0; m_FillRect.bottom = 0; m_FillRect.left = 0; m_FillRect.right = 0; m_BlockHr = NULL; m_FrameHr = NULL; m_RunBlo

14、ckHr = NULL; m_MapHr = NULL; m_NextBlockHr = NULL;CMyMap:CMyMap(void) if(m_BlockHr) DeleteObject(m_BlockHr); if(m_FrameHr) DeleteObject(m_FrameHr); if(m_RunBlockHr) DeleteObject(m_RunBlockHr); if(m_MapHr) DeleteObject(m_MapHr); if(m_NextBlockHr) DeleteObject(m_NextBlockHr);void CMyMap:initMap() for(

15、int i = 0; i MAP_ROW; i+) for(int j = 0; j MAP_COL; j+) if(i = 0 | i = MAP_ROW - 1 | j = 0 | j = MAP_COL - 1) m_mapDateij = MAP_FRAME; else m_mapDateij = MAP_NULL; memset(m_NextMapDate,0,sizeof(int) * BLOCK_NUM * BLOCK_NUM); m_FrameHr = CreateSolidBrush(RGB(127,127,127); m_BlockHr = CreateSolidBrush

16、(0x373737); m_MapHr = CreateSolidBrush(RGB(0,64,128);void CMyMap:DrawMap(HDC hdc) for(int i = 0; i MAP_ROW; +i) for(int j = 0; j MAP_COL; +j) switch(m_mapDateij) case MAP_RUNBLOCK: SetRect(&m_FillRect,200 + j * MAP_SIZE,15 + i * MAP_SIZE, 200 + (j + 1) * MAP_SIZE,15 + (i + 1) * MAP_SIZE); FillRect(h

17、dc,&m_FillRect,m_RunBlockHr); FrameRect(hdc,&m_FillRect,m_FrameHr); break; case MAP_BLOCK: SetRect(&m_FillRect,200 + j * MAP_SIZE,15 + i * MAP_SIZE, 200 + (j + 1) * MAP_SIZE,15 + (i + 1) * MAP_SIZE); FillRect(hdc,&m_FillRect,m_BlockHr); FrameRect(hdc,&m_FillRect,m_FrameHr); break; case MAP_FRAME: Se

18、tRect(&m_FillRect,200 + j * MAP_SIZE,15 + i * MAP_SIZE, 200 + (j + 1) * MAP_SIZE,15 + (i + 1) * MAP_SIZE); FillRect(hdc,&m_FillRect,m_MapHr); FrameRect(hdc,&m_FillRect,m_FrameHr); break; for(int i = 0; i BLOCK_NUM; +i) for(int j = 0; j 4; -i) bool isClear = true; for(int j = 1; j 4; -m) for(int n =

19、1; n MAP_COL - 1; +n) m_mapDatemn = m_mapDatem - 1n; i+; return num;void CMyMap:SetMinMapVal( int row,int col,int val ) m_NextMapDaterowcol = val;bool CMyMap:IsOver() bool isOver = false; for(int m = 1; m MAP_COL - 1; +m) if(m_mapDate4m != MAP_NULL) return true; return isOver;void CMyMap:SetBlockCol

20、or( int type ) if(m_RunBlockHr) DeleteObject(m_RunBlockHr); switch(type) case 0: m_RunBlockHr = CreateSolidBrush(RGB(255,0,0); break; case 1: m_RunBlockHr = CreateSolidBrush(RGB(0,255,0); break; case 2: m_RunBlockHr = CreateSolidBrush(RGB(0,0,255); break; case 3: m_RunBlockHr = CreateSolidBrush(RGB(

21、255,255,0); break; case 4: m_RunBlockHr = CreateSolidBrush(RGB(255,0,255); break; case 5: m_RunBlockHr = CreateSolidBrush(RGB(0,255,255); break; case 6: m_RunBlockHr = CreateSolidBrush(RGB(255,0,128); break; void CMyMap:SetNextBlockColor( int type ) if(m_NextBlockHr) DeleteObject(m_NextBlockHr); swi

22、tch(type) case 0: m_NextBlockHr = CreateSolidBrush(RGB(255,0,0); break; case 1: m_NextBlockHr = CreateSolidBrush(RGB(0,255,0); break; case 2: m_NextBlockHr = CreateSolidBrush(RGB(0,0,255); break; case 3: m_NextBlockHr = CreateSolidBrush(RGB(255,255,0); break; case 4: m_NextBlockHr = CreateSolidBrush

23、(RGB(255,0,255); break; case 5: m_NextBlockHr = CreateSolidBrush(RGB(0,255,255); break; case 6: m_NextBlockHr = CreateSolidBrush(RGB(255,0,128); break; B生成方块本程序中生成的方块有六种形状,每一种方块以shapeindex标记,在程序运行生成方块时,调用shapeindex=rand()%5+1;语句,确定当前要显示的是哪一个方块形状。而在实际运行中,第一次需要调用两次生成方块函数make(),将先产生的赋给游戏当前方块,第二个赋给预览图方块

24、。以后每次产生一个方块,把预览方块赋给当前方块,把新产生的赋给预览方块。具体如图所示。具体实现:void CBlock:_initNextBlock() m_NextblockType = rand() % 7; switch(m_NextblockType) case 0: m_NextblockChangeType = rand() % 2; switch(m_NextblockChangeType) case 0: m_NextblockDate0.row = 2; m_NextblockDate0.col = 0; m_NextblockDate1.row = 2; m_Nextblo

25、ckDate1.col = 1; m_NextblockDate2.row = 2; m_NextblockDate2.col = 2; m_NextblockDate3.row = 2; m_NextblockDate3.col = 3; break; case 1: m_NextblockDate0.row = 3; m_NextblockDate0.col = 1; m_NextblockDate1.row = 2; m_NextblockDate1.col = 1; m_NextblockDate2.row = 1; m_NextblockDate2.col = 1; m_Nextbl

26、ockDate3.row = 0; m_NextblockDate3.col = 1; break; break; case 1: m_NextblockDate0.row = 1; m_NextblockDate0.col = 1; m_NextblockDate1.row = 1; m_NextblockDate1.col = 2; m_NextblockDate2.row = 2; m_NextblockDate2.col = 1; m_NextblockDate3.row = 2; m_NextblockDate3.col = 2; break; case 2: m_NextblockChangeType = rand() % 4; switch(m_Nex

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1