版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计说明书 NO.1Java俄罗斯方块游戏的设计一. 课程设计的目的 Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库
2、的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。二. 设计方案论证 2.1 设计思路一个网络俄罗斯方块的游戏,玩家可以在网络的任何地方互相对战。运行这个应用程序,需要安装JRE(Java Runtime environment,java运行 环境),资源文件包括: play.bat,可以直接运行这个批处理文件来运行“网络俄罗斯方块”(请注意在同一目录下是否存在matrix.jar文件) matrix.jar 打包的“网络俄罗斯方块”游戏,它把所有网络俄罗斯方块游戏的类和资源都集中到了
3、一起,运行时只要存在它就可以了。我们可以在控制台下通过命令行“java -jar matrix.jar”来运行,也可以直接运行。play.bat 文件进入游戏。 matrix JBuilder的project文件 所有网络俄罗斯方块游戏的源码和资源都在这个目录下面。读者可以用JBuilder来打开matrix.jpx文件。JavaDoc示例 一个关于javadoc命令使用的例子。 a.java 示例代码 doc是由示例程序生成的文档-java programming game series three guiding use a network of 57 games, Players can
4、 network anywhere mutual war. Note : to run this application, need to install the 课程设计说明书 NO.2JRE (Java Runtime environment, java runtime environment) of this chapter as a resource document include : play.bat readers can directly run this batch file to run "Network Russian box"(please note
5、 the the same directory existence matrix.jar) matrix.jar packed "Network Russia Slovakia box "game, it all network game of the Russian box category and resources are concentrated together. running as long as it can. We can console command "java-jar matrix.jar" Run, have direct ac
6、cess to documents play.bat running game. Matrix JBuilder project documents the Russian box all network games and FOSS resources.2.2程序结构、思想和相关技术这个程序共包含了5个.JAVA源文件,有30个类文件,分别来控制游戏的主界面,控制面板,俄罗斯方块的随机产生,对俄罗斯方块的保存,还能选择他的前景色,背景色。ErsBlock类的实现:这个类继承线程类,由 4 * 4 个方格(ErsBox)构成一个块, 控制块的移
7、动、下落、变形等,这是实现下路的方块分别对应对7种模型的28种状态 / 共28种状态。 0x0f00, 0x4444, 0x0f00, 0x4444, / 长条型的四种状态 0x04e0, 0x0464, 0x00e4, 0x04c4, / 'T'型的四种状态 0x6220, 0x1700, 0x2230, 0x0740, / '7'型的四种状态
8、 0x6440, 0x0e20, 0x44c0, 0x8e00, / 反'7'型的四种状态 0x0660, 0x0660, 0x0660, 0x0660, / 方块的四种状态 在这个类中用构造方法来实现某个具体的方块,方法中的参数有style,对应那28中状态中的一个,x,y控制起始位置level是游戏的等级也就是方块下落的速度,
9、canvas就是方快出现的画板。2.3俄罗斯方块类的构造方法public static void main(String argus) ERS_Block ers = new ERS_Block("俄罗斯方块游戏 V1.0 Author:Vincent"); 课程设计说明书 NO.3WindowListener win_listener = new WinListener(); ers.addWindowListener(win_listener); /俄罗斯方块类的构造方法2.3 类、包及其描述java类的动态装载是java语言能力动态性的根源;研究理解它是每一个java
10、设计和代码人员不能忽视的特点,因为很多底层和问题和不理解的技术都来源于它;可以这么说它是热插拨(plug and pay)的根本,是IOC(Sping/PicoContant)的技术最有力的支持,能善用它为设计和实现一个很好的框架必不可少的技术。对于其他技术(C/C+)没有动态特性的语言来说,要运用底层的OS系统所提供的机制,设计人员必須多費一些功夫来编写额外的程序代码(例如Windows 平台上需要使用LoadLibrary()與GetProcAddress()兩個Win32 API 来完成动态的需求),這些额外编写的程序代码也会因为平台的不同而不同,毕竟這些额外的程序代码本身的运作逻辑很少
11、关联,所以维护起来虽不算复杂,但仍有其难度。主要类RuntimeCode描述如主下,P050705052 Class ERS_Blockjava.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame P050705052.ERS_BlockAll Implemented Interfaces: javax.accessibility.Accessible, java.awt.image.ImageObserver, 沈 阳 大 学课程设计说明书 NO.4ava.awt.MenuConta
12、iner, java.io.Serializable public class ERS_Block extends java.awt.FrameSee Also: Serialized Form 图1 fieslds summary 图2 Fields inherited from class java.awt.Frame 沈 阳 大 学课程设计说明书 NO.5 图3 Fields inherited from class java.awt.Component 图4 Fields inherited from imter face java.image.ImageObserver 图5 Met
13、hods inherited from class java.awt.Window 图6 Method Summary 沈 阳 大 学课程设计说明书 NO.6 图7 Methods inherited from class java.awt.Frame 图8 Methods inherited from class java.awt.Component 沈 阳 大 学课程设计说明书 NO.7图9 Methods inherited from class java.awt.Comtainer 图10 Methods inherited from class java.lang.Object 图1
14、1 Methods inherited from interface java.awt.MenuContainer 图12 Methods inherited from class java.lang.Object 沈 阳 大 学课程设计说明书 NO.8图13 基本参数截图注释:以上的图1-13 为在设计过程中,基本设置的几个参数变量,在设计的过程中对重要参数的截图。三设计结果与分析 本游戏的操作流程非常简单,用户启动游戏后,即进入游戏主画面,屏幕开始显示为欢迎画面。用户按下开始游戏按钮后,就可以开始玩游戏了,当用户想暂停时,再次按一下暂停游戏按钮,游戏就暂停了,在暂停的情况下再按开始游戏按钮
15、,游戏继续运行。任何时候按退出游戏按钮,游戏都会终止。如果用户想要提高游戏的难度就可以按下提高级数按钮。 沈 阳 大 学课程设计说明书 NO.9 本游戏包含几种形状的方块。分别为长方型、T型、7型、反7型、方型、上型。每种形状又有四种变换方式。如图14 图14 设计的方快形状 在附录中的代码运行后,后出现运行的效果图,具体效果如图15所显示。 图15 开始界面右边信息窗体的布局分别包括开始游戏、提高级数、降低级数、游戏暂停、退出游戏5个按钮,使用者可以根据自己的需求选择不同的按钮。 沈 阳 大 学课程设计说明书 NO.10 游戏画布类 :小方块边长 :final int 0unitSize =
16、 30正方格的行数: int rowNum方格的列数 :int columnNum允许有多少行未削 :int maxAllowRowNum新出现块的起始行坐标 :int blockInitRow出现块的起始列坐标: int blockInitCol屏幕数组: int scrArr对方快的引用:Block b以下几个图分别为在运行后的结果截图。图16为在开始后落下方块的截图;图17为得分后的截图;图18为提高级数后的截图;图19为游戏方块落满后的截图。图16 开始后落下方块 沈 阳 大 学课程设计说明书 NO.11图16注释:返回新块的初始行坐标方法: public int getInitRow
17、()返回新块的初始行坐标 :return(blockInitRow) 返回新块的初始列坐标方法 :public int getInitCol()返回新块的初始列坐标 :return(blockInitCol)图17 得分后 图17注释:满行删除方法 :void deleteFullLine() 沈 阳 大 学课程设计说明书 NO.12图18 提高级数后图18的注释:块的模式号(0-6):int blockType块的翻转状态(0-3):int turnState 块的下落状态 :int blockState块在画布上的坐标:int row,col 沈 阳 大 学课程设计说明书 NO.13图19
18、游戏方块落满四. 设计心得体会 通过这次课程设计,使我进一步巩固和加深学生所学的专业理论知识,培养学生设计、计算、绘图、计算机应用、文献查阅、报告撰写等基本技能;培养学生独立分析和解决实际问题的能力;培养学生的团队协作精神、创新意识、严肃认真的治学态度和严谨求实的工作作风看通过该课程设计,全面系统的理解了编译原理程序构造的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机编译原理 沈 阳 大 学课程设计说明书 NO.14的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对与计算机操作系统的认识是模糊的,概念上的,现在通
19、过自己动手做实验,从实践上认识了Java是如何编写命令的,如何协调计算机内部各个部件运行,对计算机编译原理的认识更加深刻。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意构造,将不必要的命令去除。深入的了解了JAVA语言的严谨性,了解了JAVA语言中AWT的使用,为以后学习打下良好的基础。JAVA是一种面向对象的程序语言。熟悉数据库的基本知识及一种以上数据库系统开发软件。五参考文献1 谢宋和, 甘 勇. 单片机模糊控制系统设计与应用实例M. 北京: 电子工业出版社, 1999.5:20-252 范立南, 谢子殿. 单片机原理及应用教程M. 北京: 北京大学出版社, 2006.1:1
20、23-1303 范立南, 韩晓微, 王忠石等. 基于多结构元的噪声污染灰度图像边缘检测研究4. 武汉大学学报(工学版), 2003,49(3):45-49 沈 阳 大 学课程设计说明书 NO.15附录:源代码package P050705052;import java.awt.*; import java.awt.event.*; /俄罗斯方块类 public class ERS_Block extends Frame public static boolean isPlay=false; public static int level=1,score=0; public static Tex
21、tField scoreField,levelField; public static MyTimer timer; GameCanvas gameScr; public static void main(String argus) ERS_Block ers = new ERS_Block("俄罗斯方块游戏 V1.0 Author:Vincent"); WindowListener win_listener = new WinListener(); ers.addWindowListener(win_listener); /俄罗斯方块类的构造方法 ERS_Block(St
22、ring title) super(title);setSize(600,480); setLayout(new GridLayout(1,2); gameScr = new GameCanvas(); gameScr.addKeyListener(gameScr); timer = new MyTimer(gameScr); timer.setDaemon(true); timer.start(); timer.suspend(); add(gameScr);Panel rightScr = new Panel(); rightScr.setLayout(new GridLayout(2,1
23、,0,30); rightScr.setSize(120,500); add(rightScr); 沈 阳 大 学课程设计说明书 NO.16/ MyPanel infoScr = new MyPanel(); infoScr.setLayout(new GridLayout(4,1,0,5); infoScr.setSize(120,300); rightScr.add(infoScr); /定义标签和初始值 Label scorep = new Label("分数:",Label.LEFT); Label levelp = new Label("级数:"
24、;,Label.LEFT); scoreField = new TextField(8); levelField = new TextField(8); scoreField.setEditable(false); levelField.setEditable(false); infoScr.add(scorep); infoScr.add(scoreField); infoScr.add(levelp); infoScr.add(levelField); scorep.setSize(new Dimension(20,60); scoreField.setSize(new Dimension
25、(20,60); levelp.setSize(new Dimension(20,60); levelField.setSize(new Dimension(20,60); scoreField.setText("0"); levelField.setText("1"); /右边控制按钮窗体的布局 MyPanel controlScr = new MyPanel(); controlScr.setLayout(new GridLayout(5,1,0,5); rightScr.add(controlScr); /定义按钮play Button play_
26、b = new Button("开始游戏"); play_b.setSize(new Dimension(50,200); play_b.addActionListener(new Command(Command.button_play,gameScr);/定义按钮Level UP Button level_up_b = new Button("提高级数"); level_up_b.setSize(new Dimension(50,200); level_up_b.addActionListener(new Command(Command.button_
27、levelup,gameScr); 沈 阳 大 学课程设计说明书 NO.17/定义按钮Level Down Button level_down_b =new Button("降低级数"); level_down_b.setSize(new Dimension(50,200); level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr); /定义按钮Level Pause Button pause_b =new Button("游戏暂停"); pause_b.se
28、tSize(new Dimension(50,200); pause_b.addActionListener(new Command(Command.button_pause,gameScr); /定义按钮Quit Button quit_b = new Button("退出游戏"); quit_b.setSize(new Dimension(50,200); quit_b.addActionListener(new Command(Command.button_quit,gameScr); controlScr.add(play_b); controlScr.add(le
29、vel_up_b); controlScr.add(level_down_b); controlScr.add(pause_b); controlScr.add(quit_b); setVisible(true); gameScr.requestFocus(); /重写MyPanel类,使Panel的四周留空间 class MyPanel extends Panel public Insets getInsets() return new Insets(30,50,30,50); /游戏画布类 class GameCanvas extends Canvas implements KeyList
30、ener final int unitSize = 30; /小方块边长 int rowNum; /正方格的行数 int columnNum; /正方格的列数 int maxAllowRowNum; /允许有多少行未削 沈 阳 大 学课程设计说明书 NO.18int blockInitRow; /新出现块的起始行坐标 int blockInitCol; /新出现块的起始列坐标 int scrArr; /屏幕数组 Block b; /对方快的引用 /画布类的构造方法 GameCanvas() rowNum = 15; columnNum = 10; maxAllowRowNum = rowNum
31、 - 2; b = new Block(this); blockInitRow = rowNum - 1; blockInitCol = columnNum/2 - 2; scrArr = new int 3232; /初始化屏幕,并将屏幕数组清零的方法 void initScr() for(int i=0;i<rowNum;i+) for (int j=0; j<columnNum;j+) scrArrij=0; b.reset(); repaint(); /重新刷新画布方法 public void paint(Graphics g) for(int i = 0; i <
32、rowNum; i+) for(int j = 0; j < columnNum; j+) drawUnit(i,j,scrArrij); /画方块的方法 public void drawUnit(int row,int col,int type) scrArrrowcol = type; Graphics g = getGraphics(); switch(type) /表示画方快的方法 沈 阳 大 学课程设计说明书 NO.19case 0: g.setColor(Color.black);break; /以背景为颜色画 case 1: g.setColor(Color.blue);b
33、reak; /画正在下落的方块 case 2: g.setColor(Color.magenta);break; /画已经落下的方法 g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true); g.dispose(); public Block getBlock() return b; /返回block实例的引用 /返回屏幕数组中(row,col)位置的属性值 public int getScrArrXY(int row,int col) if (row < 0 | row &g
34、t;= rowNum | col < 0 | col >= columnNum) return(-1); else return(scrArrrowcol); /返回新块的初始行坐标方法 public int getInitRow() return(blockInitRow); /返回新块的初始行坐标 /返回新块的初始列坐标方法 public int getInitCol() return(blockInitCol); /返回新块的初始列坐标 /满行删除方法 void deleteFullLine() int full_line_num = 0; int k = 0; for (i
35、nt i=0;i<rowNum;i+) boolean isfull = true; L1:for(int j=0;j<columnNum;j+) 沈 阳 大 学课程设计说明书 NO.20if(scrArrij = 0) k+; isfull = false; break L1; if(isfull) full_line_num+; if(k!=0 && k-1!=i && !isfull) for(int j = 0; j < columnNum; j+) if (scrArrij = 0) drawUnit(k-1,j,0); else d
36、rawUnit(k-1,j,2); scrArrk-1j = scrArrij; for(int i = k-1 ;i < rowNum; i+) for(int j = 0; j < columnNum; j+) drawUnit(i,j,0); scrArrij=0; ERS_Block.score += full_line_num; ERS_Block.scoreField.setText(""+ERS_Block.score); /判断游戏是否结束方法 boolean isGameEnd() for (int col = 0 ; col <colu
37、mnNum; col +) if(scrArrmaxAllowRowNumcol !=0) return true; return false; public void keyTyped(KeyEvent e) public void keyReleased(KeyEvent e) 沈 阳 大 学课程设计说明书 NO.21/处理键盘输入的方法 public void keyPressed(KeyEvent e) if(!ERS_Block.isPlay) return; switch(e.getKeyCode() case KeyEvent.VK_DOWN:b.fallDown();break
38、; case KeyEvent.VK_LEFT:b.leftMove();break; case KeyEvent.VK_RIGHT:b.rightMove();break; case KeyEvent.VK_SPACE:b.leftTurn();break; /处理控制类 class Command implements ActionListener static final int button_play = 1; /给按钮分配编号 static final int button_levelup = 2; static final int button_leveldown = 3; sta
39、tic final int button_quit = 4; static final int button_pause = 5; static boolean pause_resume = true; int curButton; /当前按钮 GameCanvas scr; /控制按钮类的构造方法 Command(int button,GameCanvas scr) curButton = button; this.scr=scr; /按钮执行方法 public void actionPerformed (ActionEvent e) switch(curButton) case butto
40、n_play:if(!ERS_Block.isPlay) scr.initScr(); 沈 阳 大 学课程设计说明书 NO.22ERS_Block.isPlay = true; ERS_Block.score = 0; ERS_Block.scoreField.setText("0"); ERS_Block.timer.resume(); scr.requestFocus(); break; case button_levelup:if(ERS_Block.level < 10) ERS_Block.level+; ERS_Block.levelField.setTe
41、xt(""+ERS_Block.level); ERS_Block.score = 0; ERS_Block.scoreField.setText(""+ERS_Block.score); scr.requestFocus(); break; case button_leveldown:if(ERS_Block.level > 1) ERS_Block.level-; ERS_Block.levelField.setText(""+ERS_Block.level); ERS_Block.score = 0; ERS_Block.
42、scoreField.setText(""+ERS_Block.score); scr.requestFocus(); break; case button_pause:if(pause_resume) ERS_Block.timer.suspend(); pause_resume = false; else ERS_Block.timer.resume(); pause_resume = true; scr.requestFocus(); break; case button_quit:System.exit(0); /方块类 class Block static int
43、 pattern = 沈 阳 大 学课程设计说明书 NO.230x0f00,0x4444,0x0f00,0x4444,/用十六进至表示,本行表示长条四种状态 0x04e0,0x0464,0x00e4,0x04c4, 0x4620,0x6c00,0x4620,0x6c00, 0x2640,0xc600,0x2640,0xc600, 0x6220,0x1700,0x2230,0x0740, 0x6440,0x0e20,0x44c0,0x8e00, 0x0660,0x0660,0x0660,0x0660 ; int blockType; /块的模式号(0-6) int turnState; /块的翻
44、转状态(0-3) int blockState; /快的下落状态 int row,col; /块在画布上的坐标 GameCanvas scr; /块类的构造方法 Block(GameCanvas scr) this.scr = scr; blockType = (int)(Math.random() * 1000)%7; turnState = (int)(Math.random() * 1000)%4; blockState = 1; row = scr.getInitRow(); col = scr.getInitCol(); /重新初始化块,并显示新块 public void reset
45、() blockType = (int)(Math.random() * 1000)%7; turnState = (int)(Math.random() * 1000)%4; blockState = 1; row = scr.getInitRow(); col = scr.getInitCol(); dispBlock(1); /实现“块”翻转的方法 public void leftTurn() if(assertValid(blockType,(turnState + 1)%4,row,col) dispBlock(0); turnState = (turnState + 1)%4; dis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京市海淀区05-06学年高三上学期期中考试历史试题
- 律师办事效率合同范本
- 彩瓦商铺施工合同范本
- 委托安装调试合同范本
- 委托购买锅炉合同范本
- 工程车队居间合同范本
- 户外草坪租用合同范本
- 安保器材租赁合同范本
- 《客房服务(Room Service)》专业教学方案
- 承包装卸劳务合同范本
- 2025重庆市涪陵区马武镇人民政府选聘本土人才14人参考题库附答案
- 二年级上册语文试题-第六单元测试题-人教部编版(含答案)
- 医院院感考试题库及答案
- 2025年射频识别技术面试题库及答案
- 拣货主管年终总结
- 糖尿病重症患者肠内营养血糖调控方案
- 光伏钻孔灌注桩基础施工技术规范
- 安保部月度工作总结
- 防范和抵御宗教向校园渗透
- 【语文】四川省成都市实验小学小学一年级上册期末试卷(含答案)
- 设备点巡检基础知识培训课件
评论
0/150
提交评论