代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
会爆炸的俄罗斯方块
作者:
constantine_jerry
/ 发布于
2013/9/2
/
607
import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Timer; import java.util.TimerTask; public class Controller extends KeyAdapter { private Shape shape; private Ground ground; private ShapeFactory shapeFactory; private GamePanel gamePanel; private static int flash_counter = 0; private static int bombFlash_counter = 0; //private static int newGameFlash_counter = 0; // 初始化 public Controller(Ground ground,ShapeFactory shapeFactory,GamePanel gamePanel){ this.ground = ground; this.shapeFactory = shapeFactory; this.gamePanel = gamePanel; shapeFactory.addListener(this); } // 开始新游戏 public void newGame(){ shape = shapeFactory.firstGetShape(Controller.this); shape.isVerticalShape(); // 判断是否产生了竖方块,是的话方块上移一个单位 shape.startShape(); ground.zeroGround(); ground.setScore(0); shapeFactory.setScore(0); shapeFactory.disPlay(shape); // 刷新一下方块工厂面板 // new Timer().schedule(new TimerTask() { // // @Override // public void run() { // // } // }, 600); } //方块监听器 public void ShapeListener() { new Thread(new tmp()).start(); gamePanel.disPlay(shape,ground); } // 方块工厂监听器 public void shapeFactoryListener(){ if(shapeFactory.getIsPause() && !ground.getFlash() && !ground.getBombFlash()){ shape.pause(); gamePanel.disPlay(shape,ground); } else{ shape.pause(); gamePanel.disPlay(shape,ground); } } // 键盘监听器 @Override public void keyPressed(KeyEvent e) { switch(e.getKeyCode()){ case KeyEvent.VK_UP: // 上 if(shape.isRotateable(Shape.ROTATE)){ shape.rotate(); } break; case KeyEvent.VK_DOWN: // 下 if(!ground.getFlash() && !ground.getBombFlash() && !shape.getPause()){ shape.moveDown(); new Thread(new tmp()).start(); } break; case KeyEvent.VK_LEFT: // 左 if(shape.isMoveLeft(Shape.LEFT)){ shape.moveLeft(); } break; case KeyEvent.VK_RIGHT: // 右 if(shape.isMoveRight(Shape.RIGHT)){ shape.moveRight(); } break; case KeyEvent.VK_SPACE: // 暂停 if(!ground.getFlash() && !ground.getBombFlash()){ shape.pause(); gamePanel.disPlay(shape, ground); } break; } if(!shape.getPause() && !ground.getFlash() && !ground.getBombFlash()){ gamePanel.disPlay(shape, ground); } } // A private class EliminateFlashWhite extends TimerTask{ @Override public void run() { flash_counter++; gamePanel.flash_white(shape, ground); if(flash_counter <= 10){ new Timer().schedule(new EliminateFlashBlack() , 50); // 设置一个定时器,每0.05秒闪烁一次 } // 闪了一次白色就设置一个闪黑色的定时器 else{ flash_counter = 0; // 爆炸闪烁了十次便停止 } } } // B private class EliminateFlashBlack extends TimerTask{ @Override public void run() { flash_counter++; gamePanel.flash_black(shape, ground); if(flash_counter <= 10){ new Timer().schedule(new EliminateFlashWhite() , 50); // 设置一个定时器,没0.05秒闪烁一次 } // 闪了一次黑色就设置一个闪白色的定时器 else{ flash_counter = 0; // 消除闪烁了十次便停止 } } } // 爆炸效果 private class BombFlash extends TimerTask{ @Override public void run() { bombFlash_counter++; gamePanel.flash_bomb(shape, ground); if(bombFlash_counter <= 10){ new Timer().schedule(new BombFlash(), 50); // 设置一个定时器,每0.05秒闪烁一次 } // 闪了一次又设置一次 闪烁 else{ bombFlash_counter = 0; // 爆炸闪烁了十次便停止 } } } // // 新游戏闪烁 // private class newGameFlash extends TimerTask{ // // @Override // public void run() { // newGameFlash_counter++; // gamePanel.newGameFlash(shape,ground); // if(newGameFlash_counter <= 10){ // new Timer().schedule(new newGameFlash(), 50); // 设置一个定时器,每0.05秒闪烁一次 // } // 闪了一次又设置一次 闪烁 // else{ // newGameFlash_counter = 0; // 闪烁了十次便停止 // } // } // } private class tmp implements Runnable{ @Override public void run() { if(!shape.getPause()){ if(!shape.isDead()){ if(ground.isGameOver(shape)){ ground.combine(shape); // 石头结合 ground.isEliminateFlash(); // 判断是否有消除闪烁 ground.isBombFlash(shape); // 判断是否有爆炸闪烁 if(ground.getBombFlash()){ new Thread(new BombFlash()).start(); // 爆炸闪烁启动 new Timer().schedule(new TimerTask() { // 这里设置一个定时器,等爆炸闪烁完了再启动以下代码 @Override public void run() { ground.zeroBomb(shape); ground.eliminate(); // 石头消除 shapeFactory.setScore(ground.getScore()); // 刷新得分 shape.setSpeed(shapeFactory.getSpeed()); // 刷新速度 shape = shapeFactory.getShape(Controller.this); // 产生新的方块 shape.isVerticalShape(); // 判断是否产生了竖方块 shape.startShape(); // 启动线程 shapeFactory.disPlay(shape); // 刷新方块工厂面板 ground.setBombFlash(false); } }, 600); } else if(ground.getFlash()){ new Thread(new EliminateFlashBlack()).start(); new Timer().schedule(new TimerTask() { @Override public void run() { ground.eliminate(); // 石头消除 shapeFactory.setScore(ground.getScore()); // 刷新得分 shape.setSpeed(shapeFactory.getSpeed()); // 刷新速度 shape = shapeFactory.getShape(Controller.this); // 产生新的方块 shape.isVerticalShape(); // 判断是否产生了竖方块 shape.startShape(); // 启动线程 shapeFactory.disPlay(shape); // 刷新方块工厂面板 ground.setFlash(false); } }, 600); } else{ ground.eliminate(); // 石头消除 shapeFactory.setScore(ground.getScore()); // 刷新得分 shape.setSpeed(shapeFactory.getSpeed()); // 刷新速度 if(!shape.isDead()){ shape = shapeFactory.getShape(Controller.this); // 产生新的方块 shape.isVerticalShape(); // 判断是否产生了竖方块 shape.startShape(); // 启动线程 shapeFactory.disPlay(shape); // 刷新方块工厂面板 } } } } } } } }
试试其它关键字
俄罗斯方块
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
constantine_jerry
贡献的其它代码
(
1
)
.
会爆炸的俄罗斯方块
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3