数据结构课程设计俄罗斯方块(样本)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《软件基础》大作业
项目名称:“俄罗斯方块”游戏班级:测控21
小组成员:周海明(02013030)
杨勇(02013028)
杨光(02013026)完成时间:2004.12.10
指导教师:***
目录
一.项目介绍
1.1 项目简介
1.2 游戏介绍
1.2.1详细规则、胜负判定方法
1.2.2游戏操作方法
1.3 开发工具
1.4 软件运行环境
1.5 项目任务书
二.项目设计
2.1 总体方案
2.2 详细设计
2.2.1方块模块设计
2.2.2线程模块设计
2.2.3主界面模块设计
2.3 模块设计小结
三.工程进度
四.项目测试分析
五.制作安装软件
六.项目总结与体会
七.参考书目
一.项目介绍
1.1项目简介
本项目是为了制作一个“俄罗斯方块”游戏。
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。
制作此软件是为了使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。
1.2游戏介绍
1.2.1详细规则、胜负判定方法
用户分别移动和旋转自己窗口内落下的方块,方块在一行堆满后就可以消掉,当方块先堆积至窗口顶端,即告负。
1.2.2游戏操作方法
1. 按游戏界面的"开始"菜单来开始游戏
2. 键盘操作:"←"左移一格;"→"右移一格;
"↑"旋转方块;"↓"方块丢下(方块下落加速)
3. "计分牌"显示的内容:"得分"为本局的分数,计分标准为下落一
个块10分,一次消1行10分、2行30分、3行60分、4行100分。
该游戏共有4个等级,一级、二级、三级、四级最高分分别为800,1500,2500,4000。"级数"为游戏当前等级,当分数达到当前等级的最高值,等级就会提升、速度加快。
1.3 开发工具
JDK1.4.2+JCreator
1.4 软件运行环境
此软件由Java开发完成,可以在任何装有JRE(Java运行环境)的机器上运行。
1.5 项目任务书
开发小组成员及任务分工:
周海明(组长):协调各成员之间的任务,完成所有程序的编写及调试
工作;
杨勇:方块模块设计,主界面模块设计及其程序算法设计;
杨光:线程模块设计及撰写项目文档;
二.项目设计
2.1 总体方案
首先,要想该游戏易于操作,则需要一个良好的界面,能够接受鼠标和键盘操作等;其次,由于游戏涉及到许多不同种类的方块,所以要构造这些方块;再者,在游戏过程中,必须要处理好方块的一些事件,例如自动下落,消除满行等。由java的面向对象和多线程机制,很容易实现这些。
由上分析可知,该游戏程序大体框架主要分为三大模块:1.通过继承Frame类派生出MainFrame类来实现自己的主界面。
2.创建方块Block类来构造各种各样的方块。
3.通过实现Runnable接口来创建一个新的线程,用来处理方块事件和得分级数等。
2.2详细设计
2.2.1 方块模块设计
此模块主要完成实现各种方块。本游戏总共有7种方块,而每种方块还可以进行旋转。每种方块每行每列最多只有4个小方块。
这7种方块如下图1所示。
(1)(2)(3)(4)(5)(6)(7)
图1.
算法设计:用二维数组来表示每种类型的方块,当数组元素为1时,则
显示该方格,当数组元素为0时,则不显示该方格。例如图2(1)的
方块即可用二维数组{{1,1,1,1}}即可表示,其它类型及旋转后的方块表
示可依此类推。
2.2.2 线程模块设计
此模块主要实现对各种方块的自动下落,正确停止以及自动消除满行和得分、级数、下一个方块的正确显示。
问题分析与算法设计:
●方块自动下落可以通过多线程机制来实现,当此线程每次
得到运行时,将下落方块的显示位置下降一个小方格即可。
●方块能够正确停止,即判断方块何时停止。由游戏介绍可
知,当下落方块下方有方块阻挡或到达边界时,该方块停
止下落。此算法如下:
首先可以设置一个30*10的二维数组来实现30*10小方格的显
示情况。每当小方块停止下落时,由表示方块的二维数组来给
由方块覆盖的小方格附值。这样,每当方块每次下落时,要检
查表示方块的二维数组与即将覆盖小方块的区域是否冲突(即
检测对应的数组元素位是否都为1,如果都为1,则冲突),以及
是否到达边界,如果其中之一发生了,则此方块必须停止,否
则继续下落。
●满行的自动消除
当30*10的小方格如果有任一行被填充满时,即将此行删
除。
算法如下:
当方块正确停止后,循环检测表示小方格矩阵的二维数组,
当检测到某一行有任一元素不为1时,则表示未满,否则
表示此行此满,接着要完成二件事情:
a.设第i行已满,从下往上,将k-1行的值附值给第k行(0 b.将第一行的元素值清零。 ●下一个方块的显示 由于方块的出现均是随机性的,要得到每种状态的方块, 首先要得到哪个种类的随机值,还要得到此种类不同形态 的随机值。此算法如下: 由前述可知,每种方块均由二维数组来表示,这样可以构 造七个三维数组,每个三维数组就对应每种方块不同的形 态。再构造一个四维数组,此数组包括此七个三维数组。 因此可通过得到这个四维数组和三维数组的两个随机下标 即可得到下一个随机方块。 ●得分及级数显示 由前述介绍可知,得分要看具体的一次消行数,级数根据 得分的情况显示。 算法设计: 设置一个计数值标志,在前述一次消行判断中,每消一行,该计数值增1。在消行判断完后,检测该标志,根 据不同的值,加上不同的分数。在得分判断完后,再根据 得分多少来显示级数。若得分已经达到当前级数最高分, 则级数加1,得分清0,否则保持当前得分、级数不变。2.2.3主界面设计模块 主界面设计主要包括界面的显示,以及处理键盘事件,菜单事件。下面就分别关于各个部分的设计详细分述。 2.2. 3.1界面内容包括:主窗体,一个控制菜单(包括开始、重来、暂停、 退出),得分和级别情况,下一个方块内容,30*10的小方格矩 阵。 在程序运行初始化过程中,通过添加所需菜单条(MenuBar)及菜单(Menu),标签(Label),画一个30*10的小矩阵方格。 最终程序运行后的主界面如下图2所示: