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

📄 mazegame.java

📁 java Labyrinth game;Provides two kinds to produce map s way stochastically: The stochastic distribut
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package src;

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.util.LinkedList;

public class MazeGame extends JFrame {
	private int methodOfCreateMap = 2;// 标记地图生成方式,默认从最后一点深处优先遍历
	private int areaOftheMap = 3; // 地图的大小,默认为3

	private static MazeBox nowBox = new MazeBox(Enums.colors.NOW);

	public static void setnowBox(MazeBox box) {
		nowBox = box;
	}

	final static JLabel infOut = new JLabel(
			"声明:   该游戏使用的一些图片来自网络,图片著作权属于原作者所有!");

	public static void setinfOut(String s) {
		infOut.setText(s);
	}

	final JLabel nowStateOut = new JLabel("", SwingConstants.RIGHT);

	private Canvas canvas;

	final MenuBarPanel menuBartool = new MenuBarPanel();

	/*
	 * 以下为页面的方格数目 所有数一定一定必须必须为奇数,否则生成的迷宫百有九十九没有通路 暂不保证以下三组数外的数组显示正常
	 * (49,55)(71,79)(91, 103)
	 */
	private int rowsOfmap = 91, colsOfmap = 103;

	public int getrowsOfmap() {
		return rowsOfmap;
	}

	public int getcolsOfmap() {
		return colsOfmap;
	}

	public void setrowsAnacolsOfmap(int x, int y) {
		rowsOfmap = x;
		colsOfmap = y;
	}

	/*
	 * 主游戏类的构造函数 String,窗口标题
	 */
	public MazeGame(String title) {
		super(title);
		this.setResizable(false);
		/*
		 * 设置窗口图标
		 */
		try {
			/*
			 * 1234567893216549871234564789
			 */
			if ((new ImageIcon("inco\\tile.png") == null))
				throw new NoSuchFieldException();
			this.setIconImage(new ImageIcon("inco\\tile.png").getImage());
		} catch (NoSuchFieldException e) {
			infOut.setText("文件tile.png不存在...");
		}
		/*
		 * 设置鼠标
		 */
		Image imageCurcor = new ImageIcon("inco\\mouse.gif").getImage();
		;
		Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(
				imageCurcor, new Point(0, 0), "cursor");
		this.setCursor(cursor);
		/*
		 * 按下窗口关闭键
		 */
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		setSize(730, 720);
		Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
		setLocation((scrSize.width - getSize().width) / 2,
				(scrSize.height - getSize().height) / 2);

		Container container = getContentPane();
		container.setLayout(new BorderLayout(1, 1));

		canvas = new Canvas(rowsOfmap, colsOfmap);

		/*
		 * 创建新的地图
		 */
		if (methodOfCreateMap == 0)
			new NewMap(getCanvas());
		else
			new NewMap(getCanvas(), methodOfCreateMap);

		nowBox.setState(Enums.colors.NOW);

		this.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				canvas.repaint();// Any key to continue;
				int keyValue = e.getKeyCode();
				if (keyValue == KeyEvent.VK_DOWN) {
					if (!(canvas.getRow(nowBox) == (canvas.getRows() - 2) && canvas
							.getCol(nowBox) == (canvas.getCols() - 2))) {
						if (Judges.isCrossable(canvas.getBox(canvas
								.getRow(nowBox) + 1, canvas.getCol(nowBox)))) {
							infOut.setText("向下移动一格,操作成功!");
							nowBox.setState(Enums.colors.BACK);

							setnowBox(canvas.getBox(canvas.getRow(nowBox) + 1,
									canvas.getCol(nowBox)));
							if (canvas.getRow(nowBox) == (canvas.getRows() - 2)
									&& canvas.getCol(nowBox) == (canvas
											.getCols() - 2)) {
								infOut.setText("到达终点!");
							}
							nowBox.setState(Enums.colors.NOW);
							nowStateOut.setText("当前位置为  : " + " 第 "
									+ (canvas.getRow(nowBox) + 1) + " 行,"
									+ " 第 " + (canvas.getCol(nowBox) + 1)
									+ "列               .");
							canvas.repaint();
						} else
							infOut.setText("前方不允许通过,操作失败!");
					} else
						infOut.setText("你已经到终点啦!按N刷新地图");
				} else if (keyValue == KeyEvent.VK_UP) {
					if (!(canvas.getRow(nowBox) == (canvas.getRows() - 2) && canvas
							.getCol(nowBox) == (canvas.getCols() - 2))) {
						if (Judges.isCrossable(canvas.getBox(canvas
								.getRow(nowBox) - 1, canvas.getCol(nowBox)))) {
							infOut.setText("向上移动一格,操作成功!");
							nowBox.setState(Enums.colors.BACK);
							setnowBox(canvas.getBox(canvas.getRow(nowBox) - 1,
									canvas.getCol(nowBox)));
							if (canvas.getRow(nowBox) == (canvas.getRows() - 2)
									&& canvas.getCol(nowBox) == (canvas
											.getCols() - 2)) {
								infOut.setText("到达终点!");
							}
							nowBox.setState(Enums.colors.NOW);
							nowStateOut.setText("当前位置为  : " + " 第 "
									+ (canvas.getRow(nowBox) + 1) + " 行,"
									+ " 第 " + (canvas.getCol(nowBox) + 1)
									+ "列               .");
							canvas.repaint();
						} else
							infOut.setText("前方不允许通过,操作失败!");
					} else
						infOut.setText("你已经到终点啦!按N刷新地图");

				} else if (keyValue == KeyEvent.VK_LEFT) {
					if (!(canvas.getRow(nowBox) == (canvas.getRows() - 2) && canvas
							.getCol(nowBox) == (canvas.getCols() - 2))) {
						if (Judges.isCrossable(canvas.getBox(canvas
								.getRow(nowBox), canvas.getCol(nowBox) - 1))) {
							infOut.setText("向左移动一格,操作成功!");
							nowBox.setState(Enums.colors.BACK);
							setnowBox(canvas.getBox(canvas.getRow(nowBox),
									canvas.getCol(nowBox) - 1));
							if (canvas.getRow(nowBox) == (canvas.getRows() - 2)
									&& canvas.getCol(nowBox) == (canvas
											.getCols() - 2)) {
								infOut.setText("到达终点!");
							}
							nowBox.setState(Enums.colors.NOW);
							nowStateOut.setText("当前位置为  : " + " 第 "
									+ (canvas.getRow(nowBox) + 1) + " 行,"
									+ " 第 " + (canvas.getCol(nowBox) + 1)
									+ "列               .");
							canvas.repaint();
						} else
							infOut.setText("前方不允许通过,操作失败!");
					} else
						infOut.setText("你已经到终点啦!按N刷新地图");
				} else if (keyValue == KeyEvent.VK_RIGHT) {
					if (!(canvas.getRow(nowBox) == (canvas.getRows() - 2) && canvas
							.getCol(nowBox) == (canvas.getCols() - 2))) {
						if (Judges.isCrossable(canvas.getBox(canvas
								.getRow(nowBox), canvas.getCol(nowBox) + 1))) {
							infOut.setText("向右移动一格,操作成功!");
							nowBox.setState(Enums.colors.BACK);
							setnowBox(canvas.getBox(canvas.getRow(nowBox),
									canvas.getCol(nowBox) + 1));
							if (canvas.getRow(nowBox) == (canvas.getRows() - 2)
									&& canvas.getCol(nowBox) == (canvas
											.getCols() - 2)) {
								infOut.setText("到达终点!");
							}
							nowBox.setState(Enums.colors.NOW);
							nowStateOut.setText("当前位置为  : " + " 第 "
									+ (canvas.getRow(nowBox) + 1) + " 行,"
									+ " 第 " + (canvas.getCol(nowBox) + 1)
									+ "列               .");
							canvas.repaint();
						} else
							infOut.setText("前方不允许通过,操作失败!");
					} else
						infOut.setText("你已经到终点啦!按N刷新地图");
				} else if (keyValue == KeyEvent.VK_F1) {
					new HlepWindow();
					infOut.setText("弹出帮助窗口");
				}
			}
		});

		getContentPane().add(menuBartool, BorderLayout.NORTH);

		final JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout(1, 1));
		getContentPane().add(panel, BorderLayout.SOUTH);

		panel.add(infOut, BorderLayout.CENTER);
		nowStateOut.setText("当前位置为  : " + " 第 " + (canvas.getRow(nowBox) + 1)
				+ " 行," + " 第 " + (canvas.getCol(nowBox) + 1)
				+ "列               .");
		panel.add(nowStateOut, BorderLayout.EAST);

		getContentPane().add(canvas, BorderLayout.CENTER);

		setVisible(true);
		canvas.fanning();
		getCanvas().repaint();// 解决组件有时不能正常加载的问题

	}

	/*
	 * 得到当前画布
	 */
	public Canvas getCanvas() {
		return canvas;
	}

	/*
	 * 
	 * 工具菜单类 将会在窗口上 加入一系列菜单
	 * 
	 */
	class MenuBarPanel extends JPanel {
		final JMenuBar menuBar = new JMenuBar();// 定义一个菜单bar
		final JMenu contrl = new JMenu("游戏"); // 定义一个控制菜单
		final JMenu sys = new JMenu("设置"); // 定义一个设置菜单
		final JMenu howTocreat = new JMenu("地图");// 地图生成方式
		final JMenu help = new JMenu("帮助"); // 定义一个帮助菜单
		final JMenuItem starGame = new JMenuItem("刷新地图"),
				printWay = new JMenuItem("显示路径 (H)"), exitGame = new JMenuItem(
						"退出游戏"), aboutGame = new JMenuItem("关于"),
				setBlockColor = new JMenuItem("设置砖块色彩"),
				setBackColor = new JMenuItem("设置背景色彩"),
				resetColor = new JMenuItem("重置所有色彩"), hard1 = new JMenuItem(
						"简单的"), hard2 = new JMenuItem("中等难度的"),
				hard3 = new JMenuItem("令人发狂的(默认)"),

				byRandom = new JMenuItem("随机布点"), dfsWN = new JMenuItem(

⌨️ 快捷键说明

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