俄罗斯方块游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书
课程名称:高级语言程序设计
设计题目:俄罗斯方块游戏
院部:计算机科学与信息工程学院
学生姓名:
学号:
专业班级:物联网工程
指导教师:
2015年6月
课程设计任务书
目录
一前言 (4)
二需求分析 (4)
三概要设计 (5)
四详细设计 (7)
五改进或增加功能模块说明 (8)
六程序测试 (8)
七课程设计总结 (11)
八致谢 (11)
九参考文献 (12)
十源程序 (12)
俄罗斯方块游戏
一前言
C++程序设计牵涉到面向对象程序设计的理论、C++语言的语法以及算法等3个方面的内容,其中每一方面都包含十分丰富的内容,都可以分别单独成论。显然在一个程序中深入、详细地介绍以上3个方面的知识是不可能的,必须把它们有机地结合起来,综合应用。不同的书对此采取不同的写法,侧重点有所不同,各有道理,也各有优缺点,适合于不同的读者。需要在教学实践中检验,取长补短,不断完善。
作者认为:要进行C++程序设计当然需要了解面向对象程序设计的有关概念,但是本课程毕竟不是一门面向对象程序设计的理论课程,在本书中不是抽象地介绍面向对象程序设计的理论,而是在介绍C++语言的特点和应用过程中自然地引出面向对象程序设计的有关概念,通过C++的编程过程理解面向对象程序设计方法。在介绍程序设计过程中,介绍有关的算法,引导读者思考怎样构造一个算法。编写程序的过程就是设计算法的过程。
要用C++编程序,最基本的要求是正确掌握和运用C++。由于C++语法复杂,内容又多,如果对它缺乏系统的了解,将难以真正应用,编出来的程序将会错误百出,编译出错,事倍功半。本书的做法是全面而系统地介绍C++的主要特点和功能,引导读者由简而繁地学会编写C++程序。有了C++编程的初步基础后,再进一步提高,掌握更多更深入的算法。这样的方法可能符合大多数学习者的情况,降低了学习难度。
程序设计是一门实践性很强的课程,只靠听课和看书是学不好的。衡量学习好坏的标准不是“懂不懂”,而是“会不会干”。因此必须强调多编程,多上机实践。考虑到不同学校、不同专业、不同读者对学习C++有不同的要求。
二需求分析
1 要求
(1)用C语言实现程序设计;
(2)定义各个函数分别完成不同功能,如背景设计,判断等;
(3)画出查询模块的流程图;
(4)系统的各个功能用函数调用的形式实现;
(5)界面友好(良好的人机互交),程序要有注释。
2 任务
(1)定义各类头文件,变量及宏定义;
(2)图形模块,设计出俄罗斯方块背景界面;
(3)设定玩家操作模块和胜负判断模块;
(4)画出部分模块的流程图;
(5)编写代码;
(6)程序分析与调试。
3 运行环境
(1)WINDOWS7/8/2000/XP系统
(2)TurboC2.0编译环境
4 开发工具
C++
三概要设计
3.1 模块组成图
根据分析,俄罗斯方块这个程序一共要实现如下几个功能,开始游戏、游戏的暂停\继续、游戏控制和退出游戏。其中游戏控制最为主要和重要,它控制着整个游戏的画面和有关数据的操作,是游戏的核心部分。暂停和退出功能做成一体,在退出的提示下不做任何操作即可实现暂停的功能。程序结构如图3-1所示。
图3-1 功能模块图
2 查询函数流程图
根据分析后的程序结构图设计出相应的流程图。俄罗斯方块的内容主要包括游戏开始,画背景和边框,显示分数等级和下一个方块的预览图;根据速度没隔一定时间方块自动下落,当有按键操作时,根据相应按键执行动作,每次动作前要判断是否动作可以执行。下落方块满一行时,消去该行,根据消去行数得到相应分数。分数达到一定程度,等级提升,速度加快。如图3-2所示。
图3-2 系统流程图
四详细设计
在程序的开头部分定义要用到的头文件,以及各种常量如设定棋盘大小,设定游戏模式及如何执行。代码如下。
bool rotate(sCord *lpsCord,int rType,int rNumber,bool firstRotate);
void getRandom();//初始化方格形状
void getNext(sCord *targ,const sCord* sur);//取出下一个方块
void draw();//绘出方格
void start();//开始游戏
bool downAble();//能否下落
bool leftAble();//能否左移
bool rightAble();//能否右移
bool disRows(HWND hwnd);//判断能否消行
五改进或增加功能模块说明
5.1游戏界面
游戏界面采用WndClass函数编写,代码如下。
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW|CS_VREDRAW;//|~(WS_MINIMIZEBOX|WS_MAXIMIZEBO X) ;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground= (HBRUSH)GetStockObject (WHITE_BRUSH);// CreateSolidBrush(RGB(195,195,237));
wndclass.lpszMenuName= NULL;
wndclass.lpszClassName= szAppName;
俄罗斯方块的游戏界面包括游戏区域边框、下落方块绘制、右部计分和预览图显示等。
游戏区域边框的绘制比较简单,循环中确定光标的位置输出特定字符,即可完成边框绘制。游戏区方块的绘制,循环从数据数组中依次读出数据,根据读到的数据显示“□”,最后组成方块的形状,完成方块的绘制。计分和预览图部分先画出一个矩形区域,然后控制光标在其中显示分数、等级、预览图和提示信息。
5.2生成方块
本程序中生成的方块有七种形状,在程序运行生成方块时,调k=rand()%KINDS+1;语句,确定当前要显示的是哪一个方块形状。而在实际运行中,第一次需要调用两次生成方块函数getRandom(),将先产生的赋给游戏当前方