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

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

?? rpgcanvas.java

?? 游戲源代碼 RPG 實現行走 繪制地圖 和碰撞交互的功能
?? JAVA
字號:
import javax.microedition.lcdui.*;

/**
 * RPG游戲示例代碼 實現了按鍵的連續移動
 */
public class RPGCanvas extends Canvas implements Runnable {

	/** 游戲狀態 */
	private int status;

	// 游戲狀態設定
	/** 村莊1 */
	private final static int SCREEN_1 = 0;

	/** 武器店 */
	private final static int WEAPON_SHOP = 10;

	/** 對話狀態1 */
	private final static int DIALOAG_1 = 100;

	// 場景1地圖數組
	int backmap0[][] = { { 1, 11, 12, 1, 76, 1, 1, 1, 78, 1, 1, 1 },
			{ 19, 20, 21, 22, 73, 80, 81, 1, 77, 68, 1, 1 },
			{ 28, 29, 30, 31, 32, 1, 1, 1, 1, 1, 1, 1 },
			{ 37, 38, 39, 31, 41, 1, 1, 1, 1, 1, 54, 1 },
			{ 46, 47, 48, 49, 50, 1, 1, 1, 1, 1, 1, 1 },
			{ 55, 74, 57, 58, 59, 1, 1, 1, 1, 1, 1, 1 },
			{ 79, 75, 66, 67, 1, 1, 1, 3, 4, 5, 1, 1 },
			{ 1, 1, 1, 1, 1, 1, 1, 2, 13, 14, 1, 1 },
			{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
			{ 54, 27, 24, 24, 23, 83, 24, 24, 24, 24, 26, 54 },
			{ 15, 43, 9, 9, 23, 83, 9, 9, 9, 9, 25, 15 },
			{ 54, 42, 33, 33, 23, 83, 33, 33, 33, 33, 34, 54 },
			{ 1, 1, 1, 1, 84, 84, 1, 1, 1, 1, 1, 1 } };

	// 圖塊常量
	/** 每個圖塊的寬度 */
	private final static int TILE_WIDTH = 16;
	/** 每個圖塊的高度 */
	private final static int TILE_HEIGHT = 16;

	/** 場景1圖片 */
	Image screen_1 = null;

	/** 地圖原始圖片 */
	Image map0Img = null;

	/** 人物原始圖片 */
	Image roleImg = null;
	/** 人物的x坐標 */
	int roleX = 100;
	/** 任務的y坐標 */
	int roleY = 100;

	/** 人物寬度 */
	private final static int ROLE_WIDTH = 16;
	/** 人物高度 */
	private final static int ROLE_HEIGHT = 32;

	/** 人物方向 */
	int direction;
	/** 人物當前顯示圖片的序號 */
	int currIndex = 0;

	/** 人物連續移動的控制變量,-1代表不移動,其他方向和人物方向常量的規定相同 */

	int roleMoveControl = -1;

	/** 移動速度,每次2個像素 */
	int speed = 4;

	/** 不移動 */
	private final static int NOT_MOVE = -1;

	/** 人物方向常量 */
	private final static int DIRE_LEFT = 9;
	private final static int DIRE_RIGHT = 6;
	private final static int DIRE_UP = 3;
	private final static int DIRE_DOWN = 0;

	/** 屏幕寬度 */
	int width;
	/** 屏幕高度 */
	int height;

	/** 可行走區域地圖塊序號 */
	private int[] canMoveTile = { 1, 2, 3, 4, 5, 13, 14, 23, 32, 41, 50, 59,
			66, 67, 83 };
	
	/**武器名稱*/
	private String[] weaponName = {
		"軒轅劍",
		"浪宇刀",
		"匕首"
	};
	
	/**武器價格*/
	private int[] weaponPrice = {
		1000,
		2000,
		100
	};

	
	
	
	public RPGCanvas() {
		try {
			map0Img = Image.createImage("/map.png");
			roleImg = Image.createImage("/player.png");
		} catch (Exception e) {
		}
		
		//全屏
		this.setFullScreenMode(true);
		
		width = this.getWidth();
		height = this.getHeight();

		// 啟動線程
		Thread th = new Thread(this);
		th.start();
	}

	protected void paint(Graphics g) {
		// 根據游戲狀態實現繪制
		switch (status) {
		case SCREEN_1:
			// 繪制場景
			paintSCREEN_1(g);
			// 繪制人物
			paintRole(g);
			break;
		case WEAPON_SHOP:
			paintWEAPON_SHOP(g);
			break;
		case DIALOAG_1:
			paintDIALOAG_1(g);
			break;
		}
	}

	/**
	 * 繪制場景1的方法
	 * 
	 * @param g
	 *            畫筆
	 */
	private void paintSCREEN_1(Graphics g) {
		// 構造地圖圖片
		if (screen_1 == null) {
			screen_1 = createScreen_1();
		}
		g.drawImage(screen_1, 0, 0, Graphics.LEFT | Graphics.TOP);
	}

	/**
	 * 繪制人物
	 * 
	 * @param g
	 *            畫筆
	 */
	private void paintRole(Graphics g) {
		g.setClip(roleX, roleY, ROLE_WIDTH, ROLE_HEIGHT);
		g.drawImage(roleImg, roleX - currIndex * ROLE_WIDTH, roleY,
				Graphics.LEFT | Graphics.TOP);
		// 恢復默認剪切區域
		g.setClip(0, 0, width, height);
	}

	String weaponShopName = "武器店";
	String left = "離開";
	/**
	 * 繪制武器店界面
	 * 
	 * @param g
	 *            畫筆
	 */
	private void paintWEAPON_SHOP(Graphics g) {
		//繪制背景
		g.setColor(0);
		g.fillRect(0, 0, width, height);
		
		g.setColor(0xffffff);
		
		//繪制標題
		g.drawString(weaponShopName,90,10,Graphics.TOP | Graphics.LEFT);
		
		//循環繪制
		for(int i = 0; i < weaponName.length;i++){
			//繪制武器名稱
			g.drawString(weaponName[i], 30, 
					50 + 30 * i, Graphics.TOP | Graphics.LEFT);
			//繪制武器價格
			g.drawString("" + weaponPrice[i], 150, 50 + 30 * i, Graphics.TOP | Graphics.LEFT);
		}
		
		//繪制按鈕
		g.drawString(left, 0, height, Graphics.BOTTOM | Graphics.LEFT);
		
	}

	/**
	 * 繪制對話
	 * 
	 * @param g
	 *            畫筆
	 */
	private void paintDIALOAG_1(Graphics g) {

	}

	private Image createScreen_1() {
		// 創建和地圖大小一樣的圖片
		Image tempImg = Image.createImage(backmap0[0].length * TILE_WIDTH,
				backmap0.length * TILE_HEIGHT);
		// 繪制地圖
		Graphics g1 = tempImg.getGraphics();
		// 循環繪制
		for (int i = 0; i < backmap0.length; i++) { // 行
			for (int j = 0; j < backmap0[i].length; j++) {
				// 設置剪切區域
				g1.setClip(j * TILE_WIDTH, i * TILE_HEIGHT, TILE_WIDTH,
						TILE_HEIGHT);

				// 計算圖片坐標
				int dx = (backmap0[i][j] - 1) % 9 * TILE_WIDTH;
				int dy = (backmap0[i][j] - 1) / 9 * TILE_HEIGHT;
				// 繪制圖片
				g1.drawImage(map0Img, j * TILE_WIDTH - dx,
						i * TILE_HEIGHT - dy, Graphics.LEFT | Graphics.TOP);
			}
		}

		return tempImg;
	}

	public void keyPressed(int keyCode) {
		//System.out.println(keyCode);
		// 根據游戲狀態實現按鍵處理
		switch (status) {
		case SCREEN_1:
			SCREEN_1_KeyPress(keyCode);
			break;
		case WEAPON_SHOP:
			weapon_Shop_KeyPress(keyCode);
			break;
		case DIALOAG_1:

			break;
		}
	}
	
	/**
	 * 武器店事件處理
	 * @param keyCode
	 */
	private void weapon_Shop_KeyPress(int keyCode){
		if(keyCode == -6){ //左軟鍵
			status = SCREEN_1; //切換到村莊
			//處理坐標
			roleX = 38;
			roleY = 100;
			
			//人物方向
			direction = DIRE_DOWN;
			//人物靜止
			roleMoveControl = NOT_MOVE;
		}
	}

	public void keyReleased(int keyCode) {
		// 根據游戲狀態實現按鍵處理
		switch (status) {
		case SCREEN_1:
			SCREEN_1_KeyRelease(keyCode);
			break;
		case WEAPON_SHOP:

			break;
		case DIALOAG_1:

			break;
		}

	}

	private void SCREEN_1_KeyPress(int keyCode) {
		// 轉換為游戲動作
		int action = this.getGameAction(keyCode);
		switch (action) {
		case UP:
			// 改變方向
			direction = DIRE_UP;
			// 控制移動
			roleMoveControl = DIRE_UP;
			break;
		case DOWN:
			// 改變方向
			direction = DIRE_DOWN;
			// 控制移動
			roleMoveControl = DIRE_DOWN;
			break;
		case LEFT:
			// 改變方向
			direction = DIRE_LEFT;
			// 控制移動
			roleMoveControl = DIRE_LEFT;
			break;
		case RIGHT:
			// 改變方向
			direction = DIRE_RIGHT;
			// 控制移動
			roleMoveControl = DIRE_RIGHT;
			break;
		case FIRE:

			break;
		}
	}

	private void SCREEN_1_KeyRelease(int keyCode) {
		// 轉換為游戲動作
		int action = this.getGameAction(keyCode);
		switch (action) {
		case UP:
		case DOWN:
		case LEFT:
		case RIGHT:
			roleMoveControl = NOT_MOVE;
		}
	}

	Runtime rt = Runtime.getRuntime();
	public void run() {
		try {
			while (true) {
				// 延時
				Thread.sleep(100);

				// 邏輯處理方法
				tick();
				
				//判斷
				if(rt.freeMemory() < 100000){
					System.gc();
				}

				// 重新繪制
				repaint();
			}
		} catch (Exception e) {

		}
	}

	/**
	 * 邏輯處理方法
	 */
	public void tick() {
		// 根據游戲狀態實現繪制
		switch (status) {
		case SCREEN_1:
			roleMove();
			break;
		case WEAPON_SHOP:

			break;
		case DIALOAG_1:

			break;
		}
	}

	/**
	 * 人物移動處理方法
	 */
	private void roleMove() {
		if (roleMoveControl != NOT_MOVE) { // 人物移動
			//是否進入武器店
			if(isDisplayWeaponShop()){
				status = WEAPON_SHOP;
			}
			// 根據方向移動
			switch (direction) {
			case DIRE_LEFT:
				// 向左移動
				// 左邊界檢測
				if (roleX - speed >= 0) {
					roleX -= speed;
					// 如果發生碰撞,則退回
					if (collis()) {
						roleX += speed;
					}
				}
				break;
			case DIRE_RIGHT:
				// 向右移動
				// 右邊界檢測
				if (roleX + ROLE_WIDTH + speed <= width) {
					roleX += speed;
					// 如果發生碰撞,則退回
					if (collis()) {
						roleX -= speed;
					}
				}
				break;
			case DIRE_UP:
				// 向上移動
				// 上邊界檢測
				if (roleY - speed >= 0) {
					roleY -= speed;
					// 如果發生碰撞,則退回
					if (collis()) {
						roleY += speed;
					}
				}
				break;
			case DIRE_DOWN:
				// 向下移動
				// 下邊界檢測
				if (roleY + ROLE_HEIGHT + speed <= height) {
					roleY += speed;
					// 如果發生碰撞,則退回
					if (collis()) {
						roleY -= speed;
					}
				}
				break;
			}
			// 動畫
			if (currIndex == direction + 1) {
				currIndex = direction + 2;
			} else {
				currIndex = direction + 1;
			}
		} else { // 人物靜止
			currIndex = direction;
		}
	}

	/**
	 * 碰撞檢測 
	 * 原理:以人物16X32區域的下半部12X12和地圖坐標判斷,
	 * 只有地圖塊 為可移動地圖塊數組的才能夠行走
	 * 
	 * @return true代表發生碰撞,false代表未碰撞
	 */
	private boolean collis() {
		// 獲得12X12區域的坐標,左上角
		int leftX = roleX + 2;
		int topY = roleY + 18;

		// 計算左上角所在的地圖圖塊的序號
		int col = leftX / TILE_WIDTH;
		int row = topY / TILE_HEIGHT;
		if (!canMove(row, col)) {
			return true;
		}
		// 右上角所在的地圖圖塊的序號
		col = (leftX + 12) / TILE_WIDTH;
		if (!canMove(row, col)) {
			return true;
		}
		// 左下角所在的地圖圖塊的序號
		col = leftX / TILE_WIDTH;
		row = (topY + 12) / TILE_WIDTH;
		if (!canMove(row, col)) {
			return true;
		}
		// 右下角
		col = (leftX + 12) / TILE_WIDTH;
		if (!canMove(row, col)) {
			return true;
		}

		// 如果都不滿足,則返回false
		return false;
	}

	/**
	 * 第row行第col列圖塊是否可行走
	 * 
	 * @param row
	 *            行號,從0開始
	 * @param col
	 *            列號,從0開始
	 * @return true代表可以行走,false代表不能行走
	 */
	private boolean canMove(int row, int col) {
		boolean b = false;
		for (int i = 0; i < canMoveTile.length; i++) {
			if (backmap0[row][col] == canMoveTile[i]) {
				b = true;
				break;
			}
		}
		return b;
	}
	
	/**
	 * 是否進入武器店
	 * @return true代表進入
	 */
	private boolean isDisplayWeaponShop(){
		// 獲得16X16區域的坐標,左上角
		int leftX = roleX;
		int topY = roleY + 16;

		// 計算左上角所在的地圖圖塊的序號
		int col = leftX / TILE_WIDTH;
		int row = topY / TILE_HEIGHT;
		//是否和門發生碰撞
		if(backmap0[row][col] == 66){ //門
			//status = WEAPON_SHOP;
			return true;
		}		
		// 右上角所在的地圖圖塊的序號
		col = (leftX + 12) / TILE_WIDTH;
		//是否和門發生碰撞
		if(backmap0[row][col] == 66){ //門
			//status = WEAPON_SHOP;
			return true;
		}
		
		return false;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久91精品国产91久久小草| 2023国产精品视频| 欧美一区二区三区在线视频| 亚洲高清视频的网址| 国产福利91精品一区二区三区| 精品国精品自拍自在线| 国产精品国产a| 成人午夜电影久久影院| 欧美tickling网站挠脚心| 91精品国产综合久久久久| 日韩欧美色综合网站| 亚洲成人1区2区| 欧美va亚洲va在线观看蝴蝶网| 午夜精品在线看| 日韩一区二区三区观看| 亚洲图片激情小说| 欧美日韩高清影院| 亚洲欧美日韩电影| 国产亚洲一区二区在线观看| 精品一区精品二区高清| 国产午夜精品福利| 国产成人精品免费视频网站| 亚洲精选视频免费看| 97久久久精品综合88久久| 天天爽夜夜爽夜夜爽精品视频 | 亚洲一区二区三区在线| 国产传媒欧美日韩成人| 亚洲精品视频免费观看| 91久久精品日日躁夜夜躁欧美| 国产成人亚洲综合色影视| 最好看的中文字幕久久| 天堂在线一区二区| 国产日产精品一区| 成人黄色在线视频| 亚洲 欧美综合在线网络| 99久久精品99国产精品| 麻豆精品一区二区三区| 日韩一区二区影院| 91视频在线观看| 亚洲视频在线一区二区| 欧美成人在线直播| 国产在线观看一区二区| 亚洲视频电影在线| 欧美日韩一级黄| 波多野洁衣一区| 亚洲成a人v欧美综合天堂下载 | 亚洲人成伊人成综合网小说| 69堂亚洲精品首页| 久久精品国产亚洲高清剧情介绍 | 国产精品污污网站在线观看| 日韩在线观看一区二区| 欧美精品免费视频| 午夜精品久久久久久久| 国产精品电影一区二区三区| eeuss国产一区二区三区| 伦理电影国产精品| 亚洲国产精品天堂| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美私模裸体表演在线观看| 日本不卡1234视频| 亚洲精品高清在线观看| 欧美一区永久视频免费观看| 色综合天天综合给合国产| 亚洲妇女屁股眼交7| jvid福利写真一区二区三区| 亚洲高清免费观看高清完整版在线观看| 久久久久久久综合狠狠综合| 在线欧美小视频| 99re在线精品| 日本韩国一区二区三区| 成人性生交大片免费看中文网站| 亚洲成在人线免费| 亚洲欧美自拍偷拍| 在线不卡一区二区| 这里只有精品99re| jlzzjlzz国产精品久久| 成人动漫精品一区二区| 日韩av一二三| 日日夜夜精品视频天天综合网| 久久午夜电影网| 国产香蕉久久精品综合网| 欧美精品123区| 欧美一区二区三区视频在线| 成人a免费在线看| 91蜜桃婷婷狠狠久久综合9色| 国产一区二区在线视频| 黄色日韩三级电影| 午夜精品视频在线观看| 秋霞午夜av一区二区三区| 亚洲欧美视频一区| 亚洲精品国产一区二区精华液| 欧美一级理论性理论a| 精品国产乱子伦一区| 欧美自拍偷拍午夜视频| 色综合中文字幕国产| 香蕉加勒比综合久久| 日本网站在线观看一区二区三区| 中文字幕在线观看不卡视频| 亚洲女同一区二区| 欧美韩国一区二区| 亚洲美女视频在线| 中文字幕欧美区| 亚洲综合视频在线观看| 国产日产亚洲精品系列| 精品国产91乱码一区二区三区| 91精品国产欧美日韩| 欧美一级高清片| 成人妖精视频yjsp地址| 成人av集中营| 欧美日韩在线播| 国产精品国产三级国产普通话三级| 亚洲日本在线天堂| 亚洲欧美一区二区三区孕妇| 男男成人高潮片免费网站| 午夜欧美2019年伦理| 国产一区视频在线看| 精品一区二区综合| 色狠狠色噜噜噜综合网| 亚洲国产精品久久久久婷婷884 | 天堂久久久久va久久久久| 老司机精品视频在线| 久久国产生活片100| fc2成人免费人成在线观看播放| 国内精品免费在线观看| 色噜噜狠狠成人网p站| 欧美自拍偷拍午夜视频| 久久噜噜亚洲综合| 欧美tickling网站挠脚心| 有坂深雪av一区二区精品| 欧美韩国一区二区| 美女脱光内衣内裤视频久久影院| 国产人成一区二区三区影院| 国产亚洲欧洲997久久综合| 久久久99精品久久| 国产精品三级av| 麻豆成人91精品二区三区| 国产精品羞羞答答xxdd| 欧美人xxxx| 久久综合九色综合久久久精品综合 | 激情综合网av| 国产成人午夜精品5599 | 日韩极品在线观看| 91欧美一区二区| 欧美精品久久天天躁| 亚洲精品成人a在线观看| 蜜臀国产一区二区三区在线播放 | 99天天综合性| 欧美男男青年gay1069videost| 国产精品久久久久久久岛一牛影视| 1024成人网| 成人精品鲁一区一区二区| 在线亚洲精品福利网址导航| 国产精品美女久久福利网站| 日韩一区日韩二区| 波多野结衣一区二区三区 | av在线这里只有精品| 精品99久久久久久| 精品一区二区成人精品| 欧美日韩mp4| 日本一区二区三区在线观看| 久久国产欧美日韩精品| 美女视频黄 久久| 日韩一区二区免费视频| 欧美精品久久99久久在免费线| 欧美国产日韩a欧美在线观看| 视频在线在亚洲| 成人激情校园春色| 国产精品免费av| 九色综合国产一区二区三区| 日韩一卡二卡三卡| 亚洲日本青草视频在线怡红院| 91婷婷韩国欧美一区二区| 欧美亚一区二区| 五月婷婷综合在线| 美女视频网站黄色亚洲| 成人福利视频在线| 一本大道久久a久久综合| 久久综合狠狠综合久久激情 | 91久久精品一区二区三区| 日韩欧美国产午夜精品| 精东粉嫩av免费一区二区三区| 91免费在线视频观看| 国产午夜精品福利| 福利电影一区二区| 精品久久国产老人久久综合| 国产精品18久久久久久久久 | a亚洲天堂av| 国产香蕉久久精品综合网| 99久久精品免费精品国产| 2024国产精品| 99精品视频在线观看免费| 欧美美女网站色| 另类小说一区二区三区| 久久综合资源网| 久久99精品久久只有精品| 国产精品三级久久久久三级| 精品一二三四区| 亚洲视频一区在线| 成人app软件下载大全免费| 亚洲一区二区三区三|