已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于设计文档详细说明书 -俄罗斯方块的实现一、实现此游戏的软件,即开发环境:JCreator;二、目 的:为游戏爱好者设计的一套娱乐软件。三、开发人员: 四、具体模块划分如下(功能简要说明):1、 ErsBlocksGame.java: 游戏主类,继承自JFrame类,负责游戏的全局控制。 内含: 1、一个GameCanvas画布类的实例引用, 2、一个保存当前活动块(ErsBlock)实例的引用, 3、一个保存当前控制面板(ControlPanel)实例的引用 ErsBox.java: 方格类,是组成块的基本元素,用自己的颜色来表示块的外观。 2、 ControlPanel.java: 控制面板类,继承自JPanel.上边安放预显窗口、等级、得分、控制按钮主要用来控制游戏进程。 3、 ErsBlock.java: 块类,继承自线程类(Thread),由 4 * 4 个方格(ErsBox)构成一个块控制块的移动、下落、变形等 4、 GameCanvas.java: 画布类,内有 * 个方格类实例。继承自JPanel类。ErsBlock线程类动态改变画布类的方格颜色,画布类通过检查方格颜色来体现ErsBlock块的移动情况。 五、具体模块功能的实现:(1)、 ErsBlockGame类说明(游戏主类,继承自JFrame类,负责游戏的全局控制): import java.awt.*; import javax.swing.*; import java.awt.event.*; ErsBlockGame中用到的方法具体说明如下: 1、main() -程序入口函数; 2、ErsBlockGame() -构造函数,初始化窗体界面; a、setSize() -窗口大小 b、setLocation()-利用屏幕和主窗体的大小差值,使窗口居中; c、createMenu()-建立并设置窗口菜单; 依次添加: 菜单栏-bar 菜单项-mGame,mControl,mWindowStyle 子菜单- mGame-miNewGame,miSetBlockColor,miSetBackColor,miTurnHarder,miTurnEasier,miExit; mControl-miPlay,miPause,miResume,miStop; mWindowStyle-miAsWindows,miAsMotif,miAsMetal 依次添加各子菜单的事件监听器: miNewGame-新游戏 a、stopGame()-先停止原来的游戏(判断ErsBlock类对象Block是否为空,如不为空,即调用它的pauseMove()方法,即stoping为ture); b、reset() -重新还原状态(分别调用ctrlPanel.reset()控制面板复位和canvas.reset()画布复位); c、setLevel() -设置级别为初始值为5 miSetBlockColor-设置活动的方块的色(JColorChooser.showDialog选择颜色对话框) miSetBackColor-设置画布的背景色(同上) miTurnHarder-设置高一级的级别(getLevel()与MAX_LEVEL的比较,再调用setLevel() miTurnEasier-设低一级的级别(getLevel()与Min_LEVEL的比较,再调用setLevel() miExit -退出 miPlay-开始游戏(调用playGame()=this.play()=this.reset()=新建线程并启动start()=调用Game(此类实现Runnable接口)的run()方法=判断block是否为空,判断checkFullLine()是否有满行,判断游戏是否结束;随机产生画布类的方块类型和控制面板类的方块类型) miPause-停止游戏(调用pauseGame() miResume-唤醒游戏(调用resumeGame()=判断ErsBlock类对象Block是否为空,如不为空,即调用它的resumeMove()方法,即stoping为false) miStop-停止游戏(调用stopGame()=判断ErsBlock类对象Block是否为空,如不为空,即调用它的stopMove()方法,即moving为false) miAsWindows-设置为windows界面(调用this.setWindowStyle(),再调用canvas,ctrlPanel的fanning() miAsMotif -设置为motif界面(同上) miAsMetal -设置为metal界面(同上) mguanyu -关于对话框; d、canvas -创建画布类对象(调用canvas的构造函数); e、ctrlPanel -创建控制面板类对象(调用ctrlPanel的构造函数); f、addWindowListener-添加窗口适配器(调用stopGame(); g、addComponentListener-添加组件适配器(调用canvas.fanning(); h、show() -显示窗体; i、canvas.fanning() -根据窗口的大小,自动调整方格的尺寸; j、以下为外部类调用的方法: isPlaying()-判断游戏是否还在进行; getCurBlock()-得到当前活动的块; getCanvas()-得到当前画布; getScore()-得到游戏积分; getScoreForLevelUpdate()-得到自上次升级以来的游戏积分,升级以后,此积分清零; levelUpdate()-当分数累计到一定的数量时,升一次级; reportGameOver()-报告游戏结束了; 2、内部类:Game Methord: checkFullLine()-检查是否有全填满的行; run() -游戏启动之处; isGameOver() -判断游戏是否已经结束; a、reportGameOver()-报告游戏结束了; 3、内部类:AboutDialog-显示关于对话框; (2)、ErsBox类的说明:(方格类,是组成块的基本元素,用自己的颜色来表示块的外观) ErsBox中用到的方法具体说明如下: 1、ErsBox()-方格类的构造函数,接受一个布尔值,判断是否用前景色来添丛方块 2、clone() -Cloneable接口的抽象方法在此实现 3、setSize()-设置方格的尺寸 4、getSize()-得到此方格的尺寸 5、isColorBox()-判断是否用前景色来表现此方块 6、setColor-设置方格的颜色(3)、ControlPanel类: import javaz.swing.*;import javax.swing.border.Border;import javax.swing.border.EtchedBorder;import java.awt.*;import java.awt.event.*;包含的参数:private JTextField tfLevel = new JTextField( + ErsBlocksGame.DEFAULT_LEVEL),tfScore = new JTextField(0);定义两个文本域分别用来显示游戏级别和得分。private JButton btPlay = new JButton(Play), btPause = new JButton(Pause),btStop = new JButton(Stop), btTurnLevelUp = new JButton(Turn hard),btTurnLevelDown = new JButton(Turn easy);定义五个按钮private JPanel plTip = new JPanel(new BorderLayout();定义预制窗口面版()private TipPanel plTipBlock = new TipPanel(); 定义预制窗口类的一个实例private JPanel plInfo = new JPanel(new GridLayout(4, 1);定义游戏级别和得分的面版(4行1列)private JPanel plButton = new JPanel(new GridLayout(5, 1);定义按钮面版(5行1列)private Timer timer;定义Timer类的一个对象。private ErsBlocksGame game;定义ErsBlocksGame类的一个实例。private Border border = new EtchedBorder(EtchedBorder.RAISED, Color.white, new Color(148, 145, 140);定义面版的边框。包含的方法:A、ControlPanel:类的构造函数继承面版类(布局方式为网格布局3行1列)用来摆放:按钮(btPlay、btPause、btStop、btTurnLevelUp、btTurnLevelDown)、文本域(tfLevel、 tfScore)、预显框(border)及按钮的监听事件。按钮的监听事件包括: addKeyListener(new ControlKeyListener():调用内部类ontrolKeyListener btPlay.addActionListener:btPlay按钮的监听事件,调用ErsBlocksGame类的playGame方法。开始一个游戏。 btPause.addActionListener:btPause按钮的监听事件,调用ErsBlocksGame类的pauseGame方法。通过判断按钮的文字实现游戏暂停和游戏继续。 btStop.addActionListener:btStop按钮的监听事件,调用ErsBlocksGame类的stopGame方法 btTurnLevelUp.addActionListener:提高级别按钮的监听事件,通过tfLevel文本域显示的级别与ErsBlocksGame类的变量MAX_LEVEL比较,小于则加1 btTurnLevelDown.addActionListener:降低级别按钮的监听事件,通过tfLevel文本域显示的级别判断level是否大于1,大于1则减1。 addComponentListener(new ComponentAdapter():组建监听事件。当预显窗口改变大小时调用TipPanel类的fanning()方法。 初始化timer:B、setTipStyle(int style):设置预显窗口中方块的样式,对应ErsBlock类的STYLES中的28个值。调用TipPanel类的setStyle(style)方法。将style参数传递给setStyle.C、unsetTipStyle():清空预制面版。调用TipPanel类的unsetStyle()方法。D、getLevel():取得用户设置的游戏等级(level)。返回level得值。(被主函数调用)E、setLevel(int level):让用户修改游戏难度等级。(被主函数调用)F、setPalyNuttonEnable(boolean enable):设置开始按钮的状态。Ture为可用 ,False为不可用。G、setPauseButtonLable(boolean pause):设置暂停按钮的状态。(被主函数调用)H、setBtTurnLevelUpEnable(boolean enable):设置“选择级别”按钮的状态。Ture为可用 ,False为不可用。(被主函数调用)I、setBtTurnLevelDownEnable(boolean enable):设置“选择级别”按钮的状态。Ture为可用 ,False为不可用。(被主函数调用)J、reset():重置控制面版,将游戏积分清零,预显窗口清空。K、fanning():重新计算TipPanel里的boxes里的小框的大小,调用TipPanel类的fanning()方法。当游戏的窗体改变大小及风格时调用次方法。TipPanel为内部类,继承面版类。包含的参数:private Color backColor = Color.darkGray, frontColor = Color.lightGray;定义两种颜色,backColor为背景色(暗黑色),frontColor为前景色(亮色)。private ErsBox boxes =new ErsBoxErsBlock.BOXES_ROWSErsBlock.BOXES_COLS;定义一个ErsBox类的对象数组boxes,初始化为4行4列private int style, boxWidth, boxHeight;定义三个整型变量(style:表示方块的类型;boxWidth:表示小方格的宽度;boxHeight:表示小方格的高度)private boolean isTiled = false;包含的方法:A、TipPanel():预显窗口类构造函数.初始化预显窗口,设置预显窗口的行数和列数。B、TipPanel(Color backColor,Color frontColor):预显窗口类构造函数,backColor为窗口的被景色,frontColor为窗口的前景色(方块的颜色)。C、setStyle(int style):设置预显窗口的方块式样。接收ControlPanel类的setTipStyle(style)方法传递过来的style的值。D、paintComponent(Graphics g):覆盖JComponent类的函数,画组建。E、fanning():根据窗口的大小,自动调整方格的尺寸。boxWidth值为预显窗口的大小除以列数,boxHeight值为预显窗口的大小除以行数。内部类:ControlKeyListener继承KeyAdapter实现方块的移动及变形。首先判断ErsBlocksGame类的isPlaying ()方法的值Ture继续执行,False返回。当isPlaying()的值为True时用switch.case方法检查玩家按下的是哪个键:VK_DOWN:下键为向下移动,调用ErsBlock类的moveDown方法。VK_LEFT:左键为向左移动,调用ErsBlock类的moveLeft方法。VK_RIGHT:右键为向右移动,调用ErsBlock类的moveRight方法。VK_UP:上键为方块变形,调用ErsBlock类的turnNext方法。(4)、ErsBlock-块类final static int BOXES_ROWS = 4/设置静态变量BOXES_ROWS=4-方格所占行数final static int BOXES_COLS = 4/设置静态变量BOXES_ROWS=4-方格所占列数final static int LEVEL_FLATNESS_GENE = 3/设置各级之间速度的差额final static int BETWEEN_LEVELS_DEGRESS_TIME = 50/相近的两级之间,块每下落一行的时间差别为多少(毫秒)final static int BLOCK_KIND_NUMBER = 7/方块的样式数目为7final static int BLOCK_STATUS_NUMBER = 4/每一个样式的方块的反转状态种类为4final static int STYLES = / 共28种状态0x0f00, 0x4444, 0x0f00, 0x4444, / 长条型的四种状态0x04e0, 0x0464, 0x00e4, 0x04c4, / T型的四种状态0x4620, 0x6c00, 0x4620, 0x6c00, / 反Z型的四种状态0x2640, 0xc600, 0x2640, 0xc600, / Z型的四种状态0x6220, 0x1700, 0x2230, 0x0740, / 7型的四种状态0x6440, 0x0e20, 0x44c0, 0x8e00, / 反7型的四种状态0x0660, 0x0660, 0x0660, 0x0660, / 方块的四种状态建立对象GameCanvas canvasErsBox boxes = new ErsBoxBOXES_ROWSBOXES_COLS;设置参数 style x ylevel构造函数,产生一个特定的块 style 块的样式,对应STYLES的28个值中的一个 y 起始位置,左上角在canvas中的坐标行 x 起始位置,左上角在canvas中的坐标列 level 游戏等级,控制块的下落速度 canvas 画板构造函数ErsBlock()/用于改变位置时设定方格变换方块颜色的位置线程类的run()函数覆盖,下落块,直到块不能再下落moveLeft()/块向左移动一格moveRight()/块向右移动一格moveDown()/块向下落一格turnNext()/改变方格形状pauseMove()/暂停块的下落,对应游戏暂停resumeMove()/继续块的下落,对应游戏继earse()/将当前块从画布的对应位置移除,要等到下次重画画布时才能反映出来display()/让当前块放置在画布的对应位置上,要等到下次重画画布时才能看见isMoveAble/当前块能否移动到newRow/newCol所指定的位置 newRow int, 目的地所在行 newCol int, 目的地所在列 boolean, true-能移动,false-不能isTurnAble(int newStyle)/前块能否变成newStyle所指定的块样式,主要是要考虑 边界以及被其它块挡住、不能移动的情况 newStyle int,希望改变的块样式,对应STYLES的28个值中的一个 boolean,true-能改变,false-不能改变 turnTo(int newStyle)/将当前块变成newStyle所指定的块样式 newStyle int,将要改变成的块样式,对应STYLES的28个值中的一个 boolean,true-改变成功,false-改变失败(5)、类:GameCanvas;包:swing,awt,swing.border.EtchedBorder;构造函数: GameCanvas(int rows, int cols) GameCanvas(int rows, int cols,backcolor,frontcolor) 定义一个整型的行和整型的列作为数组ErsBox的参数,用于得到整个画布。 里面的setBorder(new EtchedBorder( EtchedBorder.RAISED, Color.white, new Color(148, 145, 140)用于设置画布的边框 设置画布的前景色和背景色成员函数: fanning() - 根据窗口大小自动调整方格尺寸,将值赋给boxHeight,boxWidth 在主函数里调用 getBackgroundColor() - 得到背景颜色,返回backColor getBlockColor() - 设置方块颜色,返回frontColor getBox(int row, int col) - 得到某一行某一列的方格引用 getCols() - 得到方格列数 getRows() - 得到方格行数 getScore() - 得到成绩 getScoreForLevelUpdate() - 得到上一次升级后的积分 在主函数 public int getScoreForLevelUpdate() if (canvas != null) return canvas.getScoreForLevelUpdate();return 0; 调用 paintCompontent(Graphics g) - 覆盖JComponent类的函数,画组件。 removeLine(int row) - 清除填满的行,由主函数调用 reset() - 重置画布:积分清零,升级后的积分清零将方块的颜色设为假 在主函数里调用 resetScoreForLevelUpdate( ) - 升级后将上一次升级以来的积分清零 scoreForLevelUpdate -= ErsBlocksGame.PER_LEVEL_SCORE;这句话 利用主函数里的public final static int PER_LEVEL_SCORE = PER_LINE_SCORE * 20; 给scoreForLevelUpdate重新赋值 setBackgroundColor(Color backColor) - 设置背景颜色变量: backColor - 设置背景色,返回给getBackgroundColor() boxHeight - 方块的高度 boxWidth - 方块的宽度 boxes - 数组变量得到画布的行和列 cols - 画布的列 frontColor - 设置前景色 rows - 画布的行 score - 成绩积分 scoreForLevelUpdate - 每次升级后的积分类流程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生成式AI在智能教育变革中的学科适配性影响与对策研究教学研究课题报告
- 初中戏剧教育在物理探究教学中的实践与反思教学研究课题报告
- 高中生通过荧光光谱法检测亚洲与南美咖啡豆叶绿素衍生物含量差异课题报告教学研究课题报告
- 2025年篮球竞赛班测试题及答案
- 2025年粤电电厂笔试题库及答案
- 焊工高级技师测试题及答案
- 妇幼村医生培训课件
- 2026年船厂入职考试题库及答案
- 高级技工礼仪考试题库及答案
- 土石方填筑工艺优化方案
- 加速康复外科中国专家共识及治疗路径管理指南(2023版)
- QGDW11970.1-2023输变电工程水土保持技术规程第1部分水土保持方案
- 购物中心招商策略与运营管理
- 药品共线生产质量风险管理指南(官方2023版)
- 2025中级客房服务员资格考试题库及答案(浓缩300题)
- 2025年教科新版九年级历史上册阶段测试试卷含答案
- 中高净值人群财富管理法律服务白皮书
- 血透尿毒症脑病
- 巴彦淖尔市老年康复护理院朗润园网点建设项目环境影响报告表(2021年新版环评)
- 黑龙江省哈尔滨八中2025届高二上数学期末学业水平测试模拟试题含解析
- 小学三年级上册数学期末测试卷(综合卷)
评论
0/150
提交评论