package controller; import java.awt.Graphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import listener.ContainerListener; import util.Global; import util.IConstant; import view.LeftContainerPanel; import view.RightContainerPanel; import entities.Block; import entities.BlockFactory; import entities.FormListener; import entities.LeftContainer; import entities.RightContainer; public class Controller extends KeyAdapter implements IConstant, ContainerListener,Runnable { public static final int INIT = 1; public static final int PLAYING = 2; public static final int PAUSE = 3; public static final int SUCCESS = 5; public static final int FAIL = 6; private Block curBlock = null;// 当前块 private Block nextBlock = null;// 下一个块 private BlockFactory blockFactory = null; private RightContainer rightContainer = null; private LeftContainer leftContainer = null; public static int gameState; //private int score; public boolean run; private LeftContainerPanel leftContainerPanel; private RightContainerPanel rightContainerPanel; private FormListener formListener; public Controller(LeftContainerPanel leftContainerPanel,RightContainerPanel rightContainerPanel) { this.leftContainerPanel = leftContainerPanel; this.rightContainerPanel = rightContainerPanel; init(); } private void init() { blockFactory = new BlockFactory(); leftContainer = new LeftContainer(); rightContainer = new RightContainer(); rightContainer.setListener(this); setState(INIT); new Thread(this).start(); } //开始游戏 public void startGame() { clear(); curBlock = blockFactory.getBlock(); nextBlock = blockFactory.getBlock(); leftContainer.init(); rightContainer.init(); setState(PLAYING); } //暂停游戏 public void pauseGame() { setState(PAUSE); } //继续游戏 public void continueGame() { setState(PLAYING); } //结束游戏 public void endGame() { clear(); setState(INIT); } private void clear() { curBlock = null; nextBlock = null; } /** 把下一个方块给当前方块,然后重新产生下一个方块 */ private void proNewBlock() { curBlock = nextBlock; nextBlock = blockFactory.getBlock(); } int flag = 0;// 控制游戏的速度 /** 刷新当前页面 */ public void update() { switch(gameState) { case INIT: rightContainerPanel.redisplay(curBlock, rightContainer); rightContainerPanel.repaint(); leftContainerPanel.redisplay(nextBlock, leftContainer); leftContainerPanel.repaint(); break; case PLAYING: if (flag == Global.DOWN_SPEED - 1) { if (rightContainer.isMoveable(curBlock, Block.DOWN)) { curBlock.moveDown(); } else { rightContainer.setBarrier(curBlock); if (!rightContainer.isFull()) { // 产生新图像 proNewBlock(); } } } flag = (++flag) % Global.DOWN_SPEED; rightContainerPanel.redisplay(curBlock, rightContainer); rightContainerPanel.repaint(); leftContainerPanel.redisplay(nextBlock, leftContainer); leftContainerPanel.repaint(); break; case PAUSE: rightContainerPanel.redisplay(curBlock, rightContainer); rightContainerPanel.repaint(); leftContainerPanel.redisplay(nextBlock, leftContainer); leftContainerPanel.repaint(); break; case FAIL: rightContainerPanel.redisplay(null, rightContainer); rightContainerPanel.repaint(); leftContainerPanel.redisplay(nextBlock, leftContainer); leftContainerPanel.repaint(); break; } } /** 设置游戏状态 */ public static void setState(int state) { gameState = state; } // public void setScore(int score) // { // this.score = score; // } public void containerIsFull() { // curBlock = null; setState(FAIL); } public void removeFullLine(int score) { //this.score = this.score + score;// 消除满行后增加分数 formListener.addScore(score); } @Override public void run() { while(true) { update(); try { Thread.sleep(Global.SLEEPTIME); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void keyPressed(KeyEvent e) { if(gameState ==PLAYING) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: if (rightContainer.isMoveable(curBlock, Block.ROTATE)) { curBlock.rotBlock(); } break; case KeyEvent.VK_DOWN: if (rightContainer.isMoveable(curBlock, Block.DOWN)) { curBlock.moveDown(); } break; case KeyEvent.VK_LEFT: if (rightContainer.isMoveable(curBlock, Block.LEFT)) { curBlock.moveLeft(); } break; case KeyEvent.VK_RIGHT: if (rightContainer.isMoveable(curBlock, Block.RIGHT)) { curBlock.moveRight(); } break; } } } public void addListener(FormListener formListener) { this.formListener = formListener; } }
最近下载更多
yx666666 LV1
1月5日
ClydeSon LV5
2023年12月27日
1351408674 LV1
2023年12月27日
1112WHQ LV7
2023年11月3日
ggl163163eel LV2
2023年10月18日
wangjialiang1 LV17
2023年8月20日
大白8加3 LV1
2023年8月18日
XVXIAOPING LV1
2022年12月21日
微信网友_6268131861106688 LV5
2022年12月21日
balabalawuyu LV6
2022年11月26日
最近浏览更多
3296029180
1月18日
暂无贡献等级
yx666666 LV1
1月5日
ClydeSon LV5
2023年12月27日
1351408674 LV1
2023年12月27日
Kunyuu LV1
2023年12月26日
lshlsh
2023年12月25日
暂无贡献等级
1112WHQ LV7
2023年11月3日
微信网友_6699076084797440 LV7
2023年10月30日
jiemomo LV12
2023年10月19日
ggl163163eel LV2
2023年10月18日