课程设计说明书NO.1沈阳大学俄罗斯方块游戏的设计1.课程设计的目的在工作压力及其巨大的今天,游戏成了众多上班一族和学生朋友学习放松的工具,所以设计了一个俄罗斯方块的游戏程序,游戏功能齐全,随进随出,根据自己的能力设置游戏的难度系数。通过此次课程设计,巩固了所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Eclipse等开发工具的运用,拓宽常用类库的应用。通过该教学环节与手段,把所学课程及相关知识加以融会贯通,理论与实际的结合,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。2.设计方案论证2.1设计思路本课程设计的目标是做一个俄罗斯方块的游戏软件,实现界面初始化,游戏背景颜色和不同方块类型的初始化,程序正常运行,对游戏难度不同程度的设置,游戏的从新开始,正常退出和相应的数据计算功能。类似下落、转向、平移、得分累加和计数等。在设计过程中,充分的利用平时课堂所学知识。在游戏里,设置了7种不同形状的方块分别为条形、T型、田型、正反Z型、正反L型。各种类的实现,分数面板类,用来显示分数和关数。添加三个标签,并设置字体格式,定义控制面板类,新建并添加控制按钮。定义预览面板类,显示下一个。在预览框内实现随机产生不同颜色和种类的小方块。联合类,新建三个面板对象,将以上产生的三个面板添加到总的控制面板上。俄罗斯游戏方块面板类,它起的就是显示屏的作用,各种方块的运行状况,都由其控制。主框架类,将显示类面板和控制类面板按边界布局添加到主类当中。从而实现游戏界面整体的融合和功能的实现。2.2设计方法俄罗斯方块的游戏设计,本质上就是用一个线程或者定时器产生重绘事件,用线程和用户输入改变游戏状态。这个游戏也不例外,启动MIDLET后,就立即生成一个重绘线程,该线程每隔100MS绘制一次屏幕。当然,重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择,比如游戏画布上那些已经固定下来的下坠物(下坠物一共有7种,由4种小砖块组成,每种下坠物颜色固定为灰白色,可以上下左右旋转)就不需要重绘。游戏画布是一个COMMANDLISTENER,可以接受用户键盘命令,控制下课程设计说明书NO.2沈阳大学坠物的左移,右移,下移,旋转动作。整个游戏的流程控制体现在游戏画布对象的PAINT()方法里。PAINT()根据当前的游戏状态,绘制出当时的游戏画面。对于游戏处于运行状态的画面的绘制,则需要在下坠物的当前位置,绘制下坠物。在绘制下坠物之前,判断下坠物是否还能下坠,如果能下坠的话,就让它下落一格,再进行绘制,如果下坠物已无法下坠,则判断游戏是否处于游戏结束状态,如果是处于游戏结束状态的话,则设置游戏状态为游戏结束状态。如果游戏不是处于游戏结束状态,则把下坠物固定下来,同时检查游戏画布上下坠物当前行下面的所有行,看是否需要进行行删除动作,如果需要行删除,则清除游戏地图上被删行的数据,再把被删行绘制成背景色。然后初始化一个新的下坠物,绘制这个新的下坠物。根据需求分析要实现的系统功能,可以得出系统的模块图:图1系统模块图主程序的流程图为俄罗斯方块游戏画布游戏界面游戏操作处理面板类处理初始化问题主框架类构建画布7种游戏方块类键盘事件command控制按钮监听事件多线程处理方法模块课程设计说明书NO.3沈阳大学图2主程序流程图得分模块的流程图为开始判定是否满格绘制方块下落游戏结束是否能旋转调节难度NoYes正常下落旋转方块消除满格的行时钟等待时间超100游戏随机绘制方块YesNo固定方块绘制游戏结束界面NoYes课程设计说明书NO.4沈阳大学图3得分模块流程图2.3设计中的成员变量和方法表1主框架中的成员变量成员变量描述变量类型名称是否可以控制标志变量booleancontrol游戏是否结束变量booleanGameOver是否允许改变变量booleanturn时间计时变量Timertimer得分变量intShowScore开始设计游戏难度自动生成任意方块方块落底,变成蓝色判断是否格满Showscore加分显示面板上显示分数结束调用退出程序YesNo课程设计说明书NO.5沈阳大学表2主框架中的主要方法方法名功能paintComponent(Graphics)绘制整体游戏所需界面down(block)判断并执行下落方块full()判断一行是否为满方法Creat()创造下一个随机方块的方法trychange()判断当前方块是否并执行改变2.4设计中的主要类RussiaGame02主框架类主框架类,将显示类面板和控制类面板按边界布局添加到RussiaGame02,该类含有main方法,是程序的入口,该方法是吧所有模块联系在一起的关键,设置了此容器为边界布局,将显示面板放在中央,控制面板放在右侧,并为显示面板控制面板添加监听器。Control控制面板类是Jpanel类的子类,可以按网格布局添加控制按钮,添加边框。设置六个控制按钮。开始游戏、退出游戏、提高速度、降低速度、提高关数、降低关数。setLayout(newGridLayout(6,1,0,5))定义布局GridLayout,使按钮竖向排列。show定义分数面板类用来显示分数速、度和关数。添加四个标签,并设置字体格式按网格布局添加四个标签,设置标签格式Show(),加边框。四个标签分别当前得分、当前速度、当前闯关、勇往直前。setLayout(newGridLayout(4,1));this.setBorder(c);s1.setFont(b);s3.setFont(b);s2.setFont(b);s4.setFont(b);Unit联合类新建三个面板对象,将以上产生的三个面板添加到总的控制面板上。可构造函数,格式为setLayout(newGridLayout(3,1)),按网格布局添加三个面板对象到总的控制面板上,add(control);add(show);add(shownext);Main函数的代码如下课程设计说明书NO.6沈阳大学publicclassRussiaGame02extendsJFrameimplementsActionListener,ItemListener{RussiaPanelp;Unitu=newUnit();publicRussiaGame02(){p=newRussiaPanel(u);Containercon=this.getContentPane();con.setLayout(newBorderLayout());//设置此容器为边界布局con.add(p,BorderLayout.CENTER);//将显示面板放在中间con.add(u,BorderLayout.EAST);//控制面板放在右侧this.addKeyListener(p);//为显示面板添加监听器JOptionPane.showMessageDialog(this,寒涛工作室欢迎进入俄罗斯方块游戏!);//显示欢迎对话框MenuBarmyB=newMenuBar();//新建控制菜单setMenuBar(myB);Menum1=newMenu(游戏);//新建标题菜单MenuItemm11=newMenuItem(新游戏,newMenuShortcut(KeyEvent.VK_N));//新建菜单选项m1.add(m11);MenuItemm14=newMenuItem(退出,newMenuShortcut(KeyEvent.VK_X));m1.add(m14);m1.addActionListener(this);//为菜单添加监听器myB.add(m1);Menum3=newMenu(帮助);m3.add(关于);myB.setHelpMenu(m3);}publicstaticvoidmain(String[]args){//绘制程序界面RussiaGame02f=newRussiaGame02();f.setSize(450,600);f.show()}publicvoiditemStateChanged(ItemEvente)//{}publicvoidactionPerformed(ActionEvente)//菜单监听器的实现细节{if(e.getActionCommand()==退出)//如果按退出键则退出System.exit(0);课程设计说明书NO.7沈阳大学if(e.getActionCommand()==新游戏)//按新游戏键,清空显示屏幕并重置{p.uu.control.b4.setEnabled(true);p.uu.control.b5.setEnabled(true);p.reset();p.uu.control.b1.setLabel(点击继续玩);//将按开始按扭标签置换为重玩一次if(!p.GameOver()){p.clean();p.t.suspend();}else{p.clean();p.t.resume();}}}}3.设计结果与分析调试程序,没有错误后开始运行,进入游戏界面模块图4进入游戏界面图选择确定后进入游戏界面,设置了此容器为边界布局,控制面板上设置六个控制按钮。将显示面板放在中央,控制面板放在右侧。开始游戏、退出游戏、提高速度、降低速度、提高关数、降低关数。,分数模块设置字体格式按网格布局添加四个标签,设置标签格式Show(),加边框。四个标签分别当前得分、当前速度、当前闯关、勇往直前。课程设计说明书NO.8沈阳大学图5游戏界面图游戏开始前可以选择游戏的速度和关数从而设置游戏的难度,游戏开始的默认难度速度为1级,关数也为1级所得学分为0,设置的关数越高,难度就越大。游戏开始后,就不可以改变难度,只能选择暂停和退出程序。课程设计说明书NO.9沈阳大学图6提高级别后运行界面图玩家开始玩游戏后,如果在方块没有到达顶端的前提下可以消除一行,当前得分自动增加100分,当方块到达顶端时而无法消除,生成的方块不能再下了,则游戏结束,出现游戏结束的界面模块,出现你也太差劲了几个字样。课程设计说明书NO.10沈阳大学图7游戏结束界面图游戏结束后显示本次游戏的得分数,点击确定后就可以继续选择进行游戏。图8本次游戏得分界面图课程设计说明书NO.11沈阳大学当游戏结束或者中途想重新玩游戏的时候,就可一选择新游戏选项或者点击ctrl+n进行新游戏。点击退出或者快捷键ctrl+x就退出游戏界面。图9进入新游戏界面图一轮游戏是一个大循环,在这个循环中,每隔100毫秒,检查游戏中的当前块是否已经到底了,如果没有,就继续等待。如果到底了,就看有没有全填满的行,如果有就删除它,并为游戏者加分,同时随机产生一新的当前块,让它自动下落。当新产生一个块时,先检查画布最顶上的一行是否已经被占了,如果是,可以判断GameOver了。虽然成功的完成游戏设计,但也发现了自己很多的不足,很多预想功能还不能在游戏运行中实现,无声音效果,略显调,界单面不够漂亮,还有很多小瑕疵有待完善。4.设计总结通过此次课程设计,将我所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很多问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。从实践上认识了Java是如何编写命令的,如何协调计算机内部各个部件运行,对计算机编译原理的认识更加深刻。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意构造,将不必要的命令去除。深入的了解了JAVA语言的严谨性,了解了JAVA语言中众多方法,类的使用,为以后学习打下良好的基础。JAVA是一种面向对象的程序语言。熟悉数据库的基本知识及一种以上数据库系统开发软件。最后衷心感谢在课程设计过程中给予过我帮助的老师和同学们,没有他们的帮助课程设计就不能圆满完成。5.参考文献[1]陈国君,陈磊,刘洋.Java2程序设计基础[M].北京:清华大学出版社;2008.6[2]耿祥义,张跃平.Java课程设计[M].北京:清华大学出版社;2008.11[3]张思民,梁维娜.Java程序设计实践教程