java课程设计——俄罗斯方块
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、程序功能介绍
本程序实现了俄罗斯方块游戏的基本功能,游戏中玩家可以做的操作有:
1.中间一个方块不变其他三个以90度为单位向右旋转方每一格块,此程序会判断方块有没有空间让他实现旋转,即判断是否越界,若越界则不可以实现旋转。
2.以格子为单位左右移动方块,下方向让方块加速落下,空格键则急速下落。
3.方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。
4.当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。同时删除的列数越多,得分指数上升。
5.当固定的方块堆到区域最上方,则游戏结束。(此功能尚未实现)
6.此程序还不完善,开始,暂停,重来,结束都没有实现,有待改进。
二、课程设计过程
1、总体概述:
设计一个简单的游戏,能够将Java的面向对象程序思想应用到课程设计中,用到Java 中常用的组件以及相应的布局方式。完成设计、编程、测试等过程,给出设计思路、设计说明书、主要的代码的说明、源代码以及可运行的游戏程序。
2、各个子类的定义:
1.定义俄罗斯方块类,通过可视化界面设定一个游戏界面窗口,用一个10*20表示游戏区域。public class TetrisGame extends JPanel
JFrame jf=new JFrame("俄罗斯方块");
jf.setSize(540,600);
jf.setVisible(true);
public static final int ROWS=20;
public static final int COLS=10;
2.定义7种俄罗斯方块的基本类型,分别以S、Z、L、J、I、O、T这7个字母的形状来命名。先定义四方格主类:public class Tetromino;
再定义它的7个子类:S、Z、L、J、I、O、T
private static class S extends Tetromino;
private static class Z extends Tetromino;
private static class L extends Tetromino;
private static class J extends Tetromino;
private static class I extends Tetromino;
private static class O extends Tetromino;
private static class T extends Tetromino;
3.通过switch语句,随机输出方块到游戏区域顶部。
public static Tetromino randomOne();
4.用键盘监听来实现下落、移动、旋转变形。
键盘监听:public void keyPressed(KeyEvent e);
软着陆:protected void softDropAction();
硬着陆:protected void hardDropAction();
左移:protected void moveLeftAction();
右移:protected void moverightAction();
右旋:public void rotateRight();
repaint();
重绘java里repaint()是重绘component的方法;component中己有的图形发生变化后不会立刻显示,须使用repaint方法。component简而言之,组件就是对象。C++Builder中叫组件,Delphi中叫部件,而在Visual BASIC中叫控件。组件是对数据和方法的简单封装。C++ Builder中,一个组件就是一个从TComponent派生出来的特定对象组件可以有自己的属性和方法。
判断是否越界:
private boolean canMoveR();//是否碰墙,是否有其他图形
private boolean outOfBoundsTB();//
private boolean baoHanR();//判断右侧墙上是否有内容
private boolean baoHanL();//判断左侧墙上是否有内容
private boolean outOfBoundsR();
private boolean outOfBoundsL();
5.绘制图像
public void paint(Graphics g);
private void paintScore(Graphics g);
private void paintNextOne(Graphics g);
private void paintWall(Graphics g);
private void paintTetromino(Graphics g);
6.每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取积分。
判断是否行满:private boolean fullCells(int row);
消行:private void destroyLines();
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事件模型的细节,请参见