您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > Java课程设计——俄罗斯方块
JAVA程序设计-1-一、程序功能介绍本程序实现了俄罗斯方块游戏的基本功能,游戏中玩家可以做的操作有:1.中间一个方块不变其他三个以90度为单位向右旋转方每一格块,此程序会判断方块有没有空间让他实现旋转,即判断是否越界,若越界则不可以实现旋转。2.以格子为单位左右移动方块,下方向让方块加速落下,空格键则急速下落。3.方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。4.当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。同时删除的列数越多,得分指数上升。5.当固定的方块堆到区域最上方,则游戏结束。(此功能尚未实现)6.此程序还不完善,开始,暂停,重来,结束都没有实现,有待改进。二、课程设计过程1、总体概述:设计一个简单的游戏,能够将Java的面向对象程序思想应用到课程设计中,用到Java中常用的组件以及相应的布局方式。完成设计、编程、测试等过程,给出设计思路、设计说明书、主要的代码的说明、源代码以及可运行的游戏程序。2、各个子类的定义:1.定义俄罗斯方块类,通过可视化界面设定一个游戏界面窗口,用一个10*20表示游戏区域。publicclassTetrisGameextendsJPanelJFramejf=newJFrame(俄罗斯方块);jf.setSize(540,600);jf.setVisible(true);publicstaticfinalintROWS=20;publicstaticfinalintCOLS=10;2.定义7种俄罗斯方块的基本类型,分别以S、Z、L、J、I、O、T这7个字母的形状来命名。先定义四方格主类:publicclassTetromino;再定义它的7个子类:S、Z、L、J、I、O、TprivatestaticclassSextendsTetromino;JAVA程序设计-2-privatestaticclassZextendsTetromino;privatestaticclassLextendsTetromino;privatestaticclassJextendsTetromino;privatestaticclassIextendsTetromino;privatestaticclassOextendsTetromino;privatestaticclassTextendsTetromino;3.通过switch语句,随机输出方块到游戏区域顶部。publicstaticTetrominorandomOne();4.用键盘监听来实现下落、移动、旋转变形。键盘监听:publicvoidkeyPressed(KeyEvente);软着陆:protectedvoidsoftDropAction();硬着陆:protectedvoidhardDropAction();左移:protectedvoidmoveLeftAction();右移:protectedvoidmoverightAction();右旋:publicvoidrotateRight();repaint();重绘java里repaint()是重绘component的方法;component中己有的图形发生变化后不会立刻显示,须使用repaint方法。component简而言之,组件就是对象。C++Builder中叫组件,Delphi中叫部件,而在VisualBASIC中叫控件。组件是对数据和方法的简单封装。C++Builder中,一个组件就是一个从TComponent派生出来的特定对象组件可以有自己的属性和方法。判断是否越界:privatebooleancanMoveR();//是否碰墙,是否有其他图形privatebooleanoutOfBoundsTB();//privatebooleanbaoHanR();//判断右侧墙上是否有内容privatebooleanbaoHanL();//判断左侧墙上是否有内容privatebooleanoutOfBoundsR();privatebooleanoutOfBoundsL();5.绘制图像publicvoidpaint(Graphicsg);JAVA程序设计-3-privatevoidpaintScore(Graphicsg);privatevoidpaintNextOne(Graphicsg);privatevoidpaintWall(Graphicsg);privatevoidpaintTetromino(Graphicsg);6.每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取积分。判断是否行满:privatebooleanfullCells(introw);消行:privatevoiddestroyLines();3、导入各种包:1、java.awt.Font:Font类表示字体,可以使用它以可见方式呈现文本。字体提供将字符序列映射到字形序列所需要的信息,以便在Graphics对象和Component对象上呈现字形序列。2、java.awt.Graphics:是一个用来绘制2D图像必须导入的java包,提供对图形图像的像素,颜色的绘制。3、java.awt.Image:提供创建和修改图像的各种类。使用流框架来处理图像,该框架涉及图像生产者、可选的图像过滤器和图像使用者。此框架使得在获取和生成图像的同时逐步呈现该图像成为可能。而且,该框架允许应用程序丢弃图像使用的存储空间并随时重新生成它。此包提供了多种图像生产者、使用者和过滤器,可以根据图像处理的需要来配置它们。4、java.awt.event.KeyAdapter:接收键盘事件的摘要适配器类。方法在这类。这类方便创建侦听器对象的存在。扩展这个类来创建一个键盘事件听众和覆盖感兴趣的事件的方法。(如果你实施KeyListener接口,你必须定义所有的方法,它。这个抽象类定义了无效的方法所有,所以你只能定义为事件你关心的方法。)创建一个使用扩展类的听众对象然后登记与组件使用组件的addkeylistener方法当一个键被按下,释放,或类型,方法在听者相关对象时,键盘事件通过它。5、java.awt.event.KeyEvent:提供处理由AWT组件所激发的各类事件的接口和类。有关AWT事件模型的细节,请参见JAVA程序设计-4-java.awt.AWTEvent类。事件由事件源所激发。向事件源注册的事件侦听器可接收有关特定事件类型的通知。此包定义了事件和事件侦听器,以及事件侦听器适配器,它是让事件侦听器的编写过程更为轻松的便捷类。6、java.awt.event.KeyListener:用于接收键盘事件(击键)的侦听器接口。旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象KeyAdapter类(仅重写有用的方法)。然后使用组件的addKeyListener方法将从该类所创建的侦听器对象向该组件注册。按下、释放或键入键时生成键盘事件。然后调用侦听器对象中的相关方法并将该KeyEvent传递给它。7、java.awt.event.KeyListener:java.util.Arrays类包含一个静态的工厂,允许数组被视为列表。以下是关于数组的要点:这个类包含了各种方法来操作数组(比如排序和搜索)。在这个类中的方法抛出NullPointerException如果指定数组引用为null。8、javax.imageio.ImageIO:此包包含一些基本类和接口,有的用来描述图像文件内容(包括元数据和缩略图)(IIOImage)有的用来控制图像读取过程(ImageReader、ImageReadParam和ImageTypeSpecifier)和控制图像写入过程(ImageWriter和ImageWriteParam);还有的用来执行格式之间的代码转换(ImageTranscoder)和报告错误(IIOException)。9、javax.swing.JFrame:java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。10、javax.swing.JPanel:JPanel类是一个通用的轻量级容器。11、java.util.Random:Random是数的随机生成器。JAVA程序设计-5-4、程序功能设计:功能模块图:如图1:图1功能模块图main框架墙下一个图形计分监听器判断越界判断到底N判断消行左移右移变形软下降硬下降消行重画墙计分重画墙YNJAVA程序设计-6-三、程序运行的结果分析1、初始界面如图2:有一个方块下来且右上方矩形中显示下一个方块图2初始状态图JAVA程序设计-7-2、当底部有一行方块填充,进行计算行数并加分及消除该行,结果如图3图3计分消行图四、课程设计总结JAVA程序设计-8-这次JAVA课程设计我选择了做俄罗斯方块这个小游戏,刚开始很迷茫,不知道该怎么做,多次想要换题,但是由于很早玩过这个游戏所以对于它产生了兴趣,想要知道它到底是怎么做成的。之后经过网上查询以及请教学霸等方法,终于慢慢的开始打代码,在学习过程中,我学到了一些关于做游戏的相关知识,比如说怎么设置界面,设置面板,画游戏界面等,也在过程中发现了自己的不足之处。运行程序的时候出现了几个问题:1、不知道该用哪些函数2、一段一段代码总有好多漏洞,要判断好多东西,比如它是否到达底部的墙上,墙上是否有方块,到底怎样使它自动下降等。经过这次课程设计,我对java这门课程更加了解了,学习也有了方向感,明白了基础知识很重要,但实践也很重要。强大的理论功底和动手能力结合才是一个工程师必备的,理论与实践结合才是完美的。我们应该抓住每次实验的机会,实打实的学些东西,还有在学校提供的学习平台里面好好学习。当然,这些也离不开我们老师的悉心指导,所以我们更应该不负老师所望,今后我们强化自己的知识的认识,在这里想跟老师说一声,非常感谢。五、程序设计的完整代码及注解packagenewTetris;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjava.util.Arrays;importjavax.imageio.ImageIO;importjavax.swing.JFrame;importjavax.swing.JPanel;publicclassTetrisGameextendsJPanel{publicstaticfinalintROWS=20;publicstaticfinalintCOLS=10;publicstaticfinalintCELL_SIZE=26;//格子的大小privateintscore;//计分privateintlines=0;//计消除行Tetrominot=Tetromino.randomOne();Tetrominonext=Tetromino.randomOne();//下一张图privateCell[][]wall=newCell[20][10];//墙publicstaticImagebackground;//声明变量重画墙JAVA程序设计-9-publicstaticImageI;publicstaticImageT;publicstaticImageS;publicstaticImageZ;publicstaticImageL;publicstaticImageJ;publicstaticImageO;static{try{background=ImageIO.read(TetrisGame.class.g
本文标题:Java课程设计——俄罗斯方块
链接地址:https://www.777doc.com/doc-7372873 .html