亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? controller.java

?? 傳志播客版貪吃蛇源碼 J2ME
?? JAVA
字號:
package cn.itcast.snake.controller;

import java.awt.Font;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import java.util.Set;

import javax.swing.JLabel;

import cn.itcast.snake.entities.Food;
import cn.itcast.snake.entities.Ground;
import cn.itcast.snake.entities.Snake;
import cn.itcast.snake.listener.GameListener;
import cn.itcast.snake.listener.SnakeListener;
import cn.itcast.snake.util.Global;
import cn.itcast.snake.view.GamePanel;

/**
 * 控制器<BR>
 * 控制Ground, Snake, Food<BR>
 * 負責游戲的邏輯<BR>
 * 處理按鍵事件<BR>
 * <BR>
 * 實現了SnakeListener接口, 可以處理Snake 觸發的事件<BR>
 * 方法 snakeEatFood() 處理蛇吃到食物后觸發的 snakeEatFood事件 但什么也沒做<BR>
 * <BR>
 * 
 * @version 1.0, 01/01/08
 * 
 * @author 湯陽光
 * 
 */
public class Controller extends KeyAdapter implements SnakeListener {

	/* 地形 */
	private Ground ground;

	/* 蛇 */
	private Snake snake;

	/* 食物 */
	private Food food;

	/* 顯示 */
	private GamePanel gamePanel;

	/* 提示信息 */
	private JLabel gameInfoLabel;

	private boolean playing;

	private int map;

	/* 控制器監聽器 */
	private Set<GameListener> listeners = new HashSet<GameListener>();

	/**
	 * 處理按鍵事件<BR>
	 * 接受按鍵, 根據按鍵不同, 發出不同的指令<BR>
	 * UP: 改變蛇的移動方向為向上<BR>
	 * DOWN: 改變蛇的移動方向為向下<BR>
	 * LEFT: 改變蛇的移動方向為向左 <BR>
	 * RIGHT: 改變蛇的移動方向為向右<BR>
	 * SPACE: 暫停/繼續<BR>
	 * PAGE UP: 加快蛇的移動速度<BR>
	 * PAGE DOWN: 減慢蛇的移動速度<BR>
	 * Y: 重新開始游戲
	 */
	public void keyPressed(KeyEvent e) {
		if (e.getKeyCode() != KeyEvent.VK_Y && !playing)
			return;
		// TODO Auto-generated method stub
		/* 根據按鍵不同, 讓蛇改變不同的方向 */
		switch (e.getKeyCode()) {

		/* 方向鍵 上 */
		case KeyEvent.VK_UP:
			if (snake.isPause()) {
				snake.changePause();
				for (GameListener l : listeners)
					l.gameContinue();
			}
			snake.changeDirection(Snake.UP);
			break;
		/* 方向鍵 下 */
		case KeyEvent.VK_DOWN:
			if (snake.isPause()) {
				snake.changePause();
				for (GameListener l : listeners)
					l.gameContinue();
			}
			snake.changeDirection(Snake.DOWN);
			break;
		/* 方向鍵 左 */
		case KeyEvent.VK_LEFT:
			if (snake.isPause()) {
				snake.changePause();
				for (GameListener l : listeners)
					l.gameContinue();
			}
			snake.changeDirection(Snake.LEFT);
			break;
		/* 方向鍵 右 */
		case KeyEvent.VK_RIGHT:
			if (snake.isPause()) {
				snake.changePause();
				for (GameListener l : listeners)
					l.gameContinue();
			}
			snake.changeDirection(Snake.RIGHT);
			break;
		/* 回車或空格 (暫停) */
		case KeyEvent.VK_ENTER:
		case KeyEvent.VK_SPACE:
			snake.changePause();
			/* === */
			for (GameListener l : listeners)
				if (snake.isPause())
					l.gamePause();
				else
					l.gameContinue();
			break;
		/* PAGE_UP 加速 */
		case KeyEvent.VK_PAGE_UP:
			snake.speedUp();
			break;
		/* PAGE_DOWN 減速 */
		case KeyEvent.VK_PAGE_DOWN:
			snake.speedDown();
			break;
		/* 字母鍵 Y (重新開始游戲) */
		case KeyEvent.VK_Y:
			if (!isPlaying())
				newGame();
			break;
		}

		/* 重新顯示 */
		if (gamePanel != null)
			gamePanel.redisplay(ground, snake, food);
		/* 更新提示 */
		if (gameInfoLabel != null)
			gameInfoLabel.setText(getNewInfo());
	}

	/**
	 * 處理Snake 觸發的 snakeMoved 事件<BR>
	 */
	public void snakeMoved() {

		/* 判斷是否吃到食物 */
		if (food != null && food.isSnakeEatFood(snake)) {
			/* 吃到食物后, 蛇增加身體, 再重新丟一個食物 */
			snake.eatFood();
			food.setLocation(ground == null ? food.getNew() : ground
					.getFreePoint());

		}/* 如果吃到食物, 就肯定不會吃到石頭 */
		else if (ground != null && ground.isSnakeEatRock(snake)) {
			/* 如果吃到的是石頭, 或吃到自己的身體, 就讓蛇死掉 */
			stopGame();
		}
		if (snake.isEatBody())
			stopGame();
		if (gamePanel != null)
			gamePanel.redisplay(ground, snake, food);
		/* 更新提示 */
		if (gameInfoLabel != null)
			gameInfoLabel.setText(getNewInfo());
	}

	/**
	 * 開始一個新游戲
	 */
	public void newGame() {

		if (ground != null) {
			switch (map) {
			case 2:
				ground.clear();
				ground.generateRocks2();
				break;
			default:
				ground.init();
				break;
			}
		}
		playing = true;

		snake.reNew();
		for (GameListener l : listeners)
			l.gameStart();
	}

	/**
	 * 結束游戲
	 */
	public void stopGame() {
		if (playing) {
			playing = false;
			snake.dead();
			for (GameListener l : listeners)
				l.gameOver();
		}
	}

	/**
	 * 暫停游戲
	 */
	public void pauseGame() {
		snake.setPause(true);
		for (GameListener l : listeners)
			l.gamePause();
	}

	/**
	 * 繼續游戲
	 */
	public void continueGame() {
		snake.setPause(false);
		for (GameListener l : listeners)
			l.gameContinue();
	}

	/**
	 * 接受Snake,Food,Ground 的構造器<BR>
	 * 
	 * @param snake
	 * @param food
	 * @param ground
	 */
	public Controller(Snake snake, Food food, Ground ground, GamePanel gamePanel) {
		this.snake = snake;
		this.food = food;
		this.ground = ground;
		this.gamePanel = gamePanel;
		/* 先丟一個食物 */
		if (ground != null && food != null)
			food.setLocation(ground.getFreePoint());
		/* 注冊監聽器 */
		this.snake.addSnakeListener(this);
	}

	/**
	 * 多接受一個顯示提示信息的JLabel
	 * 
	 * @param snake
	 * @param food
	 * @param ground
	 * @param gameInfoLabel
	 */
	public Controller(Snake snake, Food food, Ground ground,
			GamePanel gamePanel, JLabel gameInfoLabel) {

		this(snake, food, ground, gamePanel);
		this.setGameInfoLabel(gameInfoLabel);

		if (gameInfoLabel != null)
			gameInfoLabel.setText(getNewInfo());
	}

	/**
	 * 得到最新的提示信息
	 * 
	 * @return 蛇的最新信息
	 */
	public String getNewInfo() {
		if (!snake.isLive())
			return " ";// " 提示: 按 Y 開始新游戲";
		else
			return new StringBuffer().append("提示: ").append("速度 ").append(
					snake.getSpeed()).toString()
					+ " 毫秒/格";
	}

	/**
	 * 添加監聽器
	 * 
	 * @param l
	 */
	public synchronized void addGameListener(GameListener l) {
		if (l != null)
			this.listeners.add(l);
	}

	/**
	 * 移除監聽器
	 * 
	 * @param l
	 */
	public synchronized void removeGameListener(GameListener l) {
		if (l != null)
			this.listeners.remove(l);
	}

	/**
	 * 得到蛇的引用
	 * 
	 * @return
	 */
	public Snake getSnake() {
		return this.snake;
	}

	/**
	 * 得到食物的引用
	 * 
	 * @return
	 */
	public Food getFood() {
		return this.food;
	}

	/**
	 * 得到地形的引用
	 * 
	 * @return
	 */
	public Ground getGround() {
		return this.ground;
	}

	/**
	 * 處理蛇吃到食物后觸發的 snakeEatFood事件, 但什么也沒做<BR>
	 * 可以覆蓋這個方法增加功能, 例如, 增加記分功能
	 */
	public void snakeEatFood() {
		// TODO Auto-generated method stub
		System.out.println("吃到食物!");
	}

	public GamePanel getGamePanel() {
		return gamePanel;
	}

	/**
	 * 設置GamePanel
	 * 
	 * @param gamePanel
	 */
	public void setGamePanel(GamePanel gamePanel) {
		this.gamePanel = gamePanel;
	}

	public JLabel getGameInfoLabel() {
		return gameInfoLabel;
	}

	public void setGameInfoLabel(JLabel gameInfoLabel) {
		this.gameInfoLabel = gameInfoLabel;
		this.gameInfoLabel.setSize(Global.WIDTH * Global.CELL_WIDTH, 20);
		this.gameInfoLabel.setFont(new Font("宋體", Font.PLAIN, 12));
		gameInfoLabel.setText(this.getNewInfo());
	}

	public void setGround(Ground ground) {
		this.ground = ground;
	}

	public void setSnake(Snake snake) {
		this.snake = snake;
	}

	public void setFood(Food food) {
		this.food = food;
	}

	public int getMap() {
		return map;
	}

	public void setMap(int map) {
		this.map = map;
	}

	public boolean isPlaying() {
		return playing;
	}

	public void setPlaying(boolean playing) {
		this.playing = playing;
	}

	public boolean isPausingGame() {
		// TODO Auto-generated method stub
		return snake.isPause();
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕av一区二区三区高 | 色欲综合视频天天天| 欧美肥妇bbw| 中文字幕一区二区日韩精品绯色| 婷婷综合在线观看| a亚洲天堂av| 久久先锋影音av鲁色资源网| 一级做a爱片久久| 国产精品1区2区3区| 日韩欧美激情在线| 亚洲成精国产精品女| 91丨九色丨蝌蚪富婆spa| 日韩美女视频在线| 日产国产高清一区二区三区| bt欧美亚洲午夜电影天堂| 欧美一级二级在线观看| 亚洲色图制服丝袜| 从欧美一区二区三区| 日韩女优制服丝袜电影| 美女网站视频久久| 69久久夜色精品国产69蝌蚪网| 亚洲另类在线制服丝袜| 色狠狠综合天天综合综合| 中文字幕一区二区三中文字幕| 视频一区欧美日韩| www.av亚洲| 久久综合国产精品| 日韩激情一二三区| 欧美久久久影院| 午夜免费久久看| 欧美日韩激情一区| 亚洲欧美电影一区二区| 91免费小视频| 亚洲品质自拍视频| 色一区在线观看| 亚洲欧美日韩国产成人精品影院| youjizz国产精品| 亚洲卡通动漫在线| 国产在线精品一区二区不卡了| 欧美在线观看一区| 一二三四区精品视频| 一本色道久久综合狠狠躁的推荐| 日韩一区中文字幕| 91免费精品国自产拍在线不卡| |精品福利一区二区三区| 99视频有精品| 亚洲国产精品一区二区久久| 在线观看日韩av先锋影音电影院| 亚洲午夜成aⅴ人片| 欧美伦理电影网| 国产精一区二区三区| 国产精品久久久久久久久动漫 | 中文字幕日韩av资源站| 日本精品视频一区二区| 日韩av一区二区在线影视| 欧美偷拍一区二区| 国产一区视频在线看| 久久亚洲一区二区三区明星换脸| 丝袜亚洲另类欧美综合| 欧美精品一区二区久久婷婷| www.亚洲色图| 日韩av一区二区三区四区| 国产欧美视频在线观看| 一本到三区不卡视频| 国内欧美视频一区二区| 一区二区三区在线免费视频| 日韩免费在线观看| 成人性生交大片免费看视频在线| 亚洲成年人影院| 国产精品久久看| 精品欧美黑人一区二区三区| 处破女av一区二区| 日本 国产 欧美色综合| 亚洲图片欧美色图| 国产精品欧美久久久久无广告| 欧美精品色一区二区三区| 国产一区二区三区av电影| 亚洲超碰97人人做人人爱| 国产精品丝袜黑色高跟| 精品免费99久久| 欧美高清视频www夜色资源网| 99国产精品国产精品毛片| 成人小视频在线| 婷婷综合在线观看| 亚洲成人av一区二区三区| 亚洲色图.com| 中文字幕av在线一区二区三区| 日韩视频123| 91精品国产一区二区三区香蕉| 色先锋资源久久综合| 99久久99久久综合| jizzjizzjizz欧美| 美国十次了思思久久精品导航| 午夜精品久久久久久久蜜桃app| 亚洲精品一线二线三线| 欧美一级在线观看| 欧美日韩国产不卡| 丁香一区二区三区| 丰满亚洲少妇av| 成人av资源在线观看| 国产精品一区二区你懂的| 国产精品一区免费视频| 美女视频网站黄色亚洲| 久久精品二区亚洲w码| 午夜精品福利一区二区三区av| 一区二区不卡在线播放| 午夜天堂影视香蕉久久| 日本不卡的三区四区五区| 麻豆一区二区三区| 丁香六月综合激情| 不卡的av网站| 91在线播放网址| 在线成人高清不卡| 精品国产乱码久久久久久图片 | 在线播放中文一区| 欧美日韩视频一区二区| 精品国产制服丝袜高跟| 国产精品入口麻豆九色| 亚洲一二三级电影| 日韩电影在线一区| 大胆亚洲人体视频| 欧美日本在线播放| 中文字幕精品一区二区三区精品| 亚洲人xxxx| 国产aⅴ精品一区二区三区色成熟| 91久久一区二区| xfplay精品久久| 亚洲综合色自拍一区| 蜜臀av性久久久久av蜜臀妖精| 波多野结衣亚洲| 日韩一区国产二区欧美三区| 夜夜嗨av一区二区三区四季av| 美美哒免费高清在线观看视频一区二区| 久久国产精品99久久人人澡| 午夜亚洲福利老司机| 成人综合婷婷国产精品久久蜜臀| 欧美理论片在线| 亚洲男人电影天堂| 99精品久久只有精品| 国产日韩三级在线| 精品一区二区三区不卡| 欧美日韩亚洲另类| 亚洲综合一区在线| 国产精品综合视频| 精品国产91乱码一区二区三区 | 国产精品人成在线观看免费 | 欧美日韩国产三级| 中文字幕一区二区三区在线不卡 | 日韩一区二区在线免费观看| 午夜免费久久看| 日韩一区二区影院| 久久国产三级精品| 欧美久久久久久蜜桃| 午夜欧美大尺度福利影院在线看| 欧美亚洲综合色| 日本最新不卡在线| 欧美大白屁股肥臀xxxxxx| 奇米精品一区二区三区在线观看一 | 亚洲成年人网站在线观看| 制服丝袜日韩国产| 精品一二三四区| 国产精品免费av| 成人综合在线网站| 亚洲欧美区自拍先锋| 欧美吻胸吃奶大尺度电影| 亚洲综合色自拍一区| 日韩一区二区三区在线视频| 国产成人精品一区二区三区四区| 91国模大尺度私拍在线视频| 亚洲一区二区视频在线观看| 欧美一区二区在线观看| 国产精品一卡二卡| 亚洲精品欧美专区| 精品久久久久久久久久久久久久久| 国产福利视频一区二区三区| 亚洲免费av网站| 欧美大尺度电影在线| 91免费看片在线观看| 久久精品99国产国产精| 亚洲综合无码一区二区| 精品国精品自拍自在线| 99久免费精品视频在线观看| 亚洲一区二区三区美女| 欧美成人三级电影在线| 在线观看免费亚洲| 美女网站一区二区| 爽爽淫人综合网网站| 亚洲国产精品av| 欧美mv和日韩mv国产网站| 97se亚洲国产综合自在线观| 精品在线一区二区| 亚洲chinese男男1069| 欧美国产激情一区二区三区蜜月| 91精品国产高清一区二区三区| 91亚洲男人天堂| 国产精品一区二区久激情瑜伽| 婷婷开心激情综合| 亚洲午夜免费视频| 亚洲免费观看高清完整版在线观看 | 亚洲欧洲av在线|