📄 论文.txt
字号:
湖南农业大学
vc++课程设计报告
题 目: 俄罗斯方块
院(系): 计算机学院
姓 名: 可可
指导老师: 傅自刚
开始时间: 2006年5月22日
完成时间: 2006年6月2日
目录
【摘要】…………………………………………………………….…..2
【关键词】……………………………………………………………...2
前言……………………………………………………………………...3
第一章 算法思想与实现……………………………………………….3
1.系统实现概述………………………………………………………………...3
2.软件流程图…………………………………………….……………………...4
3.主要算法分析…………………………………………………………………5
第二章课题来源及需求分…………………………………………..…11
1.课题来源……………………………………………………………………...11
2.需求分析……………………………………………………………………...11
2.1程序文件………………………………………………………………….11
2.2运行环境………………………………………………………………….11
2.3数据结构分析…………………………………………………………….12
2.4当前系统存在的问题……………………………………………………12
参考文献………………………………………………………………..13
致谢……………………………………………………………………..13
基于VC的俄罗斯方块游戏设计
【摘 要】俄罗斯方块是个老幼皆宜的小游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机时钟控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,(控制键的实现是由键盘的方向键的消息函数实现)。然后程序根据这七种方块堆叠成各种不同的模型。
【关键词】俄罗斯方块,MFC,算法,数组
According to the VC a game design
[Abstract]: The Russian square piece is a get-away drama with all proper old 幼 , it carry out to be constitute by four pieces of colors of exact square piece, then save in one four chemical elements of the piece set, random creation dissimilarity of calculator seven the square piece of the category type, control it according to the calculator clock in certain time continuously creation, the customer is inside out according to four directions key control of the keyboard, to left, rightwards and get down the operation,.( the realization of the control key is to be carry out by the news function of the direction key of the keyboard)Then the procedure pileds according to these seven kinds of square pieces various different model.
[Keywords]: Russian square piece, MFC, calculate way, several
前言
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在又重新掀起这股让人沉迷的俄罗斯方块风潮,它的规则简单,容易上手,且游戏过程变化无穷,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。 俄罗斯方块是个老幼皆宜的小游戏,在游戏设计界就好比高深武功的入门起手式。无数人进入游戏编程的世界都是从编写俄罗斯方块游戏开始的,因为这既是一个检验RAD开发工具的好方法,也是检验一个人对开发语言、环境和基本数据结构知识熟练程度的便捷途径。这次练习的是在Microsoft Visual C++ 6.0平台上生成俄罗斯方块游戏。当完成时,觉得自己在不知不觉中已跨入了它的大门。使用Microsoft Visual C++ 6.0几乎可以做出一切东西来,从即时战略到三维RPG游戏。当然还有各种应用软件了。如果要开发出更复杂的游戏,就还需要学习更多的东西,为了提高显示速度,需要使用DirectX,为了制作3D图像,又要使用Direct3D。由于游戏的流程和内部原理很复杂,所以需要学习数据结构、图形学、操作系统…… 学习这么多专业知识需要很大的努力,不过我心中有一个梦想,那么再难的目标也能实现。“千里之行,始于足下”,尤其是在迈出了俄罗斯方块的第一步之后,实际上,已经走进了软件开发,尤其是游戏开发的大门,前面的世界是美丽多彩而又充满挑战的。
第一章 算法思想与实现
1. 系统实现概述
这款游戏的主要系统时钟由初始化函数随机产生方块的产生,根据随机产生的数字确定方块的不同排列位置,这里由于每一个方块都是随机产生,因此需要用Point结构体的一维数组来存储产生的方块。而由于要在左上角产生一个提示方块,即下一个即将产生的方块,因此应该再设置一个Point结构体一维数组,用于存储下一个即将产生的方块提示的方块,要在下一个产生前,将提示输出,而提示又在产生下一块之前应该获得,因此在构造函数中首先将产生第一个方块,同样的是随机产生。而游戏的界面则是由一个二维数组back_Square_space[20][10]来存储,说明游戏客户区是20行,10列,颜色由colors[20][10]来存储,每个方块是由四个小正方形的相同色块组成,用一维数组fan_space[4]记录每个小方块的的坐标,然后设置每个方块的长和宽,以及填充的颜色就可以画出这个方块在运行时,循环的扫描back_Square_space[20][10],以确定方块的位置,然后将其填充,这样就产生了游戏中的界面,操作是由键盘输入产生的,键盘主要实现的功能是翻转、向左、向右和向下的操作。而由此产生的判断机制,即判断当按下向左的键时是否向左,是否向左已经到了最左边或者已经不能向左边运动,同样的机制判断向右是否到了最右的边界或者不能向右边运动,向下是否已经到了最底,或者已经不能再向下运动,方块产生后接受键盘的控制,完成四个基本的操作;在没有接受键盘控制时,由于设置了一个时间控件,在间隔时间内对游戏进行控制,所以程序就能运行了。
2.软件流程图
3. 主要算法分析
OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags){ 根据nChar的值进行按键的选择; Case VK_LEFT: if(没有) 判断是否已经到了最左边或者已经不能往左运动, { 清除当前色块; 设置一个正在运行的标志,与没有运动的色块相区别; 列坐标整体减1; }
Case VK_RIGHT: if(没有)判断是否已经到了最右边或者已经不能往右运动, { 清除当前色块; 设置一个正在运行的标志,与没有运动的色块相区别; 列坐标整体加1; }Case VK_UP: { 翻转; 清除当前色块;}Case VK_DOWN:{ 清除当前色块; 判断是否已经到最底层; 判断是否已经到最底层; 产生下一个方块;}绘制当前的游戏内容,即填充数组back_Square_space[20][10]中值为2的位置的颜色;}
add_speed()
{
根据当前的分数适当调整游戏速度
If 分数=1000 && 分数<=3000
等待时间=500毫秒;
else
if分数>3000
等待时间=100毫秒
if (等待时间==500)
在坐标(180,620)位置显示,当前等级:2
if (等待时间==100)
在坐标(180,620)位置显示,当前等级:3
调用SetTimer(IDC_TIMER,seconds,NULL);
}
Cross_border(int w)根据w的值判断是向左还是向右{If(w==2)向右 if 到了最右边或者不能再往右 返回 1;if(w==1)向左 if 到了最左边或者不能再往左 返回 2 既没到最左又没到最右,返回0;} OVER()判断是否已经到最底层;{ For 19 到 0 逐行检测是否有一行back_Square_space[i][*]=2的个数 flagover有10个If flagover==10 { 所消的行数值加 1; 将所消行用下一行的方块填充满;}根据消的行数加分;If cor[0][*]==2 即第一行有只要检测到有方块{ 游戏已经结束; 将cor[20[10]清零,以备后用;}Endfor
显示得分;}Start()产生下一个方块{ 清除上一个方块的提示; 将随机产生的方块作为下一个将要出现的方块; 显示下一个即将要出现的方块; 绘制游戏中的画面;}
Change()翻转{ 首先根据不同的方块,确定它的重心,以决定围绕哪一个点翻转; 检测每一个小方块,确定翻转后的新坐标 if 新产生的方块坐标超过了边界或者它的位置已经填充过 将保持原来的值; 返回值;}
mypaint() 绘制当前的游戏内容,即填充数组back_Square_space[20][10]中值为2的位置的颜色;{ if 标记为正在运动的方 将它填充方块的颜色 填充整个游戏画面; if 是方块所 填充方块}
down()判断是否已经到最底层;{ for 0 TO 19 for 0 TO 9 if(已经填充)判断下一行是否已经填充, 则将当前这个块对应的格子设置填充标记并填充颜色; 并将不在移动的标记置为1; 返回 0; Endif Endfor if 是最底一行 绘制方块; 设置当前底部的行坐标; Endfor 返回值}
sound()
当用户按控制键盘时产生声音
{
HINSTANCE h=AfxGetInstanceHandle();获得包含资源的模块句柄
HRSRC hr=FindResource(h,MAKEINTRESOURCE(IDR_WAVE3),_T("WAVE"));
检索资源块信息:
HGLOBAL hg=LoadResource(h,hr);//找到声音资源,IDR_WAVE1是你要通过资源标签要导入的声音资源.
sndPlaySound(lp,SND_MEMORY|SND_SYNC);播放声音文件
释放资源句柄:
}
以上就是在游戏控制时的键盘消息的处理函数,下面将是方块的产生时的处理函数:CFanView()构造函数{ 设置间隔时间; 初始得分为 0; 产生方块的位置为游戏画面的中间; 随机产生第一个方块;}
OnCreate() { 产生下一个方块,以备提示输出; 开始执行OnTimer()中的处理;}
OnTimer()固定间隔响应的处理函数{ if 判定是否到了最下面一行返回值为 0 表明是不能往下运动了,为1则相反{ 向下运动一行; 重新绘制游戏画面;}else { 判断是否可以消一行; 产生下一个方块; }endif将提示下一块将要输出的方块进行更新;}
OnPaint()与mypaint()函数的功能是一样的,只是刚开始时绘制游戏的初始画面{ 根据back_Square_space[20][10]中的值填充方块;}Clean()清除提示方块,以便下一个提示方块产生,不至于发生色块的覆盖{ 将前一个提示方块的位置以背景色填充;}
small_fan(dc)将下一个要出现的方块提前显示,以提供预测功能{ 在提示区域,以下一个出现的方块位置填充;}
以上提供的是随机方块的产生与处理机制,下面将介绍游戏的菜单设置,这个游戏的菜单有三个文件、速度和帮助菜单,其中文件菜单下包括两个子菜单开始和退出,速度菜单是为了调节游戏的快慢而设置的,帮助菜单列出了版本的信息。其具体的内容如下:OnStart()开始菜单的处理函数{ 将得分清0; 游戏画面,即back_Square_space[20][10]置为0; 将时间控件的时间重置; 产生下一个方块;}
On1(){ 将时间间隔修改为1000毫秒;}
On2(){ 将时间间隔修改为500毫秒;}
On3(){ 将时间间隔修改为100毫秒;}
OnUpdate1(){ 设置菜单的标志;}
工具栏设置:
双击“ResoureView”-“ToolBar”-双击“工具栏上的按钮”-打开“Toolbar button properties ”
将ID选择“ID——START”(对应菜单中开始按钮)
将ID选择“ID_APP_EXIT”(对应菜单中退出按钮)
第2章 课题来源及需求分析
1.课题来源
本来想用VC搞一个MPS但由于VC在数据方面的功能不太完善,加上调试很难成功,听同学们讲VC在开发游戏有其它语言不可比拟的功能,基于对游戏的喜爱,同时也是对自己能力的一种鉴定,最后选择了开发一个小游戏,因为这既是一个检验RAD开发工具的好方法,也是检验一个人对开发语言、环境和基本数据结构知识熟练程度的便捷途径。从我国现在软件市场来讲,我国计算机游戏还未形成完整的体系结构,游戏人才缺少,对于我们来说是个机遇,发展民族软件业,首先应该从基本小游戏做起。
2.需求分析
2.1 程序及文件
主程序名 : FAN.EXE
编程语言 : Visual C++ 语言
2.2 运行环境
软件:WINDOWS9X系统、WINDOWS XP系统。
硬件:
基本内存:32MB
CPU: 主频在333以上
显示器: 支持彩显
鼠标: 需要
键盘: 需要
硬盘: 剩余空间>100MB
2.3 数据结构分析
标识 中文含义 类型 限制条件 说明
Score
分数 int 数字
R 产生方块时的行(纵坐标) int 数字
index;
方块编号 int 数字
H
方格重心 int 数字
back_Square_space[20][10] 客户区坐标 point 数字 数组
fan_space[4]
方格坐标 point 数字 数组
seconds 计时器时间 int 数字
color 方格颜色 COLORREF 数字
2.4当前系统存在的问题
(1)在程序中添加了按键声音效果后,每次按键的反应很慢。
(2)当按向下键时,方块不能一步步地向下移,而不直移到底部。
(3) 游戏的界面不是很丰富。
参 考 文 献
[1]Jeff Prosise. MFC Windows程序设计. 北京:清华大学出版社[M]. 2005
[2]Jeffrey Richter. Windows核心编程. 北京:机械工业出版社[M]. 2005
[3]杨永国. Visual C++ 6.0 实用教程. 北京:清华大学出版社[M]. 2004
[4]孙建开 雷良波. Visual C++ 6.0教程. 广东:珠海出版社[M]. 2004
[5][美]Charles Wright等著,邓劲生、张晓明等译Visual C++程序员实用大全,中国水利水电出版社[M].2005
[6]陆宗骐.C/C++图像处理编程.清华大学出版社[M].2005
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -