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

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

?? gamecanvas.java

?? 《MIDP手機游戲設計》是一本運用MIDP進行J2ME手機游戲編程的JAVA書籍
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/*
 * GameCanvas.java
 *
 * Copyright 2001 SkyArts. All Rights Reserved.
 */
import javax.microedition.lcdui.*;
import java.util.*;

/**
 * 游戲的描繪與操作所用的類
 *
 * @author  Hideki Yonekawa
 * @version 1.0
 */
class GameCanvas extends Canvas implements Runnable, CommandListener {
	/** 儲存橫向長度的變量  */
	private int					screenWidth;
	/** 儲存縱向長度的變量 */
	private int					screenHeight;

	/** 儲存SpaceShooter對象的變量 */
	private SpaceShooter		spaceShooter;

	/** 儲存使用在標題之圖像的變量 */
	private Image				titleImg;

	/** 儲存自機類別之對象的變量 */
	private MyShip			myShip			= new MyShip();

	/** 儲存自機飛彈類別之對象的數組變量 */
	private MyMissile[]		myMissiles		= new MyMissile[] {
		new MyMissile(),
		new MyMissile(),
		new MyMissile(),
		new MyMissile(),
		new MyMissile()
	};
	/** 儲存自機之飛彈發射數的變量 */
	private int			myMissileCount;

	/** 儲存了UFO類別之對象的數組變量 */
	private UFO[]			ufos           		= new UFO[] {
		new UFO(myShip),
		new UFO(myShip),
		new UFO(myShip),
		new UFO(myShip),
		new UFO(myShip),
		new UFO(myShip),
		new UFO(myShip)
	};
	/** 儲存了UFO之使用數的變量 */
	private int			ufoCount;

	/** 儲存了UFO之飛彈類別對象的數組變量 */
	private UFOMissile[]		ufoMissiles		= new UFOMissile[] {
		new UFOMissile(),
		new UFOMissile(),
		new UFOMissile(),
		new UFOMissile(),
		new UFOMissile(),
		new UFOMissile(),
		new UFOMissile(),
		new UFOMissile(),
		new UFOMissile(),
		new UFOMissile()
	};
	/** 儲存了UFO之飛彈發射數的變量 */
	private int			ufoMissileCount;

	/** 用來儲存描繪的間隔(INTERVAL)的常量 */
	private static final long	DRAW_INTERVAL		= 100;

	/** 顯示暫停狀態的標志 */
	private	boolean			isPaused;

	/** 代表游戲循環停止的變量 */
	private boolean			isStopped;

	/** 儲存了操作UFO的動態時所使用之計數的變量 */
	private int			tickCount4UFO;

	/** 用來改變UFO的出現之Random變量 */
	private Random			random				= new Random();

	/** Start指令變量 */
	private Command				startCmd		= new Command("Start", Command.SCREEN, 5);
	/** Exit指令變量 */
	private Command				exitCmd			= new Command("Exit", Command.SCREEN, 1);
	/** Pause指令變量 */
	private Command				pauseCmd		= new Command("Pause", Command.SCREEN, 5);
	/** Resume指令變量 */
	private Command				resumeCmd		= new Command("Resume", Command.SCREEN, 5);
	/** Quit指令變量 */
	private Command				quitCmd			= new Command("Quit", Command.SCREEN, 1);

	/** 儲存分數的變量 */
	private long				score;

	/** 儲存最高分數的變量 */
	private long				highScore		= 0;

	/** 用來儲存默認分數的常量 */
	private static final long	        DEFAULT_SCORE		= 100;

	/** 儲存生命點數的變量 */
	private int				lives;

	/** 用來儲存默認之生命點數的常量 */
	private static final int	DEFAULT_LIVES		= 3;

	/** 儲存默認字體的變量 */
	private Font				defFont			= Font.getDefaultFont();

	/** 儲存分數顯示部分之高度的常量(設定到默認字體高度) */
	private static final int	SCORE_AREA		 = Font.getDefaultFont().getHeight();

	/** 代表標題顯示狀態的常量 */
	private static final short	TITLE			= 0;
	/** 代表游戲開始顯示狀態的常量 */
	private static final short	GAME_START		= 1;
	/** 代表游戲中顯示狀態的常量 */
	private static final short	GAME_PLAYING		= 2;
	/** 代表游戲結束顯示狀態的常量 */
	private static final short	GAME_END		= 5;
	/** 儲存現在顯示狀態的變量 */
	private short			gameState;

	/** 構造函數 */
	GameCanvas(SpaceShooter spaceShooter) {
		this.spaceShooter = spaceShooter;
		//取得畫面的可描繪范圍
		screenWidth = getWidth();
		screenHeight = getHeight();

		//取得標題圖像
		try {
			titleImg = Image.createImage("/title.png");
		}catch(Exception e) {}

		//登錄指令監聽
		setCommandListener(this);

		//將游戲的狀態變成顯示標題
		gameState = TITLE;
	}

	/** 進行游戲之初始化的方法 */
	private void doGameInit() {
		//清除分數
		score = 0;
		//將自機的位置設定于中央
		myShip.setX((screenWidth - myShip.getWidth()) /2);
		myShip.setY(screenHeight - myShip.getHeight());
		myShip.setHit(false);//清除Hit狀態
		//將生命點數設為默認值
		lives = DEFAULT_LIVES;

		//清除自機飛彈
		for(int i=0; i < myMissiles.length; i++) {
			myMissiles[i].setAlive(false);
		}
		//清除自機飛彈數
		myMissileCount = 0;

		//清除UFO
		for(int i=0; i < ufos.length; i++) {
			ufos[i].setAlive(false);
		}
		//清除UFO數
		ufoCount = 0;

		//清除UFO飛彈
		for(int i=0; i < ufoMissiles.length; i++) {
			ufoMissiles[i].setAlive(false);
		}
		//清除UFO飛彈數
		ufoMissileCount = 0;

		//清除要讓UFO出現時所使用的Tick計數
		tickCount4UFO = 0;

		//清除游戲循環停止標志
		isStopped = false;
		//清除暫停標志
		isPaused = false;
	}

	/** MIDlet的startApp()被調用出來時所調用的方法 */
	void doStartApp() {
		//根據現在的狀態來操作運作
		switch(gameState) {
			case TITLE:		//顯示標題時
				doTitle();
			break;

			case GAME_START:	//游戲開始時
			case GAME_PLAYING:	//游戲中
				//進行暫停
				isPaused = true;
				//停止游戲循環
				isStopped = true;

				//以防萬一刪除關卡中的指令
				removeCommand(pauseCmd);
				removeCommand(resumeCmd);
				//新增Resume指令
				addCommand(resumeCmd);
			break;

			default:		//上述情形以外時
				//解除暫停
				isPaused = false;
			break;
		}
	}

	/** MIDlet的pauseApp()方法被調用出來時所調用的方法 */
	void doPauseApp() {
		switch(gameState) {
			case TITLE:				//顯示標題時
			break;

			default:				//上述情形以外時
				//暫停
				isPaused = true;
				//停止游戲循環
				isStopped = true;
			break;
		}
	}

	/** 進行標題顯示的方法 */
	private void doTitle() {
		//將游戲的狀態設為顯示標題
		gameState = TITLE;

		//以防萬一先將關卡中的指令刪除
		removeCommand(pauseCmd);
		removeCommand(resumeCmd);
		removeCommand(quitCmd);

		//顯示標題畫面
		repaint();
		//新增指令
		addCommand(exitCmd);
		addCommand(startCmd);
	}

	/** 啟動描繪線程的方法 */
	private void doThreadStart() {
		new Thread(this).start();
	}

	/** 結束游戲的方法 */
	private void doGameStop() {
		//停止游戲循環
		isStopped = true;
		//設定最高分數
		setHighScore(score);
	}

	/** 進行暫停或是重新開始的方法 */
	private void doPauseOrResume() {
		if(isPaused) {
		//暫停時
			//重新開始
			isPaused = false;
			isStopped = false;
			doThreadStart();
		}else {
		//不是暫停時
			//暫停
			isPaused = true;
			doGameStop();
		}// end if
		repaint();
	}

	/**
	 * 進行描繪的方法,通常不會從自類別來調用
	 * @param	g	Graphics對象
	 */
	protected void paint(Graphics g) {
		//以黑色清除背景
		g.setColor(0x00000000);
		g.fillRect(0, 0, screenWidth, screenHeight);

		g.setFont(defFont);

		String drawSt;
		int drawX, drawY, stWidth;
		int stHeight = defFont.getHeight();

		//根據游戲狀態來改變描繪內容
		switch(gameState) {
			case TITLE://顯示標題時
				//描繪標題圖像
				drawX = (screenWidth - titleImg.getWidth()) /2;
				g.drawImage(titleImg, drawX, 0, Graphics.TOP|Graphics.LEFT);

				//顯示最高分數
				g.setColor(0x00FFFFFF);
				g.setFont(defFont);
				drawSt = "High Score";
				drawX = (screenWidth - defFont.stringWidth(drawSt)) / 2;
				drawY = titleImg.getHeight() -5;
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
				drawX = drawX + defFont.stringWidth(drawSt) - defFont.stringWidth(String.valueOf(highScore));
				drawY = drawY + stHeight;
				g.drawString(String.valueOf(highScore), drawX, drawY, Graphics.TOP|Graphics.LEFT);

				//顯示著作權
				drawSt = "Copyright 2001";
				drawX = (screenWidth - defFont.stringWidth(drawSt)) / 2;
				drawY = getHeight() - stHeight *2;
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);

				drawSt = "SkyArts.com";
				drawX = (screenWidth - defFont.stringWidth(drawSt)) / 2;
				drawY = drawY + stHeight;
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
			return;

			case GAME_START://游戲開始時
				//描繪游戲開始畫面
				g.setColor(0x00FFFFFF);
				drawSt = "Ready go !";
				stWidth = defFont.stringWidth(drawSt);
				drawX = (screenWidth - stWidth) / 2;
				drawY = (screenHeight - stHeight) / 2;
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
			return;

			case GAME_PLAYING:
			case GAME_END:
			//游戲中或是游戲結束時
				g.setColor(0x00FFFFFF);
				//將分數描繪到左邊
				drawSt = "S:" + String.valueOf(score);
				g.drawString(drawSt, 0, 0, Graphics.TOP|Graphics.LEFT);

				//將生命點數描繪到右邊
				drawSt = "L:" + String.valueOf(lives);
				g.drawString(drawSt, screenWidth- defFont.stringWidth(drawSt), 0, Graphics.TOP|Graphics.LEFT);

				//描繪自機
				myShip.doDraw(g);

				//描繪UFO
				for(int i=0; i < ufos.length; i++) {
					ufos[i].doDraw(g);
				}

				//描繪自機飛彈
				for(int i=0; i < myMissiles.length; i++) {
					myMissiles[i].doDraw(g);
				}

				//描繪UFO飛彈
				for(int i=0; i < ufoMissiles.length; i++) {
					ufoMissiles[i].doDraw(g);
				}

				//在暫停時等畫面中顯示文本
				switch(gameState) {
					case GAME_PLAYING://游戲中
						if(isPaused) {
						//顯示代表暫停的字符串
							drawSt = "Pause";
						}else {
						//不是暫停時就return
							return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av网站免费观看| 久久婷婷国产综合国色天香 | 午夜精品久久久久久| 久久99精品国产91久久来源| av电影在线观看完整版一区二区| 欧美日本高清视频在线观看| 国产精品另类一区| 捆绑调教一区二区三区| 欧美体内she精视频| 中文字幕一区二区三区在线观看| 青青草成人在线观看| 在线观看日韩精品| 欧美国产一区视频在线观看| 久久精品理论片| 91麻豆精品国产91久久久久久| 亚洲手机成人高清视频| 国产精品一卡二卡在线观看| 欧美成人在线直播| 日韩国产精品久久久久久亚洲| 日本韩国欧美一区| 成人免费在线播放视频| 懂色av一区二区夜夜嗨| 久久久777精品电影网影网 | 欧美片网站yy| 亚洲伊人伊色伊影伊综合网| 91麻豆国产精品久久| 国产精品久久一卡二卡| caoporn国产一区二区| 国产欧美日韩麻豆91| 久久99精品久久久久婷婷| 欧美一区二区三区视频在线观看| 亚洲国产你懂的| 欧美欧美欧美欧美首页| 日韩国产欧美一区二区三区| 91麻豆精品国产91久久久使用方法| 午夜精品爽啪视频| 制服丝袜在线91| 美女网站在线免费欧美精品| 精品国偷自产国产一区| 国产精品影视在线观看| 国产亚洲婷婷免费| 成人av在线观| 一个色在线综合| 欧美一区二区在线免费观看| 精品一区二区在线免费观看| 久久精品亚洲精品国产欧美kt∨| 国产激情偷乱视频一区二区三区 | 日韩毛片视频在线看| 色先锋aa成人| 视频一区视频二区中文| 日韩精品一区国产麻豆| 国产毛片一区二区| 中文字幕亚洲欧美在线不卡| 在线免费观看日本欧美| 蓝色福利精品导航| 国产精品卡一卡二卡三| 欧美日韩精品一区二区| 精品一二三四区| 国产精品毛片a∨一区二区三区| 91同城在线观看| 天堂在线亚洲视频| 国产亚洲va综合人人澡精品 | 亚洲精品成人悠悠色影视| 欧美一区二区三区在线观看视频 | av在线不卡观看免费观看| 亚洲综合久久av| 日韩精品中文字幕一区二区三区| 国v精品久久久网| 亚洲一区二区三区爽爽爽爽爽| 日韩一区和二区| www.色精品| 久久精品国产澳门| 亚洲久草在线视频| 精品91自产拍在线观看一区| 91麻豆免费看| 国产一区二区精品久久| 亚洲国产精品尤物yw在线观看| 26uuu色噜噜精品一区| 在线观看91视频| 九九**精品视频免费播放| 亚洲欧洲制服丝袜| 久久一区二区三区四区| 在线观看免费一区| 国产91精品欧美| 蜜桃视频一区二区三区在线观看| 亚洲视频资源在线| 久久精子c满五个校花| 7799精品视频| 91精品91久久久中77777| 国产99久久久国产精品免费看| 三级欧美韩日大片在线看| 亚洲欧美日韩综合aⅴ视频| 久久久久9999亚洲精品| 91精品国产丝袜白色高跟鞋| 在线一区二区视频| 成人av手机在线观看| 极品少妇xxxx精品少妇| 日韩福利电影在线| 亚洲国产日韩av| 亚洲久本草在线中文字幕| 国产精品视频线看| 久久精品夜夜夜夜久久| 精品久久人人做人人爰| 日韩视频123| 91精品欧美福利在线观看| 欧美偷拍一区二区| 欧美在线制服丝袜| 色94色欧美sute亚洲线路二| 91丨porny丨国产| 大尺度一区二区| 国产成人亚洲综合色影视| 韩日精品视频一区| 激情文学综合网| 久久精品久久99精品久久| 六月丁香婷婷色狠狠久久| 奇米精品一区二区三区在线观看| 五月婷婷激情综合网| 婷婷开心久久网| 日韩国产欧美视频| 奇米影视一区二区三区| 精品亚洲成a人| 国产精品一品二品| 成人午夜伦理影院| 91亚洲国产成人精品一区二区三| 91同城在线观看| 在线影视一区二区三区| 欧美日韩一级片网站| 日韩一卡二卡三卡国产欧美| 日韩精品中文字幕在线不卡尤物| 久久久午夜精品理论片中文字幕| 久久久久久免费网| 欧美激情一区三区| 一区二区三区产品免费精品久久75 | 国产精品久久久久久久久果冻传媒 | 不卡的av在线播放| 色狠狠桃花综合| 555www色欧美视频| 精品国产乱码久久久久久蜜臀 | 国产 欧美在线| 色婷婷久久久综合中文字幕| 欧美久久久久久久久久| 日韩精品一区二区三区视频播放 | 中文字幕一区在线观看| 亚洲欧美日韩人成在线播放| 丝袜亚洲另类欧美综合| 国产精品一区在线观看你懂的| www.久久久久久久久| 欧美日韩免费观看一区三区| 久久综合九色综合97_久久久| 国产精品久久久久久久第一福利| 亚洲高清一区二区三区| 国产馆精品极品| 欧美日本国产视频| 国产精品系列在线| 日本亚洲欧美天堂免费| www.亚洲激情.com| 日韩一区二区三区在线观看| 国产精品妹子av| 日韩中文字幕亚洲一区二区va在线 | 天天操天天色综合| 国产成人精品免费在线| 欧美日韩国产系列| 国产精品久久毛片| 精品一区二区免费视频| 欧日韩精品视频| 国产三级精品三级| 美日韩一区二区| 欧美午夜精品久久久| 中文字幕国产一区| 日韩av网站在线观看| 色拍拍在线精品视频8848| 国产日本亚洲高清| 青青草97国产精品免费观看无弹窗版| caoporm超碰国产精品| 久久综合色播五月| 免费欧美在线视频| 欧美偷拍一区二区| 亚洲日本一区二区| 波波电影院一区二区三区| 久久综合久久综合久久| 日本免费新一区视频| 欧美无乱码久久久免费午夜一区| 中文字幕一区二区视频| 国产不卡视频在线播放| 精品国产乱码久久久久久久久 | 亚洲精品国产成人久久av盗摄| 国产真实乱对白精彩久久| 69堂成人精品免费视频| 亚洲v日本v欧美v久久精品| 99久久久精品| 综合久久国产九一剧情麻豆| 成人丝袜18视频在线观看| 久久久久久久av麻豆果冻| 韩国女主播一区| 亚洲精品在线观看视频| 国内精品自线一区二区三区视频| 日韩欧美亚洲国产精品字幕久久久| 午夜精品国产更新| 欧美一区二区美女| 久久国产尿小便嘘嘘尿|