⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 judges.java

📁 java Labyrinth game;Provides two kinds to produce map s way stochastically: The stochastic distribut
💻 JAVA
字号:
package src;

import java.util.LinkedList;

public class Judges {
	/*
	 * 判断当前的方格是否可以通过
	 */
	public static boolean isCrossable(MazeBox box) {
		if (box.getState() == Enums.colors.STOCK)
			return false;
		else
			return true;
	}

	/*
	 * 判断两个方格是否有可行路径 boxA,boxB
	 */
	public static LinkedList<XandY> toConnected(MazeBox boxA, MazeBox boxB,
			Canvas canvas) {
		for (int i1 = 1; i1 < canvas.getRows(); i1++)
			// 清除痕迹
			for (int j1 = 1; j1 < canvas.getCols(); j1++) {
				if (canvas.getBox(i1, j1).getState() != Enums.colors.STOCK) {
					canvas.getBox(i1, j1).setsysState(Enums.colors.WAY); // 如果不为砖块,标记为空
				}
			}
		for (int i1 = 1; i1 < canvas.getRows(); i1++)
			// 清除痕迹
			for (int j1 = 1; j1 < canvas.getCols(); j1++) {
				if (canvas.getBox(i1, j1).getState() == Enums.colors.STOCK) {
					canvas.getBox(i1, j1).setsysState(Enums.colors.STOCK); // 如果为砖块,标记为不可过
				}
			}
		int iStar = boxA.getboxX(), jStar = boxA.getboxY();
		int iEnd = boxB.getboxX(), jEnd = boxB.getboxY();
		int i = iStar, j = jStar;
		char path;
		int ans = 0;
		LinkedList<Character> stack = new LinkedList<Character>(); // 初始化一个栈,用来存放走过的路径
		LinkedList<XandY> stackXandY = new LinkedList<XandY>();
		canvas.getBox(i, j).setsysState(Enums.colors.NOW);
		while (i >= iStar && i <= iEnd && j >= jStar && j <= jEnd) {// 开始遍历
			if (i == iEnd && j == jEnd) {// 到达终点,两点间有通路
				ans = 1;
				break;
			}
			if ((j + 1) <= jEnd
					&& canvas.getBox(i, j + 1).getsysState() == Enums.colors.WAY) {// 向右探测一步
				canvas.getBox(i, j).setsysState(Enums.colors.BEEN_HERE);
				stackXandY.offerLast(new XandY(i, j));
				j++;
				canvas.getBox(i, j).setsysState(Enums.colors.NOW);
				stack.offerLast('R'); // 将路径的方位存储
			} else {
				if ((i + 1) <= iEnd
						&& canvas.getBox(i + 1, j).getsysState() == Enums.colors.WAY) {// 向下探测一步
					canvas.getBox(i, j).setsysState(Enums.colors.BEEN_HERE);
					stackXandY.offerLast(new XandY(i, j));
					i++;
					canvas.getBox(i, j).setsysState(Enums.colors.NOW);
					stack.offerLast('D'); // 将路径的方位存储
				} else {
					if ((i - 1) >= iStar
							&& canvas.getBox(i - 1, j).getsysState() == Enums.colors.WAY) {// 向上探测一步
						canvas.getBox(i, j).setsysState(Enums.colors.BEEN_HERE);
						stackXandY.offerLast(new XandY(i, j));
						i--;
						canvas.getBox(i, j).setsysState(Enums.colors.NOW);
						stack.offerLast('U'); // 将路径的方位存储
					} else {
						if ((j - 1) >= jStar
								&& canvas.getBox(i, j - 1).getsysState() == Enums.colors.WAY) {// 向左探测一步
							canvas.getBox(i, j).setsysState(
									Enums.colors.BEEN_HERE);
							stackXandY.offerLast(new XandY(i, j));
							j--;
							canvas.getBox(i, j).setsysState(Enums.colors.NOW);
							stack.offerLast('L'); // 将路径的方位存储
						} else {// 遇到障碍往回走一步
							if (stack.isEmpty()) { // 判断是否回到起点了,是则退出遍历
								ans = 0;
								break;
							} else {
								if (stack.peekLast() != null) {// 判断能否取回上一步路径,取出不为空表示可以取出
									path = stack.pollLast();
									stackXandY.pollLast();
									switch (path) {
									case 'L':
										canvas.getBox(i, j).setsysState(
												Enums.colors.DEAD);// 标记为死
										j++;// 回退一步
										canvas.getBox(i, j).setsysState(
												Enums.colors.NOW);
										break;
									case 'U':
										canvas.getBox(i, j).setsysState(
												Enums.colors.DEAD);// 标记为死
										i++;// 回退一步
										canvas.getBox(i, j).setsysState(
												Enums.colors.NOW);
										break;
									case 'D':
										canvas.getBox(i, j).setsysState(
												Enums.colors.DEAD);// 标记为死
										i--;// 回退一步
										canvas.getBox(i, j).setsysState(
												Enums.colors.NOW);
										break;
									case 'R':
										canvas.getBox(i, j).setsysState(
												Enums.colors.DEAD);// 标记为死
										j--;// 回退一步
										canvas.getBox(i, j).setsysState(
												Enums.colors.NOW);
										break;
									}
								}
							}
						}
					}
				}
			}

		}
		for (int i1 = 1; i1 < canvas.getRows(); i1++)
			// 清除痕迹
			for (int j1 = 1; j1 < canvas.getCols(); j1++) {
				if (canvas.getBox(i1, j1).getState() != Enums.colors.STOCK) {
					canvas.getBox(i1, j1).setsysState(Enums.colors.WAY); // 如果不为砖块,标记为空
				}
			}
		if (ans == 1)
			return stackXandY;
		else
			return null;
	}

	public static boolean isConnected(MazeBox boxA, MazeBox boxB,
			Canvas canvas, int tem) {
		for (int i1 = 1; i1 < canvas.getRows(); i1++)
			// 清除痕迹
			for (int j1 = 1; j1 < canvas.getCols(); j1++) {
				if (canvas.getBox(i1, j1).getState() != Enums.colors.STOCK) {
					canvas.getBox(i1, j1).setsysState(Enums.colors.WAY); // 如果不为砖块,标记为空
				}
			}
		for (int i1 = 1; i1 < canvas.getRows(); i1++)
			// 清除痕迹
			for (int j1 = 1; j1 < canvas.getCols(); j1++) {
				if (canvas.getBox(i1, j1).getState() == Enums.colors.STOCK) {
					canvas.getBox(i1, j1).setsysState(Enums.colors.STOCK); // 如果为砖块,标记为不可过
				}
			}
		int iStar = boxA.getboxX(), jStar = boxA.getboxY();
		int iEnd = boxB.getboxX(), jEnd = boxB.getboxY();
		int i = iStar, j = jStar;
		char path;
		int ans = 0;
		LinkedList<Character> stack = new LinkedList<Character>(); // 初始化一个栈,用来存放走过的路径
		canvas.getBox(i, j).setsysState(Enums.colors.NOW);
		while (i >= iStar && i <= iEnd && j >= jStar && j <= jEnd) {// 开始遍历
			if (i == iEnd && j == jEnd) {// 到达终点,两点间有通路
				ans = 1;
				break;
			}
			if ((j + 1) <= jEnd
					&& canvas.getBox(i, j + 1).getsysState() == Enums.colors.WAY) {// 向右探测一步
				canvas.getBox(i, j).setsysState(Enums.colors.BEEN_HERE);
				j++;
				canvas.getBox(i, j).setsysState(Enums.colors.NOW);
				stack.offerLast('R'); // 将路径的方位存储
			} else {
				if ((i + 1) <= iEnd
						&& canvas.getBox(i + 1, j).getsysState() == Enums.colors.WAY) {// 向下探测一步
					canvas.getBox(i, j).setsysState(Enums.colors.BEEN_HERE);
					i++;
					canvas.getBox(i, j).setsysState(Enums.colors.NOW);
					stack.offerLast('D'); // 将路径的方位存储
				} else {
					if ((i - 1) >= iStar
							&& canvas.getBox(i - 1, j).getsysState() == Enums.colors.WAY) {// 向上探测一步
						canvas.getBox(i, j).setsysState(Enums.colors.BEEN_HERE);
						i--;
						canvas.getBox(i, j).setsysState(Enums.colors.NOW);
						stack.offerLast('U'); // 将路径的方位存储
					} else {
						if ((j - 1) >= jStar
								&& canvas.getBox(i, j - 1).getsysState() == Enums.colors.WAY) {// 向左探测一步
							canvas.getBox(i, j).setsysState(
									Enums.colors.BEEN_HERE);
							j--;
							canvas.getBox(i, j).setsysState(Enums.colors.NOW);
							stack.offerLast('L'); // 将路径的方位存储
						} else {// 遇到障碍往回走一步
							if (stack.isEmpty()) { // 判断是否回到起点了,是则退出遍历
								ans = 0;
								break;
							} else {
								if (stack.peekLast() != null) {// 判断能否取回上一步路径,取出不为空表示可以取出
									path = stack.pollLast();
									switch (path) {
									case 'L':
										canvas.getBox(i, j).setsysState(
												Enums.colors.DEAD);// 标记为死
										j++;// 回退一步
										canvas.getBox(i, j).setsysState(
												Enums.colors.NOW);
										break;
									case 'U':
										canvas.getBox(i, j).setsysState(
												Enums.colors.DEAD);// 标记为死
										i++;// 回退一步
										canvas.getBox(i, j).setsysState(
												Enums.colors.NOW);
										break;
									case 'D':
										canvas.getBox(i, j).setsysState(
												Enums.colors.DEAD);// 标记为死
										i--;// 回退一步
										canvas.getBox(i, j).setsysState(
												Enums.colors.NOW);
										break;
									case 'R':
										canvas.getBox(i, j).setsysState(
												Enums.colors.DEAD);// 标记为死
										j--;// 回退一步
										canvas.getBox(i, j).setsysState(
												Enums.colors.NOW);
										break;
									}
								}
							}
						}
					}
				}
			}

		}
		for (int i1 = 1; i1 < canvas.getRows(); i1++)
			// 清除痕迹
			for (int j1 = 1; j1 < canvas.getCols(); j1++) {
				if (canvas.getBox(i1, j1).getState() != Enums.colors.STOCK) {
					canvas.getBox(i1, j1).setsysState(Enums.colors.WAY); // 如果不为砖块,标记为空
				}
			}
		if (ans == 1)

			return true;
		else
			return false;

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -