1面向对象程序设计课程设计报告2007/2008学年第二学期项目名称:俄罗斯方块游戏项目负责人:汤庆如_学号:06030219同组者:李帅学号:06030211指导教师:费贤举班级:06计二课程设计时间及地点:2008年6月20日秋白楼B705常州工学院计算机信息工程学院2008年7月2日2目录1.系统概述………………………………………………32.项目开发计划书以及小组人员分工表………………43.设计说明书……………………………………………54.系统操作界面…………………………………………75.源程序编码……………………………………………286.测试计划………………………………………………297.改进意见………………………………………………318.课程设计心得体会………………………………329.参考书籍、资料………………………………………343系统概述1.1现状分析在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认可,因此开发此游戏软件可满足人们的一些娱乐的需求。此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。1.2项目要求俄罗斯方块游戏是一款适合大众的游戏软件,它适合不同年龄的人玩。本软件要实现的功能如下:(1)游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。(2)游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。(3)级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏的速度越快,难度越大。(4)1.3系统功能模块示意图4项目开发计划书以及小组人员分工表1.1项目开发计划书名称时间工作内容下达设计任务1天(集中)说明如何着手设计的方法和设计任务的解释说明。收集、分析资料及文档2天项目组在项目经理的组织下选题、分析,识别实体,完成《项目开发计划书》及小组人员分工。设计2天各项目组完成系统层次图、用户界面设计、数据库表设计、报表设计,完成《设计说明书》程序编写和测试7天根据方案进行现场编程、调试。编写设计文档2天完成软件测试以及《用户操作手册》的编写。文档提交、答辩1天各小组提交文档,教师根据情况选择是否答辩及答辩方式(抽样答辩或全员答辩)。1.2小组人员分工表姓名班级学号任务分配组长汤庆如06030219游戏界面设计,游戏控制按钮功能实现,文档组员李帅06030211游戏区操作的实现,显示操作结果游戏区游戏控制显示玩家操作显示操作结果开始暂停/继续提高等级退出降低等级俄罗斯方块游戏5设计说明1.1游戏区模块1.2控制区模块1.3系统流程图游戏区模块创建游戏区处理玩家游戏操作显示游戏结果游戏控制模块开始游戏暂停游戏初始级别设置退出游戏61.4模块简介1.功能模块(1)游戏区模块(创建游戏区,处理玩家操作,显示操作结果)(2)游戏控制模块(开始,暂停继续,提高等级,降低等级,停止,新游戏,帮助)开始设置初始级别创建游戏区游戏开局随机选择方块类型是否到顶部方块下落一行游戏结束是否处理玩家操作是否到顶部7系统操作界面游戏打开界面游戏进行中界面8源程序编码importjavax.swing.*;importjava.awt.*;importjavax.swing.border.Border;importjava.awt.event.*;publicclassErsBlocksGameextendsJFrame{publicfinalstaticintalinescore=100;publicfinalstaticinteverylevelscore=alinescore*20;publicfinalstaticintmaxlevel=10;publicfinalstaticintinitlevel=5;privateGameCanvascanvas;privateErsBlockblock;privatebooleanplaying=false;privateControlPanelctrlPanel;privateJMenuBarbar=newJMenuBar();privateJMenumGame=newJMenu(游戏),mControl=newJMenu(控制),mhelp=newJMenu(帮助);privateJMenuItemmiNewGame=newJMenuItem(新游戏),milevelup=newJMenuItem(提高级数),mileveldown=newJMenuItem(降低级数),miExit=newJMenuItem(退出),miPlay=newJMenuItem(开始),miPause=newJMenuItem(暂停),miResume=newJMenuItem(重新开始),miStop=newJMenuItem(停止),miCtrlBlock=newJMenuItem(方块控制键);publicErsBlocksGame(Stringtitle){super(title);setSize(315,392);DimensionscrSize=Toolkit.getDefaultToolkit().getScreenSize();setLocation((scrSize.width-getSize().width)/2,(scrSize.height-getSize().height)/2);createMenu();Containercontainer=getContentPane();container.setLayout(newBorderLayout(6,0));canvas=newGameCanvas(20,12);9ctrlPanel=newControlPanel(this);container.add(canvas,BorderLayout.CENTER);container.add(ctrlPanel,BorderLayout.EAST);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEventwe){stopGame();System.exit(0);}});addComponentListener(newComponentAdapter(){publicvoidcomponentResized(ComponentEventce){canvas.fanning();}});show();canvas.fanning();}privatevoidcreateMenu(){bar.add(mGame);bar.add(mControl);bar.add(mhelp);mGame.add(miNewGame);mGame.addSeparator();mGame.add(milevelup);mGame.addSeparator();mGame.add(mileveldown);mGame.addSeparator();mGame.add(miExit);mControl.add(miPlay);mControl.addSeparator();mControl.add(miPause);mControl.addSeparator();mControl.add(miResume);mControl.addSeparator();mControl.add(miStop);mhelp.add(miCtrlBlock);setJMenuBar(bar);miNewGame.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){10stopGame();reset();setLevel(initlevel);}});mileveldown.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){intcurLevel=getLevel();if(curLevel1)setLevel(curLevel-1);}});milevelup.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){intcurLevel=getLevel();if(curLevel1)setLevel(curLevel+1);}});miExit.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){System.exit(0);}});miPlay.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){playGame();}});miPause.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){pauseGame();}});miResume.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){resumeGame();11}});miStop.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){stopGame();}});miCtrlBlock.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventae){reportGameMethod();}});}publicvoidreset(){ctrlPanel.reset();canvas.reset();}publicbooleanisPlaying(){returnplaying;}publicErsBlockgetCurBlock(){returnblock;}publicGameCanvasgetCanvas(){returncanvas;}publicvoidplayGame(){play();ctrlPanel.setPlayButtonEnable(false);miPlay.setEnabled(false);ctrlPanel.requestFocus();}publicvoidpauseGame(){12if(block!=null)block.pauseMove();ctrlPanel.setPauseButtonLabel(false);miPause.setEnabled(false);miResume.setEnabled(true);}publicvoidresumeGame(){if(block!=null)block.resumeMove();ctrlPanel.setPauseButtonLabel(true);miPause.setEnabled(true);miResume.setEnabled(false);ctrlPanel.requestFocus();}publicvoidstopGame(){playing=false;if(block!=null)block.stopMove();miPlay.setEnabled(true);miPause.