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
- 1
- 2
- 3
- 4
前往页