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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mazegame.java

?? 一個迷宮游戲的java源代碼,內(nèi)有隨機(jī)生成迷宮算法,解答迷宮算法
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:

	}

	/**
	 * 遍歷迷宮,遍歷完成后就能找到主路徑:checks[i][j]為Check.main的方格都在主路徑上
	 * 
	 * @param i1
	 *            原方格所在行數(shù)
	 * @param j1
	 *            原方格所在列數(shù)
	 * @param i2
	 *            目標(biāo)方格所在行數(shù)
	 * @param j2
	 *            目標(biāo)方格所在列數(shù)
	 * @return 找到從起點到終點路徑則返回true;否則返回false
	 */
	private boolean traverse(int i1, int j1, int i2, int j2) {
		boolean done = false;

		if (i1 == 0 && j1 == 0)// 起點
			checks[i1][j1] = Check.main;
			
			if (valid(i1, j1, i2, j2)) {
			checks[i2][j2] = Check.notMain;// 先設(shè)定為notMain表示不在主路徑上

			if (i2 == this.height - 1 && j2 == this.width - 1)
				done = true; // 到達(dá)終點
			else {
				done = traverse(i2, j2, i2 + 1, j2); // down
				if (!done)
					done = traverse(i2, j2, i2, j2 + 1); // right
				if (!done)
					done = traverse(i2, j2, i2 - 1, j2); // up
				if (!done)
					done = traverse(i2, j2, i2, j2 - 1); // left
			}

			if (done) // 若done為true說明這個方格在主路徑上
				checks[i2][j2] = Check.main;
		}

		return done;
	}

	/**
	 * 開啟解答:迷宮中將會顯示解答
	 */
	public void solveOn() {
		solve = true;
		repaint();
	}

	/**
	 * 關(guān)閉解答:迷宮中將不顯示解答
	 */
	public void solveOff() {
		solve = false;
		repaint();
	}

	/**
	 * 玩家移動(當(dāng)然,有墻阻擋就走不了那個方向)
	 * 
	 * @param direction
	 *            1--向左走,2--向上走,3--向右走,4--向下走
	 * @return 成功走了一步則返回true;否則返回false
	 */
	public boolean move(int direction) {
		boolean succeed = false;

		switch (direction) {
		case 1:
			if (playerColumn != 0
					&& vertical[playerRow][playerColumn] == Wall.notExist) {
				playerColumn -= 1;
				succeed = true;
			}
			break;
		case 2:
			if (playerRow != 0
					&& horizontal[playerRow][playerColumn] == Wall.notExist)// 不在第一行且沒有墻阻擋
			{
				playerRow -= 1;
				succeed = true;
			}
			break;
		case 3:
			if (playerColumn != this.width - 1
					&& vertical[playerRow][playerColumn + 1] == Wall.notExist) {
				playerColumn += 1;
				succeed = true;
			}
			break;
		case 4:
			if (playerRow != this.height - 1
					&& horizontal[playerRow + 1][playerColumn] == Wall.notExist) {
				playerRow += 1;
				succeed = true;
			}
			break;
		}

		repaint();// 走完一步不要忘記重畫!

		return succeed;
	}

	/**
	 * 開啟追趕者
	 */
	public void chaseOn() {
		this.chase = true;
		timer.start();
		repaint();
	}

	/**
	 * 關(guān)閉追趕者
	 */
	public void chaseOff() {
		this.chase = false;
		timer.stop();
		repaint();
	}

	/**
	 * 玩家拆墻,若超過了限制次數(shù)或本來就沒墻的則拆墻無效
	 * 
	 * @param direction
	 *            1--拆玩家當(dāng)前方格位置的左墻,2--拆上墻,3--拆右墻,4--拆下墻
	 */
	public void tearDown(int direction) {
		boolean succeed = false;

		if (this.tearDownAllowed != 0) {// 若小于0則說明玩家設(shè)定拆墻不限次數(shù),若大于0則說明還可以拆墻
			switch (direction) {
			case 1:
				if (vertical[playerRow][playerColumn] == Wall.exist) {
					vertical[playerRow][playerColumn] = Wall.notExist;
					succeed = true;
				}
				break;
			case 2:
				if (horizontal[playerRow][playerColumn] == Wall.exist) {
					horizontal[playerRow][playerColumn] = Wall.notExist;
					succeed = true;
				}
				break;
			case 3:
				if (vertical[playerRow][playerColumn + 1] == Wall.exist) {
					vertical[playerRow][playerColumn + 1] = Wall.notExist;
					succeed = true;
				}
				break;
			case 4:
				if (horizontal[playerRow + 1][playerColumn] == Wall.exist) {
					horizontal[playerRow + 1][playerColumn] = Wall.notExist;
					succeed = true;
				}
				break;
			}
			if (this.tearDownAllowed != -1 && succeed)
				this.tearDownAllowed--;// 是限制次數(shù)且成功拆了一個墻
		}

		repaint();// 拆完墻不要忘記重畫!
	}

	/**
	 * 獲取當(dāng)前可拆墻剩余次數(shù)
	 * 
	 * @return 當(dāng)前可拆墻剩余次數(shù)
	 */
	public int tearDownAllowedTimes() {
		return tearDownAllowed;
	}

	/**
	 * 可變范圍拆墻,拆除一個矩形區(qū)域內(nèi)的所有墻:以玩家當(dāng)前位置為中心方格,以width為寬度半徑,以height為高度半徑
	 * 注意:若給定矩形區(qū)域不完全在迷宮區(qū)域內(nèi)則拆墻無效
	 * 
	 * @param widthHalf
	 *            矩形寬度半徑
	 * @param heightHalf
	 *            矩形高度半徑
	 */
	public void variableTearDown(int widthHalf, int heightHalf) {
		boolean notBeyond;

		notBeyond = playerRow - heightHalf >= 0
				&& playerRow + heightHalf + 1 <= this.height
				&& playerColumn - widthHalf >= 0
				&& playerColumn + widthHalf + 1 <= this.width;

		if (notBeyond) {// 未超出迷宮范圍
			// 矩形區(qū)域內(nèi)的水平墻全拆除
			for (int i = playerRow - heightHalf; i <= playerRow + heightHalf
					+ 1; i++)
				for (int j = playerColumn - widthHalf; j <= playerColumn
						+ widthHalf; j++)
					horizontal[i][j] = Wall.notExist;

			// 矩形區(qū)域內(nèi)的豎直墻全拆除
			for (int i = playerRow - heightHalf; i <= playerRow + heightHalf; i++)
				for (int j = playerColumn - widthHalf; j <= playerColumn
						+ widthHalf + 1; j++)
					vertical[i][j] = Wall.notExist;
		}

		repaint();// 再次強(qiáng)調(diào):拆完墻不要忘記重畫!

	}

	/**
	 * 保護(hù)生效:玩家四面是墻;保護(hù)失效:玩家四面無墻
	 * 
	 * @param protect
	 *            true為保護(hù)生效;false為保護(hù)失效
	 */
	public void protectEnabled(boolean protect) {
		if (protect) {
			horizontal[playerRow][playerColumn] = Wall.exist;
			horizontal[playerRow + 1][playerColumn] = Wall.exist;
			vertical[playerRow][playerColumn] = Wall.exist;
			vertical[playerRow][playerColumn + 1] = Wall.exist;
		} else {
			horizontal[playerRow][playerColumn] = Wall.notExist;
			horizontal[playerRow + 1][playerColumn] = Wall.notExist;
			vertical[playerRow][playerColumn] = Wall.notExist;
			vertical[playerRow][playerColumn + 1] = Wall.notExist;
		}

		repaint();
	}

	/**
	 * 返回當(dāng)前的游戲結(jié)果(考慮到玩家不動卻被追趕成功的情況,不推薦在每次玩家移動時作出判斷)
	 * (建議在外部類中定義一個定時器,每隔10毫秒就判斷一次玩家的輸贏狀態(tài),方便處理)
	 * 
	 * @return 返回-1表示當(dāng)前玩家輸了(追趕者為"開"且玩家碰到追趕者)
	 *         返回0表示當(dāng)前迷宮游戲仍在進(jìn)行中;返回1表示當(dāng)前玩家贏了(玩家到達(dá)終點且此刻并沒有碰到追趕者)
	 */
	public int currentResult() {
		boolean chased = false;// 判斷是否被追到

		for (Chaser chaser : chasers)
			if (chase == true && playerRow == chaser.row
					&& playerColumn == chaser.column)
				chased = true;

		if (chased)// 追趕者為"開"且玩家碰到追趕者
			currentResult = -1;
		else if (playerRow == this.height - 1 && playerColumn == this.width - 1)// 玩家到達(dá)終點且此刻并沒有碰到追趕者
			currentResult = 1;

		return currentResult;
	}

	/**
	 * 當(dāng)前提示,會根據(jù)玩家在迷宮的當(dāng)前位置給出提示 (考慮到玩家不動卻被追趕成功的情況,不推薦在每次玩家移動時給出提示)
	 * (建議在外部類中定義一個定時器,每隔10毫秒就調(diào)用一次本方法返回當(dāng)前提示)
	 * 
	 * @return 當(dāng)前提示,會根據(jù)玩家在迷宮的當(dāng)前位置給出提示.
	 */
	public String currentTip() {
		String tip = "暫 無 提 示";
		boolean chaserNear = false;// 判斷追趕者是否在附近

		for (Chaser chaser : chasers)
			if (Math.abs(playerRow - chaser.row) < 2
					&& Math.abs(playerColumn - chaser.column) < 2)
				chaserNear = true;

		if (playerRow == 0 && playerColumn == 0)// 玩家在起點
			tip = "你 在 起 點";
		else if (this.currentResult() == 1)// 玩家到達(dá)終點
			tip = "恭 喜 到 達(dá) 終 點!";
		else if (chaserNear)// 追趕者和玩家相差幾個方格
			tip = "當(dāng) 心! 追 趕 者 似 乎 很 接 近 了!";
		else if (checks[playerRow][playerColumn] == Check.notMain) // 玩家當(dāng)前位置不在主路徑上
			tip = "你 走 的 路 似 乎 不 對";
		else if (checks[playerRow][playerColumn] == Check.main)// 玩家當(dāng)前位置在主路徑上
			tip = "你 走 的 路 似 乎 是 正 確 的";

		return tip;
	}

	/**
	 * 幫助信息:迷宮的規(guī)則.注意:按鍵功能由外部類定義并告訴玩家.
	 * 
	 * @return 幫助信息:迷宮的規(guī)則
	 */
	public String help() {
		String help;

		help = "規(guī) 則 : 玩 家 是 藍(lán) 點, 終 點 在 右 下 角. 碰 到 紅 點 就 輸.";

		return help;
	}

	/**
	 * 追趕者的定時移動
	 * 
	 * @author 山
	 * 
	 */
	private class TimerListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			for (Chaser chaser : chasers)
				// 追趕者追趕玩家
				chaser.chase();

			repaint();// 追趕者移動后不要忘記重畫!
		}
	}

	/**
	 * 定義一個追趕者以及其追趕操作
	 * 
	 * @author 山
	 * 
	 */
	private class Chaser {
		public int row, column;// 追趕者的所在方格的行數(shù)和列數(shù),可在Maze類中訪問

		/**
		 * 新的追趕者
		 * 
		 * @param row
		 *            新建追趕者所在方格的行數(shù)
		 * @param column
		 *            新建追趕者所在方格的列數(shù)
		 */
		private Chaser(int row, int column) {
			this.row = row;
			this.column = column;
		}

		/**
		 * 以追趕者為中心,玩家的方位有8個:上,左上,右等,追趕者就是根據(jù)這些來追趕
		 */
		private void chase() {
			if (playerRow == this.row && playerColumn < this.column)// 玩家在追趕者左邊
				this.move(8);
			else if (playerRow == this.row && playerColumn > this.column)// 玩家在追趕者右邊
				this.move(4);
			else if (playerRow < this.row && playerColumn == this.column)// 玩家在追趕者上面
				this.move(2);
			else if (playerRow > this.row && playerColumn == this.column)// 玩家在追趕者下面
				this.move(6);
			else if (playerRow < this.row && playerColumn < this.column)// 玩家在追趕者左上方
				this.move(1);
			else if (playerRow < this.row && playerColumn > this.column)// 玩家在追趕者右上方
				this.move(3);
			else if (playerRow > this.row && playerColumn < this.column)// 玩家在追趕者左下方
				this.move(7);
			else if (playerRow > this.row && playerColumn > this.column)// 玩家在追趕者右下方
				this.move(5);
		}

		/**
		 * 追趕者移動
		 * 
		 * @param direction
		 *            1--左上方,2--上方,3--右上方,4--右方,5--右下方,6--下方,7--左下方,8--左方
		 * @return 成功走了一步則返回true;否則返回false
		 */
		private boolean move(int direction) {
			boolean succeed = false;

			switch (direction) {
			case 1:
				succeed = this.move(8);
				if (!succeed)
					succeed = this.move(2);
				break;

			case 2:
				if (row != 0 && horizontal[row][column] == Wall.notExist)// 不在第一行且沒有墻阻擋
				{
					row -= 1;
					succeed = true;
				}
				break;

			case 3:
				succeed = this.move(4);
				if (!succeed)
					succeed = this.move(2);
				break;

			case 4:
				if (column != width - 1
						&& vertical[row][column + 1] == Wall.notExist) {
					column += 1;
					succeed = true;
				}
				break;

			case 5:
				succeed = this.move(4);
				if (!succeed)
					succeed = this.move(6);
				break;

			case 6:
				if (row != height - 1
						&& horizontal[row + 1][column] == Wall.notExist) {
					row += 1;
					succeed = true;
				}
				break;

			case 7:
				succeed = this.move(8);
				if (!succeed)
					succeed = this.move(6);
				break;

			case 8:
				if (column != 0 && vertical[row][column] == Wall.notExist) {
					column -= 1;
					succeed = true;
				}
				break;
			}

			return succeed;
		}
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人性视频免费网站| av成人免费在线观看| 国产日产欧美精品一区二区三区| 99国产精品视频免费观看| 日韩电影网1区2区| 成人永久免费视频| 午夜精品一区在线观看| 中文字幕在线观看一区| 精品美女在线播放| 欧美色综合久久| 成人av免费在线| 国产专区综合网| 日韩中文字幕区一区有砖一区| 国产精品福利一区二区三区| 精品美女被调教视频大全网站| 色综合久久中文字幕综合网| 国产麻豆一精品一av一免费| 午夜精品久久久久久久久| 亚洲素人一区二区| 欧美韩国日本不卡| 久久女同精品一区二区| 91精品国产综合久久久久久久| 色妹子一区二区| 9i在线看片成人免费| 国产精品中文欧美| 极品少妇一区二区| 免费不卡在线观看| 午夜精品福利一区二区三区蜜桃| 亚洲精品视频在线看| 国产精品第一页第二页第三页| 久久综合精品国产一区二区三区| 日韩午夜小视频| 777精品伊人久久久久大香线蕉| 日本高清不卡aⅴ免费网站| 成av人片一区二区| 国产成人av影院| 国产成人无遮挡在线视频| 国产一区二区三区精品视频| 精品一区二区免费视频| 激情深爱一区二区| 极品美女销魂一区二区三区免费| 美日韩一区二区| 理论片日本一区| 久草中文综合在线| 国产又粗又猛又爽又黄91精品| 久草这里只有精品视频| 久草在线在线精品观看| 激情小说欧美图片| 国产成人啪午夜精品网站男同| 国产精品一区二区在线看| 国产精华液一区二区三区| 国产.精品.日韩.另类.中文.在线.播放 | 91原创在线视频| 99精品久久久久久| 色综合天天视频在线观看| 欧美午夜一区二区三区免费大片| 欧美曰成人黄网| 在线播放日韩导航| 欧美一区二区三区视频免费播放| 精品毛片乱码1区2区3区| 久久久久久久免费视频了| 欧美激情一区二区三区在线| 综合婷婷亚洲小说| 亚洲va欧美va人人爽午夜 | 全国精品久久少妇| 久久99精品一区二区三区| 国产成人综合在线观看| 成人免费视频网站在线观看| 色综合久久久久综合99| 欧美久久免费观看| 久久久久久久久久久电影| 亚洲欧美中日韩| 天天做天天摸天天爽国产一区| 美女一区二区视频| 国产成人aaa| 欧美最新大片在线看 | 欧美视频一区在线观看| 日韩一区二区三区av| 欧美国产欧美综合| 亚洲图片欧美一区| 国产一区二区视频在线| 色94色欧美sute亚洲13| 日韩精品自拍偷拍| 亚洲欧洲日产国产综合网| 日韩国产在线观看| 成人看片黄a免费看在线| 欧美日韩成人综合在线一区二区 | 国产日韩精品一区二区三区| 亚洲欧洲av另类| 蜜芽一区二区三区| 播五月开心婷婷综合| 91精品在线麻豆| 亚洲欧洲另类国产综合| 看片网站欧美日韩| 日本韩国欧美国产| 国产亚洲欧洲997久久综合| 亚洲一区在线观看免费 | 成人免费一区二区三区视频| 人人超碰91尤物精品国产| 成人美女视频在线观看18| 日韩欧美国产精品一区| 一区二区三区不卡视频在线观看| 国精产品一区一区三区mba视频 | 天堂一区二区在线免费观看| 粉嫩av一区二区三区| 日韩你懂的电影在线观看| 一区二区三区丝袜| 国产999精品久久久久久绿帽| 欧美日韩在线电影| 18成人在线观看| 东方欧美亚洲色图在线| 日韩三级在线免费观看| 亚洲动漫第一页| 色诱亚洲精品久久久久久| 久久亚洲精品国产精品紫薇| 日韩电影一区二区三区四区| 在线一区二区三区做爰视频网站| 国产精品无遮挡| 国产一区91精品张津瑜| 日韩一级二级三级精品视频| 亚洲国产欧美一区二区三区丁香婷| 成人午夜免费电影| 久久精品综合网| 国产在线视频一区二区三区| 欧美一二三区在线| 五月开心婷婷久久| 欧美无乱码久久久免费午夜一区| 最新成人av在线| 99re热视频精品| 国产精品国产三级国产有无不卡 | 6080亚洲精品一区二区| 亚洲国产精品一区二区www| 色综合久久久久久久| 国产精品久久三| 成人av集中营| 中文字幕亚洲在| 99久久99久久免费精品蜜臀| 中文字幕乱码一区二区免费| 国产69精品久久久久777| 国产精品欧美极品| 成人av影视在线观看| 国产精品视频你懂的| 成人免费av在线| 亚洲欧洲精品天堂一级| 91浏览器入口在线观看| 亚洲精品你懂的| 欧美日韩免费一区二区三区 | 国产成人午夜视频| 中文字幕乱码日本亚洲一区二区| 懂色av一区二区夜夜嗨| 国产欧美日韩不卡免费| 在线成人午夜影院| 奇米在线7777在线精品 | 亚洲一区二区三区精品在线| 欧美日韩视频在线观看一区二区三区| 亚洲国产综合在线| 91精品国产91久久久久久一区二区| 婷婷夜色潮精品综合在线| 欧美一区二区三级| 国产美女在线观看一区| 国产欧美一二三区| 日本乱码高清不卡字幕| 日韩在线a电影| 久久午夜电影网| 91在线porny国产在线看| 亚洲风情在线资源站| 精品国产电影一区二区| 高清日韩电视剧大全免费| 亚洲精品中文在线| 777久久久精品| 国产成人午夜电影网| 亚洲黄色录像片| 日韩欧美123| 91香蕉视频污在线| 日本午夜精品视频在线观看| 国产三级一区二区| 在线观看免费视频综合| 激情伊人五月天久久综合| 最好看的中文字幕久久| 日韩一区二区高清| av资源网一区| 另类中文字幕网| 亚洲女人小视频在线观看| 日韩精品一区二区在线| 99精品视频在线观看| 麻豆国产精品一区二区三区 | 国模大尺度一区二区三区| 中文字幕日韩欧美一区二区三区| 欧美高清视频在线高清观看mv色露露十八 | 日韩一区在线免费观看| 日韩亚洲欧美一区二区三区| 不卡av在线网| 韩国女主播成人在线观看| 一区二区三区四区在线免费观看| 欧美电视剧免费观看| 色婷婷精品久久二区二区蜜臂av | 国产成人夜色高潮福利影视| 亚洲成在线观看| 欧美激情综合网| 91精品国产欧美一区二区18|