俄罗斯方块游戏的设计-java课设-含可运行程序

课程设计说明书 NO.42 俄罗斯方块游戏的设计 1. 课程设计的目的 在工作压力及其巨大的今天,游戏成了众多上班一族和学生朋友学习放松的工具,所以设计了一个俄罗斯方块的游戏程序,游戏功能齐全,随进随出,根据自己的能力设置游戏的难度系数。通过此次课程设计,巩固了所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Eclipse等开发工具的运用,拓宽常用类库的应用。通过该教学环节与手段,把所学课程及相关知识加以融会贯通,理论与实际的结合,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。

2.设计方案论证 2.1设计思路 本课程设计的目标是做一个俄罗斯方块的游戏软件,实现界面初始化,游戏背景颜色和不同方块类型的初始化,程序正常运行,对游戏难度不同程度的设置,游戏的从新开始,正常退出和相应的数据计算功能。类似下落、转向、平移、得分累加和计数等。在设计过程中,充分的利用平时课堂所学知识。在游戏里,设置了7种不同形状的方块分别为条形、T型、田型、正反Z型、正反L型。各种类的实现,分数面板类,用来显示分数和关数。添加三个标签,并设置字体格式,定义控制面板类,新建并添加控制按钮。定义预览面板类,显示下一个。在预览框内实现随机产生不同颜色和种类的小方块。联合类,新建三个面板对象,将以上产生的三个面板添加到总的控制面板上。俄罗斯游戏方块面板类,它起的就是显示屏的作用,各种方块的运行状况,都由其控制。主框架类,将显示类面板和控制类面板按边界布局添加到主类当中。从而实现游戏界面整体的融合和功能的实现。

2.2设计方法 俄罗斯方块的游戏设计,本质上就是用一个线程或者定时器产生重绘事件,用线程和用户输入改变游戏状态。这个游戏也不例外,启动MIDLET后,就立即生成一个重绘线程,该线程每隔100MS绘制一次屏幕。当然,重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择,比如游戏画布上那些已经固定下来的下坠物(下坠物一共有7种,由4种小砖块组成,每种下坠物颜色固定为灰白色,可以上下左右旋转)就不需要重绘。游戏画布是一个COMMANDLISTENER,可以接受用户键盘命令,控制下坠物的左移,右移,下移,旋转动作。整个游戏的流程控制体现在游戏画布对象的PAINT方法里。PAINT根据当前的游戏状态,绘制出当时的游戏画面。对于游戏处于运行状态的画面的绘制,则需要在下坠物的当前位置,绘制下坠物。在绘制下坠物之前,判断下坠物是否还能下坠,如果能下坠的话,就让它下落一格,再进行绘制,如果下坠物已无法下坠,则判断游戏是否处于游戏结束状态,如果是处于游戏结束状态的话,则设置游戏状态为游戏结束状态。如果游戏不是处于游戏结束状态,则把下坠物固定下来,同时检查游戏画布上下坠物当前行下面的所有行,看是否需要进行行删除动作,如果需要行删除,则清除游戏地图上被删行的数据,再把被删行绘制成背景色。然后初始化一个新的下坠物,绘制这个新的下坠物。

根据需求分析要实现的系统功能,可以得出系统的模块图 俄罗斯方块游戏 画布游戏界面 游戏操作处理 面板类处理初始化问 题 主框架类构建画布 7种游戏方块类 键盘事件command 控制按钮监听事件 多线程处理方法模块 图1 系统模块图 主程序的流程图为 开始 判定是否满格 绘制方块下落 游戏结束 是否能旋转 调节难度 No Yes 正常下落 旋转方块 消除满格的行 时钟等待时间超100 游戏随机绘制方块 Yes No 固定方块 绘制游戏结束界面 No Yes 图2 主程序流程图 得分模块的流程图为 开始 设计游戏难度 自动生成任意方块 方块落底,变成蓝色 判断是否格满 Showscore加分 显示面板上显示分数 结束 调用退出程序 Yes No 图3 得分模块流程图 2.3 设计中的成员变量和方法 表1 主框架中的成员变量 成员变量描述 变量类型 名称 是否可以控制标志变量 boolean control 游戏是否结束变量 boolean GameOver 是否允许改变变量 boolean turn 时间计时变量 Timer timer 得分变量 int ShowScore 表2 主框架中的主要方法 方法名 功能 paintComponentGraphics 绘制整体游戏所需界面 downblock 判断并执行下落方块 full 判断一行是否为满方法 Creat 创造下一个随机方块的方法 trychange 判断当前方块是否并执行改变 2.4 设计中的主要类 RussiaGame02 主框架类 主框架类,将显示类面板和控制类面板按边界布局添加到RussiaGame02,该类含有main方法,是程序的入口,该方法是吧所有模块联系在一起的关键,设置了此容器为边界布局,将显示面板放在中央,控制面板放在右侧,并为显示面板控制面板添加监听器。

Control控制面板类 是Jpanel类的子类,可以按网格布局添加控制按钮,添加边框。设置六个控制按钮。“开始游戏“、“退出游戏“、“提高速度“、“降低速度“、“提高关数“、“降低关数“。setLayoutnew GridLayout6,1,0,5定义布局GridLayout,使按钮竖向排列。

show定义分数面板类 用来显示分数速、度和关数。添加四个标签,并设置字体格式按网格布局添加四个标签,设置标签格式Show,加边框。四个标签分别“当前得分“、“当前速度“、“当前闯关“、“勇往直前“。

setLayoutnew GridLayout4,1; this.setBorderc; s1.setFontb; s3.setFontb; s2.setFontb; s4.setFontb; Unit联合类 新建三个面板对象,将以上产生的三个面板添加到总的控制面板上。可构造函数,格式为setLayoutnew GridLayout3,1,按网格布局添加三个面板对象到总的控制面板上,add control;add show;add shownext; Main函数的代码如下 public class RussiaGame02 extends JFrame implements ActionListener,ItemListener{ RussiaPanel p; Unit u new Unit; public RussiaGame02 { pnew RussiaPanelu; Container con this.getContentPane; con.setLayoutnew BorderLayout;//设置此容器为边界布局 con.addp,BorderLayout.CENTER;//将显示面板放在中间 con.addu,BorderLayout.EAST;//控制面板放在右侧 this.addKeyListenerp;//为显示面板添加监听器 JOptionPane.showMessageDialogthis, “寒涛工作室欢迎进入俄罗斯方块游戏 “;//显示欢迎对话框 MenuBar myBnew MenuBar;//新建控制菜单 setMenuBarmyB; Menu m1new Menu“游戏“;//新建标题菜单 MenuItem m11new MenuItem“新游戏“,new MenuShortcutKeyEvent.VK_N;//新建菜单选项 m1.addm11; MenuItem m14new MenuItem“退出“,new MenuShortcutKeyEvent.VK_X; m1.addm14; m1.addActionListenerthis;//为菜单添加监听器 myB.addm1; Menu m3new Menu“帮助“; m3.add“关于“; myB.setHelpMenum3; } public static void mainString[] args {//绘制程序界面 RussiaGame02 f new RussiaGame02; f.setSize450, 600; f.show } public void itemStateChangedItemEvent e// { } public void actionPeredActionEvent e//菜单监听器的实现细节 { ife.getActionCommand“退出“//如果按退出键则退出 System.exit0; ife.getActionCommand“新游戏“//按新游戏键,清空显示屏幕并重置 { p.uu.control.b4.setEnabledtrue; p.uu.control.b5.setEnabledtrue; p.reset; p.uu.control.b1.setLabel“点击继续玩“;//将按开始按扭标签置换为重玩一次 ifp.GameOver { p.clean; p.t.suspend; } else{ p.clean; p.t.resume; } } } } 3.设计结果与分析 调试程序,没有错误后开始运行,进入游戏界面模块 图4 进入游戏界面图 选择确定后进入游戏界面,设置了此容器为边界布局,控制面板上设置六个控制按钮。将显示面板放在中央,控制面板放在右侧。“开始游戏“、“退出游戏“、“提高速度“、“降低速度“、“提高关数“、“降低关数“。,分数模块设置字体格式按网格布局添加四个标签,设置标签格式Show,加边框。四个标签分别“当前得分“、“当前速度“、“当前闯关“、“勇往直前“。

图5 游戏界面图 游戏开始前可以选择游戏的速度和关数从而设置游戏的难度,游戏开始的默认难度速度为1级,关数也为1级所得学分为0,设置的关数越高,难度就越大。游戏开始后,就不可以改变难度,只能选择暂停和退出程序。

图6 提高级别后运