实现俄罗斯方块的下落
来源:互联网 发布:购买淘宝小号在哪里买 编辑:程序博客网 时间:2024/04/20 07:07
实现俄罗斯方块的下落:
1,实现方块的驱动马达,驱动方块下落,每一个方块都有一个马达。(相当去汽车发动机) - 用一个线程来实现
2,实现一个发动马达的方法供外部对象使用;
3,在测试程序中进行测试。
一、在上一篇实现的CBlock.java标准方块类基础上,新增以下代码,实现方块的下落
1、给block增加两个属性(1)、判断当前方块是否已活着;(2)、给方块增加一个监听器属性
//加volatile,不让该变量进入高速缓存private volatile boolean isAlive;//判断方块是否处于活动状态,被多个线程访问private BlockListener listener;//方块监听器属性
2、提供一个外部方法,让外部对象可以给方块注册监听器
/** * 为方块注册一个监听方法 */public void addBlockListener(BlockListener l){if (l!=null) {this.listener=l;}}
3、实现方块的驱动马达,驱动方块下落
/** *作 者: Helloway *类 名:Motor *类说明:方块内部类,用来驱动自己往下落 */private class Motor implements Runnable{Point newPos=null;public Motor(int speed) {CBlock.this.speed=speed;}public void run() {while(isAlive){ //判断当前方块是否处于活动状态try {Thread.sleep(speed);} catch (InterruptedException e) {e.printStackTrace();}newPos=new Point(pos.x+1,pos.y);if (moving) { //方块是否被暂停listener.moveTo(newPos);}}}}/** *方法说明:发动方块内部的引擎 * @param speed*/public void startMotor(int speed) {isAlive=true;Motor motor=new Motor(speed);Thread motorThread=new Thread(motor);motorThread.start();}4、给block类的各个属性进行getter和setter操作
public Color getBlockColor() {return blockColor;}public void setBlockColor(Color blockColor) {this.blockColor = blockColor;}public int getBlockStyle() {return blockStyle;}public void setBlockStyle(int blockStyle) {this.blockStyle = blockStyle;}public int getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}public Point getPos() {return pos;}public void setPos(Point pos) {this.pos = pos;}public boolean isMoving() {return moving;}public void setMoving(boolean moving) {this.moving = moving;}public boolean isAlive() {return isAlive;}public void setAlive(boolean isAlive) {this.isAlive = isAlive;}
二、为方块监听器设计几个监听接口(一个是擦除旧方块的接口,一个是移动方块到一个新位置的接口),用来监听方块动作:
/***作 者: Helloway*类 名:BlockListener*类说明: 方块监听接口*/public interface BlockListener {public void erase(CShowPanel panel,Point pos);public boolean moveTo(Point newPos);}
三、游戏控制器实现方块监听接口:
/** *作 者: Helloway *类 名:CController *类说明: 控制器类,主要用来控制游戏*/ public class CController implements GameListener,BlockListener{private BlockFactory factory;private CBlock block;private CShowPanel gamePanel;private int gameLevel;//游戏控制器掌控游戏的难度等级private int STYLES[][]={//方块的28种状态{ 0x0f00, 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 }//正方形方块的四种状态都一样};public CController(BlockFactory factory,CShowPanel gamePanel) {this.factory=factory;this.gamePanel=gamePanel;}/*** 定义一个内部类,专门生产方块*/private class BlockGenerator{public BlockGenerator(){ int style=STYLES[2][1]; block=factory.generateBlock(Color.GREEN, style, new Point(3,2)); int speed; //50表示5毫秒 //3表示调整系数,防止speed=0,一旦speed=0,则sleep(speed)时则没有睡眠,此时速度超快 speed=50*(CGlobal.MAXLEVEL-gameLevel+3); block.addBlockListener(CController.this); block.startMotor(speed); //block.drawSelf(gamePanel, null, -1);}}/*** 开始游戏*/public void startGame() {BlockGenerator blockGenerator=new BlockGenerator();}/*** 实现actionEvent事件的方法*/public void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("退出")) {System.exit(0);}}/*** 方法说明:擦除旧方块*/public void erase(CShowPanel panel, Point pos) {for (int i = 0; i < CGlobal.Block_Rows; i++) {for (int j = 0; j < CGlobal.Block_Cols; j++) {CGrid grid = panel.getPanelGrid(pos.x+i, pos.y+j);if (grid==null) {continue;}grid.setGridColor(panel.getPanelColor());}}}/*** 方法说明:移动方块到一个新的位置*/public boolean moveTo(Point newPos) {erase(gamePanel, block.getPos());//block.getPos()擦除当前方块位置block.drawSelf(gamePanel, newPos, -1);//-1表示方块的形状不改变block.setPos(newPos);//更新方块的位置return true;}}
四、为了使方块能够下落,在CBlock.java方块标准类中设置方块是往下掉的:
public CBlock(Color blockColor, int blockStyle, Point pos) {super();this.blockColor = blockColor;this.blockStyle = blockStyle;this.pos = pos;this.moving=true;//方块是否在移动,是暂停的还是往下掉的}
0 0
- 实现俄罗斯方块的下落
- CCF认证 俄罗斯方块下落问题
- CCF201604(2)模拟俄罗斯方块下落
- 俄罗斯方块的接口实现
- 俄罗斯方块的简单实现
- MFC实现的俄罗斯方块
- C# 俄罗斯方块的实现
- C实现的俄罗斯方块
- 俄罗斯方块的实现
- 俄罗斯方块java的实现
- 俄罗斯方块的源码实现
- 俄罗斯方块的 C++实现
- 俄罗斯方块的源码实现
- 第七次CCF认证考试 题目二模拟俄罗斯方块下落的过程
- UNITY 开发日记/教程 俄罗斯方块 (六) 消除与堆积正方形的下落
- 大二时实现的俄罗斯方块
- [原创]MFC实现的俄罗斯方块
- C语言实现的俄罗斯方块
- Material Design综合实例
- 随机取10个数6
- 【太原UI设计师】Windowsphone设计的规范你知道吗?
- 304. Range Sum Query 2D - Immutable 动态规划
- odoo新API整合文档
- 实现俄罗斯方块的下落
- 第五届华中区程序设计邀请赛暨武汉大学第十四届校赛 Problem 1603 - Minimum Sum
- 深刻理解Python中的元类(metaclass)
- codeforces 650c
- myeclipse无法创建jsp页面
- RTSP协议、RTMP协议、HTTP协议的区别
- 区间调度问题
- 4. PDO 事务处理
- window对象