Java课程设计报告2010 / 2011 学年第二学期项目名称:俄罗斯方块游戏项目负责人:李俊杰学号:09030317 同组者:田俊学号:09030325 同组者:殷崧健学号:09030335 指导教师:费贤举班级:09软件课程设计时间:2011年6月21日-2011年7月7日课程设计地点:秋白楼B705常州工学院计算机信息工程学院2011年7月7日目录1.系统概述 (3)2.项目计划书以及小组人员分工 (4)3.系统流程图 (5)4.系统操作界面 (8)5.详细设计 (9)6.用户手册与游戏帮助 (18)7.测试计划 (20)8.改进意见 (22)9.课程设计心得体会 (23)10.参考书籍及资料 (24)系统概述1.1 现状分析在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众认可,因此开发此游戏软件可满足人们的一些娱乐需求。
此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。
1.2 项目要求俄罗斯方块是一款适合大众的游戏软件,它适合不同年龄的人玩。
本软件实现的基本功能如下:●游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况和下一个将要出现方块的提示。
●游戏控制:玩家可以通过游戏控制功能来控制游戏开始,暂停,结束游戏,游戏难度的设置以及音效控制。
●玩家游戏信息存储及删除:玩家的得分在前五名时,将会记录在排行榜上,同时可为玩家清空排行榜。
1.3 系统模块结构图依据需求分析结果,俄罗斯方块游戏可以分为三个模块:游戏区、游戏控制区、数据操作区。
系统模块结构如图:项目计划书以及小组人员分工2.1项目开发计划书2.2 小组人员分工表系统流程图3.1 游戏区模块该模块为玩家提供主题游戏功能,能够处理玩家的各种操作,为玩家提供下一个方块的提示、当前等级、当前分数的显示。
该模块应包括三个字功能模块:创建游戏区、处理玩家游戏操作区、游戏显示区。
模块功能树如图:3.2游戏控制区模块该模块为玩家提供游戏控制功能,包括开始游戏、暂停/继续游戏、结束游戏、等级设置。
玩家可自行设定游戏等级,主要提供10种级别,级别越高,游戏速度越快,难度越大。
模块功能树如图:3.3数据操作区模块该模块为玩家提供游戏、玩家信息存储与查询功能。
包括排行榜信息录入、排行榜查询、排行榜清空、游戏帮助,四个模块。
模块功能树如图:3.4系统流程描述此流程图为俄罗斯方块游戏系统流程描述。
系统操作界面4.1游戏打开界面4.2游戏运行界面详细设计类一:控制面板类(1)类定义:class ControlPanel(2)功能描述:界面设计应遵循简介美观方便易用的基本原则。
(3)设计方法:方法①:fanning方法方法定义:public void fanning()功能描述:这个方法就是要保证在放大和缩小程序实现窗口大小的时候,其中的格子也会随之改变,也就是我们经常说的最大化最小化,当窗口发生变化时,方块自动调整大小与之相匹配。
方法②:reset方法方法定义:public void reset()功能描述:这个就是将游戏界面重置,将游戏界面回到初始状态,这个方法主要是通过将窗口中的着色小方块全部消除颜色,然后再重新去给窗口着色,即着上背景色,给玩家看上去也就是被刷新了。
(4)设计描述:①controlPanel面板中包含tipPanel, InfoPanel, buttonPanel子面板,分别为图形界面面板,信息面板,按钮面板②图形显示面板设计为BorderLayout布局样式.其中添加tipPanel面板居中(以显示下一个俄罗斯方块样式)③信息面板设计为4行1列式的GridLayout网格状布局,并且添加当前等级,显示当前等级文本域,当前分数,显示当前分数文本域④按钮面板设计为5行1列式的GridLayout网格状布局,并且添加开始游戏, 暂停/继续,结束,加等级,减等级五个按钮⑤Bar栏中添加五个菜单按钮,分别为游戏菜单,控制菜单,排行榜菜单,音效菜单,关于菜单。
⑥游戏菜单里有新游戏,退出两个选项卡,窗口样式菜单里有windows,motif,ment这3种样式选项卡,信息菜单里面有作者,帮助两个选项卡面板设计效果图如下:类二:画布类(1)类定义:class GameCanvas(2)功能描述:在游戏区显示方块(3)设计方法:方法①:paintComponent方法方法定义public void paintComponent(Graphics g)功能描述;其中box就是表示预显示框,然后检查显示框中每个小格子是否需要着色,如果需要着色,则着上方块得颜色,不需要着色的则着上背景颜色,一共有16个小格子构成了一个预显示块,共需要检测16次,其实当中和实现游戏中的程序有着共同点。
方法②:removeLine方法方法定义:public void removeLine(int row)功能描述:这个就是实现如何将行消除的,其实就是在判断了该行该消除的时候将上面的方块都向下平移一格,这样在实现程序界面也就给玩家是消去一行的视觉效果。
类三:方块类(1)类定义:class RussiaBlock(2)功能描述:七种类型方块的父类,定义了所有类型方块的共同特征和行为。
(3)设计方法:方法①:run方法方法定义:public void run()功能描述:实现方块的运行,下落。
方法②:moveTo方法方法定义:public synchronized boolean moveTo()功能描述:将当前画移动到newRow/ newCol所指定的位置。
方法③:isMoveable方法方法定义:private boolean isMoveable()功能描述:判定当前块是否能被边界、其他方块挡住以及不能移动的情况。
方法④:turnNext方法方法定义:public void turnNext()功能描述:实现方块的旋转。
方法⑤:turnTo方法方法定义:private synchronized boolean turnTo()功能描述:将当前块变成newStyle所指定的块样式。
方法⑥:isTurnable方法方法定义:private boolean isTurnable()功能描述:判定当前块是否能变成newStyle所指定的块样式。
方法⑦:erase方法方法定义:private void erase()功能描述:将当前块从画布的对应位置移除。
方法⑧:display方法方法定义:private void display()功能描述:实现重画画布的时候显示当前块。
类四:主游戏类(1)类定义:RussiaBlocksGame(2)功能描述:游戏主类,负责游戏的全局控制。
(3)设计方法:方法①:datasort方法方法定义:public void datasort()功能描述:实现连接数据库,并对数据库中所有数据进行排序输出。
方法②:reportGameOver方法方法定义:private void reportGameOver()功能描述:实现输出游戏总分,输入用户姓名,录入数据库并显示最新排行。
方法③:datasortdelete方法方法定义:public void datasortdelete()功能描述:实现排行榜清空。
方法④:checkFullLine 方法方法定义:public void checkFullLine()功能描述:这个是表示的清除需要消除的行的算法,只需要对行中的小方块进行判断,判断是否都已经着色,如果都着色了说明改行是要消除的,而且还需要进行加分措施,在进行多行消除的时候,可以给玩家更多的奖励,这也符合俄罗斯方块的游戏股则。
方法⑤:play方法方法:private void play()功能实现:实现游戏开始,同时在游戏的开始时,方块随即从顶端的任何位置落下。
方法⑥:getCurLevelScore方法方法定义:public int getCurLevelScore()功能描述:实现获得每个等级的分数方法⑦:setLevel方法方法定义:public void setLevel(int level)功能描述:进行等级的手动调节方法⑧:isGameOver方法方法定义:private boolean isGameOver()功能描述:该方法是判断游戏是否该结束了,只需要判断窗口中的最顶端那一行中是否有方块,同时也要判断最底端的是否也有,如果都有程序会自动弹出“游戏结束”的对话框,然后进行数据的记录,存入数据库,写入排行榜,可以供玩家进行参考,判断最底端的是因为,在游戏开始的时候直接结束游戏也会弹出对话框,为了避免这个问题,加一个判断对的条件,基本可以实现原来计划的功能。
方法⑨:levelUpdate 方法方法定义:public void levelUpdate()功能描述:这是更新等级的函数,一个是通过分数的判断,在程序中定义了一个本级得分,然后当本级得分达到一个分数的时候,就可以进入下一个等级,同时根据等级的提高,之前定义的下落速度也会提高,同时减去升级需要的分数,也就可以用作下一次升级的判断。
(4)设计描述:①窗体设计窗体大小:(300,400),默认居中显示,代码如下:Dimension scrSize=Toolkit.getDefaultToolkit().getScreenSize();setLocation((scrSize.width-getSize().width)/2,(scrSize.height-get Size().height)/2);添加windows窗口事件:addWindowListener( new WindowAdapter(){public void windowClosing(WindowEvent event){System.exit(0);}} );窗体名称为:俄罗斯方块游戏。
②菜单设计菜单条设计:包括游戏菜单,控制菜单,排行榜菜单,音效菜单,关于菜单。
游戏菜单:包括重新游戏,加等级,减等级,退出四个菜单项。
控制菜单:包括暂停,继续,结束三个菜单项。
排行榜菜单:包括排行榜显示,清除排行榜数据。
音效菜单:包括音效的开与音效的关。
关于菜单:包括制作人,与帮助。
以菜单项为例gameMenu = new JMenu("游戏");newGameItem = new JMenuItem("重新游戏");turnHardItem = new JMenuItem("加等级");turnEasyItem = new JMenuItem("减等级");exitItem = new JMenuItem("退出");gameMenu.add(newGameItem);gameMenu.add(turnHardItem);gameMenu.add(turnEasyItem);gameMenu.add(exitItem);③添加背景音乐方法public void Music (){String music = "background.wav";final AudioClip clip = Applet.newAudioClip(getClass().getResource(music));clip.play();}通过调用Music()来实现背景音乐播放。