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

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

?? game.java

?? a java game code for java
?? JAVA
字號:

/**
 * Title:        吃豆子<p>
 * Description:  游戲入口<p>
 * Copyright:    Copyright (c) Nothing<p>
 * Company:      Raindrop<p>
 * @author Nothing
 * @version 1.0
 */
package eatbean;

import eatbean.util.DataTool;
import eatbean.conf.SysParam;
import eatbean.event.*;
//
import java.awt.*;
import java.awt.event.*;

public class Game extends Panel {
	private static final int MAP_X = 1;
	private static final int MAP_Y = 1;
	private Mediator mediator = null;
	private Station station = new Station();
	private GameListener gameListener = new GameListenerImpl();
	private ScreenListenerImpl screenListener = new ScreenListenerImpl();
	private ScreenListenerImplHelp screenListenerHelp =
		    new ScreenListenerImplHelp();
	private ScreenListenerImplPause screenListenerPause =
		    new ScreenListenerImplPause();
	private ScreenListenerImplAllMisnDone screenListenerImplAllMisnDone =
		    new ScreenListenerImplAllMisnDone();
	private ScreenListenerImplGameOver screenListenerImplGameOver =
		    new ScreenListenerImplGameOver();
	//public Panel panel = new Panel(null);
	private int score = 0;
	private int life = 0;
	private boolean flgGameOver = true;

	public Game() {
		super(null);
		//this.setBackground(Color.red);
		this.setBounds(new Rectangle(1, 1, SysParam.GAME_SCREEN_WIDTH, SysParam.GAME_SCREEN_HEIGHT));
		//this.init();
    }
	/** 封裝游戲的大部分標準操作 */
	class Station {
		public final int MAX_STATION = 4;
		public final int MIN_STATION = 1;
		public final int LIFE = 4;
		private int stationNum = MIN_STATION - 1;
		private DataTool dataTool = new DataTool();
		//public boolean ready = false;
		/** 每一關的地圖文件 */
		private String[] mapPaths = {
							"map1.txt", //Demo數據
					        "map1.txt",
							"map2.txt",
							"map3.txt",
							"map4.txt",
						};
		/** 每一關的精靈個數 */
		private int[] spriteNum = {
							1, //demo數據
							2,
							2,
							3,
							4,
					    };
		public int getStationNum() { return stationNum; }
		public void firstStation() throws Exception {
			life = LIFE;
			score = 0;
			stationNum = MIN_STATION;
			mediator.removeScreenListener();
			mediator.addScreenListener(screenListener);
			initStation(stationNum);
			life--;
			pause();
		}
		public boolean nextStation() throws Exception {
			if(stationNum >= MAX_STATION) return false;
			stationNum++;
			initStation(stationNum);
			pause();
			return true;
		}
		private void initStation(int sn) throws Exception {
			mediator.killAll();
			mediator.createMap(dataTool.getMapData(mapPaths[sn]), MAP_X, MAP_Y);
			mediator.createFairy();
			for(int i = 0; i < spriteNum[sn]; i++)
				mediator.createSprite();
		}
		public void demo() throws Exception {
			onlyShowHelp();
		    mediator.killAll();
			mediator.createMap(dataTool.getMapData(mapPaths[0]), MAP_X, MAP_Y);
			for(int i = 0; i < spriteNum[0]; i++)
				mediator.createSprite();
			mediator.setPaused(false);
		}
		public void continuePlay() {
			//pause();
			mediator.resetAllActor();
			mediator.createFairy();
			for(int i = 0; i < spriteNum[stationNum]; i++)
				mediator.createSprite();
			life--;
		}
		public void gameOver() {
		    //Game Over
			mediator.setPaused(true);
			mediator.removeScreenListener();
			mediator.addScreenListener(screenListenerImplGameOver);
			flgGameOver = true;
		}
		public void pause() {
			if(flgGameOver) return;
			if(mediator.getPaused()) {
				ScreenListener tmp = mediator.removeScreenListener();
				if(tmp == null || tmp instanceof ScreenListenerImpl)
					mediator.addScreenListener(screenListenerPause);
				else
					mediator.addScreenListener(tmp);
			} else {
				mediator.setPaused(true);
				mediator.removeScreenListener();
				mediator.addScreenListener(screenListenerPause);
			}
		}
		public void unPause() {
		    if(flgGameOver || !mediator.getPaused()) return;
			mediator.removeScreenListener();
			mediator.repaintBg();
			mediator.addScreenListener(screenListener);
			mediator.setPaused(false);
		}
		public void pauseAndShowHelp() {
			if(flgGameOver) return;
			mediator.setPaused(true);
			mediator.removeScreenListener();
			mediator.repaintBg();
			mediator.addScreenListener(screenListenerHelp);
		}
		public void onlyShowHelp() {
			mediator.removeScreenListener();
			mediator.repaintBg();
			mediator.addScreenListener(screenListenerHelp);
		}
		public void allMissionDone() {
			mediator.setPaused(true);
			mediator.removeScreenListener();
			mediator.addScreenListener(screenListenerImplAllMisnDone);
			flgGameOver = true;
		}
	}
	public void init() {
		System.out.println("Game.init");
		mediator = new Mediator();
		mediator.createOffScreen(this);
		mediator.addGameListener(gameListener);
		try {
			station.demo();
		} catch(Exception ex) {
			Debug.println(ex.toString());
			ex.printStackTrace();
			return;
		}
		toolsInit();
	}
	private void start() {
		if(!flgGameOver) return;
		flgGameOver = false;
		try {
			station.firstStation();
		} catch(Exception ex) {
			Debug.println(ex.toString());
			ex.printStackTrace();
			return;
		}
	}
	/** 結束游戲,回收資源 */
	public void exit() {
	    mediator.setPaused(true);
		mediator.removeGameListener();
		mediator.removeScreenListener();
		mediator.killAll();
	}
	/** 空方法,阻止系統重畫 */
	public void paint(Graphics g) {
	}
	/** 空方法,阻止系統清除背景 */
	public void update(Graphics g) {
	}
	/** 響應鍵盤事件 */
	private void toolsInit() {
        this.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(KeyEvent e) {
				switch(e.getKeyCode()) {
					case KeyEvent.VK_LEFT :
						    station.unPause();
							mediator.fairySetNextDirection(Fairy.DIR_WEST);
							break;
					case KeyEvent.VK_RIGHT :
						    station.unPause();
							mediator.fairySetNextDirection(Fairy.DIR_EAST);
							break;
					case KeyEvent.VK_UP :
						    station.unPause();
							mediator.fairySetNextDirection(Fairy.DIR_NORTH);
							break;
					case KeyEvent.VK_DOWN :
						    station.unPause();
							mediator.fairySetNextDirection(Fairy.DIR_SOUTH);
							break;
					case KeyEvent.VK_S:
							start();
							break;
					case KeyEvent.VK_P:
							station.pause();
							break;
					case KeyEvent.VK_H:
						    station.pauseAndShowHelp();
						    break;
					case KeyEvent.VK_N:
						    //for debug
						    System.out.println("VK_N");
						    try {
						        station.nextStation();
							} catch(Exception ex) { ex.printStackTrace(); }
							break;
					default :
				}
            }
			public void keyReleased(KeyEvent e) {
				switch(e.getKeyCode()) {
					case KeyEvent.VK_LEFT :
					case KeyEvent.VK_RIGHT :
					case KeyEvent.VK_UP :
					case KeyEvent.VK_DOWN :
							mediator.fairyResetNextDirection();
							break;
					default :
				}
			}
        });
		//this.paintAll(this.getGraphics());
	}
	/** 游戲事件監聽者 */
	class GameListenerImpl extends GameListener {
		private boolean hasLifeInc = false;
		public void objectEat(GameEvent e) {
			//System.out.println("eatbean");
			Object source = e.getSource();
			if(source == null) return;
			if(source instanceof Room)
				//score += ((Room)source).POINT;
				score += 10;
			if((score >= SysParam.SCORE_TO_ADD_LIFE) && !hasLifeInc) {
				mediator.beep();
				life++;  //獎勵,生命值加1
				hasLifeInc = true;
			}
		}
		public void actorEat(GameEvent e) {
			Object source = e.getSource();
			if(source == null) return;
			if(source instanceof Fairy) {
			    if(Debug.ON) Debug.println("objectEat() Fairy被殺");
				if(life > 0) {
					station.continuePlay();
					//mediator.setPaused(false);
				} else {
					//Game Over
					if(Debug.ON) Debug.println("Game Over");
					try {
					    //station.demo();
						station.gameOver();
					} catch(Exception ex) {}
				}
			} else if(source instanceof Sprite) {
			    if(Debug.ON) Debug.println("objectEat() Sprite被殺");
			}
		}
		public void stationDone(GameEvent e) {
			//Mission Done
			try {
			    if(!station.nextStation()) {
				    //All Mission Done
					station.allMissionDone();
				}
			} catch(Exception ex) {};
		}
	}
	/** 標準屏幕事件監聽者,以實時更新顯示分數/生命值等信息 */
	class ScreenListenerImpl implements ScreenListener {
		Color c = Color.white;
		Font font = new Font("宋體", Font.BOLD, 12);
		public void update(ScreenEvent se) {
			OffScreen offScr = (OffScreen)se.getSource();
			int h = mediator.getMapHeight();
			if(offScr != null) {
				updateGeneralInfo(offScr, h);
			}
		}
	}
	/** 顯示幫助信息 */
	class ScreenListenerImplHelp implements ScreenListener {
		Color c = Color.yellow;
		Font font = new Font("宋體", Font.BOLD, 13);
		public void update(ScreenEvent se) {
			OffScreen offScr = (OffScreen)se.getSource();
			int h = mediator.getMapHeight();
			if(offScr != null) {
				offScr.setColor(c);
				offScr.setFont(font);
				int baseX = 130, baseY = 80;
				offScr.drawString("吃豆子Ver1.0", baseX, baseY);
				offScr.drawString("\"s\"-開始游戲", baseX-10, baseY=baseY+20);
				offScr.drawString("\"p\"-暫停游戲", baseX-10, baseY=baseY+20);
				offScr.drawString("\"方向鍵\"-返回游戲,控制精靈", baseX-10, baseY=baseY+20);
				baseX = 80; baseY = 220;
				offScr.setColor(Color.white);
				offScr.drawString("---------------------------------", 50, baseY);
				offScr.drawString("程序: \"nothing\"", baseX, baseY=baseY+15);
				offScr.drawString("美工: \"olive\"", baseX, baseY=baseY+15);
				offScr.drawString("Raindrop Studio 2002.3", baseX+20, baseY=baseY+15);
				offScr.drawString("Email: chinaren_gc@chinaren.com", baseX+20, baseY=baseY+15);
				updateGeneralInfo(offScr, h);
			}
		}
	}
	/** 顯示暫停信息 */
	class ScreenListenerImplPause implements ScreenListener {
		Color c = Color.yellow;
		Font font = new Font("宋體", Font.BOLD, 14);
		public void update(ScreenEvent se) {
			OffScreen offScr = (OffScreen)se.getSource();
			int h = mediator.getMapHeight();
			if(offScr != null) {
				offScr.setColor(c);
				offScr.setFont(font);
				offScr.drawString("第" + station.stationNum + "關", 140, 100);
				offScr.drawString("暫     停", 130, 120);
				offScr.drawString("\"方向鍵\"返回游戲", 130, 140);
				updateGeneralInfo(offScr, h);
			}
		}
	}
	/** 通關時顯示相關信息 */
	class ScreenListenerImplAllMisnDone implements ScreenListener {
		Color c = Color.yellow;
		Font font = new Font("宋體", Font.BOLD, 16);
		public void update(ScreenEvent se) {
			OffScreen offScr = (OffScreen)se.getSource();
			int h = mediator.getMapHeight();
			if(offScr != null) {
				offScr.setColor(c);
				offScr.setFont(font);
				offScr.drawString("大俠您通關了!", 100, 120);
				offScr.drawString("簽個名吧:)", 120, 160);
				updateGeneralInfo(offScr, h);
			}
		}
	}
	/** GameOver時顯示相關信息 */
	class ScreenListenerImplGameOver implements ScreenListener {
		Color c = Color.yellow;
		Font font = new Font("宋體", Font.BOLD, 20);
		public void update(ScreenEvent se) {
			OffScreen offScr = (OffScreen)se.getSource();
			int h = mediator.getMapHeight();
			if(offScr != null) {
				offScr.setColor(c);
				offScr.setFont(font);
				offScr.drawString("Game Over", 130, 120);
				Font font = new Font("宋體", Font.BOLD, 14);
				offScr.setFont(font);
				offScr.drawString("\"s\"-重玩", 140, 160);
				updateGeneralInfo(offScr, h);
			}
		}
	}
	private void updateGeneralInfo(OffScreen offScr, int h) {
		offScr.clearRect(0, h+2,
							offScr.getWidth(), offScr.getHeight() - h);

		h = h + 20;
		offScr.setColor(Color.white);
		offScr.setFont(new Font("宋體", Font.BOLD, 12));
		offScr.drawString("生命: " + Integer.toString(life), 10, h);
		offScr.drawString("得分: " + Integer.toString(score), 120, h);
		offScr.drawString("關卡: " + Integer.toString(station.getStationNum()), 280, h);
		offScr.drawString("\"h\"-幫助  [Raindrop Studio]", 140, h+14);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av激情成人网| 69成人精品免费视频| 欧美性受极品xxxx喷水| 日韩欧美123| 亚洲伦在线观看| 国产一区二区三区免费在线观看| 色94色欧美sute亚洲13| 久久精品视频免费| 日韩在线播放一区二区| 91在线丨porny丨国产| 精品奇米国产一区二区三区| 亚洲一区二区三区在线看| 国产精品69毛片高清亚洲| 欧美美女bb生活片| 亚洲精品一二三| 岛国av在线一区| 精品日韩99亚洲| 日韩二区三区在线观看| 欧美三级中文字幕| 亚洲精品高清视频在线观看| 国产成人精品综合在线观看| 欧美一区二区三区四区高清| 亚洲午夜久久久| 91久久国产最好的精华液| 中文字幕在线不卡一区 | 精品女同一区二区| 亚洲成人av中文| 欧美特级限制片免费在线观看| 中文字幕亚洲视频| 91在线国产观看| 亚洲免费看黄网站| 色婷婷久久久久swag精品| 国产精品每日更新| 99精品视频中文字幕| 日韩一区欧美一区| 色哟哟日韩精品| 亚洲综合色自拍一区| 欧美性猛交xxxx黑人交| 亚洲一级二级在线| 欧美二区三区的天堂| 久久国产综合精品| 久久精品亚洲乱码伦伦中文| 丁香天五香天堂综合| 国产精品国产精品国产专区不片| 成人app网站| 一区二区三区不卡在线观看| 欧美亚洲高清一区| 香蕉久久一区二区不卡无毒影院 | 精品免费99久久| 国产九色精品成人porny| 中文字幕免费在线观看视频一区| 国产99精品在线观看| 中文字幕一区二区三区在线观看| 色欧美片视频在线观看| 日韩国产欧美在线观看| ww亚洲ww在线观看国产| 不卡影院免费观看| 五月天亚洲婷婷| 精品国产凹凸成av人导航| 成人性生交大片| 亚洲一区二区三区影院| 亚洲精品一区二区三区蜜桃下载| 成熟亚洲日本毛茸茸凸凹| 亚洲午夜一区二区三区| 精品国产一区二区三区久久久蜜月| 国产精品99久久久久| 亚洲综合在线视频| 日韩精品一区二区三区在线 | 乱中年女人伦av一区二区| 国产欧美日韩三级| 欧美日韩一本到| 国产91高潮流白浆在线麻豆 | 国产精品乱人伦中文| 欧美日韩黄色一区二区| 国产传媒日韩欧美成人| 亚洲国产精品天堂| 国产欧美一区二区在线| 欧美乱熟臀69xxxxxx| 国产精品中文字幕日韩精品| 亚洲一区二区三区四区五区中文 | 色婷婷精品大在线视频| 久久精品免费看| 亚洲伊人色欲综合网| 欧美国产精品一区二区| 欧美一区二区三区在| 日本韩国精品在线| 成人激情图片网| 久国产精品韩国三级视频| 一区二区高清视频在线观看| 国产无人区一区二区三区| 7777精品伊人久久久大香线蕉的 | 精品一二三四区| 午夜精品久久久久| 亚洲日本电影在线| 日本一区二区三区电影| 日韩限制级电影在线观看| 色88888久久久久久影院按摩| 国产99久久久精品| 国产伦精品一区二区三区在线观看| 亚洲高清在线精品| 一区二区三区久久久| 成人欧美一区二区三区黑人麻豆| 久久久久久久久伊人| 欧美本精品男人aⅴ天堂| 欧美精品在线一区二区三区| 色噜噜狠狠成人中文综合| 97se亚洲国产综合在线| 丁香网亚洲国际| 成人性生交大合| 成人白浆超碰人人人人| 懂色av一区二区在线播放| 国产精品18久久久久久久网站| 免费久久精品视频| 久久99精品久久久久婷婷| 精品一区二区日韩| 美女高潮久久久| 精品综合久久久久久8888| 精品在线播放午夜| 国内精品国产三级国产a久久| 国内久久婷婷综合| 国产剧情一区二区三区| 国产成人午夜片在线观看高清观看| 精品一区二区三区在线播放视频| 久久精品久久精品| 国产成人综合网站| 成人app在线观看| 在线国产电影不卡| 欧美日韩精品欧美日韩精品一| 欧美色图一区二区三区| 欧美日韩在线三级| 欧美大黄免费观看| 久久久精品天堂| 亚洲日本免费电影| 午夜精品福利久久久| 日本va欧美va精品| 国产精品一区久久久久| 99久久er热在这里只有精品15| a美女胸又www黄视频久久| 欧美中文字幕久久| 欧美大片在线观看| 日韩一区日韩二区| 日韩**一区毛片| 国产suv精品一区二区883| 91啪亚洲精品| 日韩一区二区三区视频| 国产午夜一区二区三区| 亚洲裸体在线观看| 美女视频黄a大片欧美| 99久久免费国产| 日韩一区二区三区四区 | 欧美成人一区二区| 国产精品久久久久毛片软件| 亚洲高清免费视频| 丁香婷婷综合色啪| 欧美日韩视频不卡| 国产视频一区二区在线观看| 亚洲国产精品一区二区久久| 国产一区二区三区免费在线观看 | 亚洲一区二区高清| 国产精品一级黄| 欧美日韩免费不卡视频一区二区三区| 日韩欧美一级二级| 亚洲精品欧美专区| 国产在线精品视频| 欧美日韩成人综合天天影院| 亚洲国产精品高清| 九色|91porny| 欧美日本一区二区三区四区| 中文字幕一区二区三区av| 韩国av一区二区| 欧美一区二区三区在线观看 | 欧美三级一区二区| 国产精品久久久久久福利一牛影视| 日本aⅴ精品一区二区三区| 97se亚洲国产综合自在线| 久久午夜国产精品| 美国三级日本三级久久99| 欧美日韩中文另类| 亚洲免费看黄网站| av在线播放不卡| 国产偷国产偷精品高清尤物| 日本美女视频一区二区| 欧美三级韩国三级日本一级| 日韩美女精品在线| 国产成人av福利| 日韩精品自拍偷拍| 日韩精品福利网| 欧美体内she精视频| 一区二区三区中文免费| 97久久久精品综合88久久| 久久免费国产精品 | 亚洲成av人片在线观看| 一道本成人在线| 中文字幕一区二区三| 成人va在线观看| 国产精品电影一区二区三区| 成人国产一区二区三区精品| 国产亚洲视频系列| 成人网在线播放| 国产精品伦理一区二区|