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

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

?? gamecanvas.java

?? 幾個不錯的手機程序例子
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/*
 * GameCanvas.java
 *
 * Copyright 2001 SkyArts. All Rights Reserved.
 */
import javax.microedition.lcdui.*;
import java.util.Timer;

/**
 * NumberSliderPuzzle的游戲內容描繪與操作所用的類
 *
 * @author  Hideki Yonekawa
 * @version 1.0
 */
class GameCanvas extends Canvas implements Runnable, CommandListener {
	/** 存放寬度的變量 */
	private int					screenWidth;
	/** 存放高度的變量 */
	private int					screenHeight;

	/** 存放NumberSliderPuzzle對象的變量 */
	private NumberSliderPuzzle	sliderPuzzle;

	/** 暫停狀態所用的標志 */
	private boolean				isPaused;

	/** 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 Font				defFont				= Font.getDefaultFont();

	/** 儲存解謎所需時間的變量 */
	private long				timeLong;

	/** 操作所需時間的計時器時所使用的Timer變量 */
	private Timer				timer				= null;

	/** 儲存各關卡謎題資訊的變量 */
	private static final short[][] QUESTION_PIECES	= new short[][] {
		{	//關卡1的謎題
			 1,  5,  9, 13,
			 2,  6, 10, 14,
			 3,  7, 11, 15,
			 4,  8, 12, -1
		},
		{	//關卡2的謎題
			 4,  3,  2,  1,
			 8,  7,  6,  5,
			12, 11, 10,  9,
			15, 13, 14, -1
		},
		{	//關卡3的謎題
			12,  8,  4,  1,
			15,  9,  5,  2,
			13, 10,  6,  3,
			14, 11,  7, -1
		},
		{	//關卡4的謎題
			14, 15, 12, 13,
			 8,  9, 10, 11,
			 4,  5,  6,  7,
			 1,  2,  3, -1
		},
		{	//關卡5的謎題
			14, 12, 15, 13,
			11, 10,  9,  8,
			 7,  6,  5,  4,
			 3,  2,  1, -1
		}
	};

	/** 儲存現在關卡的變量 */
	private int					stage;
	/** 儲存最高關卡數的常量 */
	private static final int	MAX_STAGE			= QUESTION_PIECES.length;

	/** 代表拼圖板的列(縱向)數的常量 */
	private static final int	COLUMN_LENGTH		= 4;
	/** 代表拼圖板的行(橫向)數的常量 */
	private static final int	ROW_LENGTH		= 4;

	/** 代表拼圖片的橫寬的常量 */
	private static final int	PIECE_WIDTH		= 25;
	/** 代表拼圖片的高度的常量 */
	private static final int	PIECE_HEIGHT		= 25;

	/** 儲存顯示于畫面的拼圖板資訊的變量 */
	private short[]				pieces		= new short[COLUMN_LENGTH * ROW_LENGTH];

	/** 儲存現在空白空間的Index的變量 */
	private short				spaceIndex;

	/** 代表標題顯示狀態的常量 */
	private static final short	TITLE				= 0;
	/** 代表關卡開始顯示狀態的常量 */
	private static final short	STAGE_START			= 1;
	/** 代表關卡顯示狀態的常量 */
	private static final short	STAGE_PLAYING		= 2;
	/** 代表關卡結束顯示狀態的常數 */
	private static final short	STAGE_END			= 5;
	/** 代表過關顯示狀態的常量 */
	private static final short	STAGE_CLEAR			= 7;
	/** 代表全關卡過關顯示狀態的常量 */
	private static final short	ALL_STAGE_CLEAR		= 9;

	/** 儲存現在之顯示狀態的變量 */
	private short				gameState;

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

	/**
	 * 構造函數
	 * @param sliderPuzzle	NumberSliderPuzzle
	 */
	GameCanvas(NumberSliderPuzzle sliderPuzzle) {
		this.sliderPuzzle = sliderPuzzle;

		//畫面的描繪范圍的取得
		screenWidth = getWidth();
		screenHeight = getHeight();

		//登錄注冊Command listener
		setCommandListener(this);

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

		//游戲的狀態指定為顯示標題
		gameState = TITLE;
	}

	/** 將使用在各關卡的變量加以初始化的方法 */
	private void doGameInit() {
		stage = 1;
		isPaused = false;
		doStageInit();
		timeLong = 0;
	}

	/** 將使用在各關卡的變量加以初始化的方法 */
	private void doStageInit() {
		//設定各關卡的謎題
		System.arraycopy(QUESTION_PIECES[stage -1], 0, pieces, 0, pieces.length);
		//將空白空間放到右下
		spaceIndex = (short)(pieces.length -1);
	}

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

			case STAGE_START:	//關卡開始時
			case STAGE_PLAYING:	//關卡中
				//暫停
				isPaused = true;
				//以防萬一先刪除關卡中的指令
				removeCommand(pauseCmd);
				removeCommand(resumeCmd);
				//新增Resume指令
				addCommand(resumeCmd);
			break;

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

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

			default:			//上述以外的時候
				//暫停
				doTimerStop();
				isPaused = true;
			break;
		}
	}

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

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

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

	/** 調用到計時器的方法 */
	void addSec() {
		//增加計時器的計數讓其再描繪
		timeLong++;
		repaint();
	}

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

	/** 啟動計時器的方法 */
	private void doTimerStart() {
		//計時器不是null的時候就啟動計時器
		if(timer == null) {
			GameTimer gameTimer = new GameTimer(this);
			timer = new Timer();
			timer.schedule(gameTimer, 1000, 1000);
		}
	}

	/** 停止計時器的方法 */
	private void doTimerStop() {
		//計時器不是null的時候就停止計時器
		if(timer != null) {
			timer.cancel();
			timer = null;
		}
	}

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

	/** 進行描繪的方法 */
	protected void paint(Graphics g) {
		//將背景以白色清除
		g.setColor(0x00FFFFFF);
		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(0x00000000);
				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 STAGE_START://關卡開始時
				//描繪舞臺開始畫面
				g.setColor(0x00000000);
				drawSt = "Stage " + String.valueOf(stage);
				stWidth = defFont.stringWidth(drawSt);
				drawX = (screenWidth - stWidth) / 2;
				drawY = (screenHeight - (stHeight * 2)) / 2;
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);

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

			default:
			//關卡中、關卡結束時、過關時、全部過關時
				//描繪外框
				int widSize = ROW_LENGTH * (PIECE_WIDTH +2);
				int heiSize = COLUMN_LENGTH * (PIECE_HEIGHT +2);
				g.setColor(0x0000FFFF);
				g.drawRect(1, screenHeight -heiSize -2, widSize, heiSize);
				g.setColor(0x000000FF);
				g.drawRect(0, screenHeight -heiSize -3, widSize +2, heiSize +2);

				g.setColor(0x00000000);
				//描繪計時器
				int hour = (int)(timeLong / 3600);
				int minute = (int)((timeLong - (hour * 3600)) / 60);
				String minuteSt = String.valueOf(minute);
				minuteSt = (minuteSt.length() < 2 ? "0"+minuteSt : minuteSt);//加上0變成兩位數
				int sec = (int)(timeLong - (hour * 3600) - (minute * 60));
				String secSt = String.valueOf(sec);
				secSt = (secSt.length() < 2 ? "0"+secSt : secSt);//加上0變成兩位數傞
				drawSt = String.valueOf(hour) + ":" + minuteSt + ":" + secSt;
				stWidth = defFont.stringWidth(drawSt);
				g.drawString(drawSt, (screenWidth-stWidth) / 2, 0, Graphics.TOP|Graphics.LEFT);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人综合在线观看| 欧美视频自拍偷拍| 中文字幕一区二区三区四区不卡 | 日本久久电影网| 精品日韩欧美在线| 亚洲老妇xxxxxx| 国产高清在线精品| 日韩午夜三级在线| 亚洲bt欧美bt精品| 91蜜桃婷婷狠狠久久综合9色| 2022国产精品视频| 免费在线观看一区| 欧美男人的天堂一二区| 《视频一区视频二区| 国产在线播精品第三| 在线播放一区二区三区| 中文字幕一区二区日韩精品绯色| 青草国产精品久久久久久| 91搞黄在线观看| 亚洲图片欧美激情| 成人av免费网站| 国产精品视频免费看| 国产毛片精品视频| 久久久亚洲精品一区二区三区| 日本不卡视频在线| 欧美巨大另类极品videosbest | 久久亚区不卡日本| 日日嗨av一区二区三区四区| 欧美亚洲高清一区二区三区不卡| 国产精品家庭影院| av一区二区三区四区| 国产午夜精品美女毛片视频| 韩国精品一区二区| 久久噜噜亚洲综合| 国产91露脸合集magnet| 国产免费久久精品| youjizz久久| 最新日韩在线视频| 一本久久a久久精品亚洲| 亚洲色欲色欲www| 日本久久一区二区| 日韩高清在线电影| 精品久久免费看| 国产69精品久久777的优势| 日本一区二区三区电影| www.66久久| 一区二区三区四区av| 欧美区一区二区三区| 免费观看一级欧美片| 久久青草国产手机看片福利盒子| 国产成人精品亚洲日本在线桃色| 国产精品毛片无遮挡高清| 92精品国产成人观看免费| 亚洲女爱视频在线| 欧美日韩精品一区视频| 韩国三级在线一区| 国产成人综合在线观看| 风间由美中文字幕在线看视频国产欧美| 亚洲欧美日本韩国| 欧美午夜一区二区三区| 精品一区在线看| 中文字幕成人在线观看| 色哦色哦哦色天天综合| 丝袜国产日韩另类美女| 国产蜜臀av在线一区二区三区| av动漫一区二区| 琪琪久久久久日韩精品| 国产精品第13页| 3751色影院一区二区三区| 国产宾馆实践打屁股91| 亚洲高清三级视频| 欧美高清在线精品一区| 欧美人动与zoxxxx乱| 国产成a人无v码亚洲福利| 亚洲高清视频在线| 国产精品嫩草影院com| 欧美人动与zoxxxx乱| 成人精品高清在线| 美国一区二区三区在线播放| 中文字幕一区av| 久久久久久**毛片大全| 欧美顶级少妇做爰| 91免费版pro下载短视频| 国产专区欧美精品| 婷婷夜色潮精品综合在线| 国产精品成人一区二区三区夜夜夜| 欧洲av在线精品| 不卡av在线网| 国产精品一区二区在线看| 日本成人在线一区| 午夜精品一区二区三区免费视频 | 91极品视觉盛宴| 高清国产一区二区三区| 九九精品一区二区| 日本视频在线一区| 亚洲一级在线观看| 国产精品伦理在线| 日本一区二区免费在线观看视频 | 另类欧美日韩国产在线| 亚洲国产精品久久人人爱| 亚洲欧美自拍偷拍色图| 国产欧美视频一区二区| 久久―日本道色综合久久 | 99精品视频在线免费观看| 韩国精品主播一区二区在线观看| 日韩 欧美一区二区三区| 亚洲一区中文在线| 一区二区三区中文在线观看| 色综合激情久久| 在线播放91灌醉迷j高跟美女| 国产激情视频一区二区三区欧美 | 日韩不卡免费视频| 精品久久久久99| 欧美精品在线观看播放| 久久国产夜色精品鲁鲁99| 亚洲综合久久久久| 亚洲综合久久av| 亚洲超碰精品一区二区| 视频一区二区中文字幕| 亚洲精品国产精品乱码不99 | 成人免费av资源| av电影一区二区| 欧美亚洲日本一区| 91精品国产高清一区二区三区蜜臀| 精品视频免费看| 日韩一区二区不卡| 国产欧美日韩亚州综合| 日韩av不卡一区二区| 国产精品污污网站在线观看 | 久久不见久久见中文字幕免费| 日本一区二区三区免费乱视频| 亚洲女与黑人做爰| 欧美日韩中文字幕精品| 欧美一级一级性生活免费录像| 91精品婷婷国产综合久久性色| 欧美一级一区二区| 久久午夜羞羞影院免费观看| 国产日韩影视精品| 亚洲美女精品一区| 日韩成人午夜电影| 国产乱色国产精品免费视频| 波多野结衣亚洲一区| 欧美主播一区二区三区| 91精品欧美一区二区三区综合在| 精品国产1区2区3区| 国产精品美女久久久久久2018| 夜夜嗨av一区二区三区中文字幕| 午夜精品久久久久影视| 激情综合色播五月| 不卡的av在线播放| 欧美喷潮久久久xxxxx| 久久久久久久av麻豆果冻| 一区二区日韩av| 精品中文字幕一区二区| 91老司机福利 在线| 欧美成人综合网站| 亚洲欧洲制服丝袜| 精品亚洲欧美一区| 欧美三级日本三级少妇99| 久久人人爽爽爽人久久久| 亚洲图片欧美综合| 成人永久aaa| 日韩一区二区在线观看视频播放| 国产精品三级在线观看| 麻豆精品视频在线观看视频| av色综合久久天堂av综合| 日韩精品中文字幕一区| 一区二区三区在线视频免费观看| 国产一区二区主播在线| 欧美午夜精品理论片a级按摩| 国产丝袜在线精品| 蜜桃av噜噜一区| 欧美色综合网站| 国产精品久久久久久久久动漫 | 亚洲少妇30p| 国产suv一区二区三区88区| 欧美一二三区在线| 午夜精品一区二区三区免费视频| 成人av片在线观看| 国产三级精品视频| 国产一区二区视频在线播放| 欧美一区二区三区人| 亚洲国产中文字幕| 色先锋aa成人| 国产精品福利av| 风流少妇一区二区| 国产人伦精品一区二区| 韩国精品一区二区| 精品欧美乱码久久久久久| 日韩高清不卡在线| 欧美精品18+| 日韩av电影天堂| 欧美一区二区三区影视| 三级在线观看一区二区| 欧美日韩久久久| 视频在线观看国产精品| 7777精品伊人久久久大香线蕉经典版下载| 综合精品久久久| 91久久精品国产91性色tv| 一区二区三区四区亚洲|