package Maze;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import java.util.Stack;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import test.Mazeelem;
public class Gui extends JFrame implements KeyListener{
private JPanel mainpnl,gamepnl,mazepnl;
private JTextField numbertext;
private JButton certainbtn,exitbtn;//迷宫构建按钮,退出按钮
private CardLayout card;
private ImageIcon photo1,photo2,baby,flag;
private JRadioButton style1rbx,style2rbx;
private int style,xx,yy,n;
private JLabel isturelbl;
public Mazeelem[][] mazes;
private JLabel picture1,picture2,replaybtn,helpbtn;
private Stack<Node> sta=new Stack<Node>();
private Stack<Mazeelem> road=new Stack<Mazeelem>();
//构造函数
public Gui() {
xx=1;
yy=1;
setTitle("maze");
//窗口界面
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口样式
setBounds(100, 100, 350, 350);
mainpnl = new JPanel();
mainpnl.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(mainpnl);
card = new CardLayout(0, 0);
mainpnl.setLayout(card);
JPanel setpnl = new JPanel();//创建容器
mainpnl.add(setpnl, "name_2797536876766");
setpnl.setLayout(new GridLayout(0, 1, 0, 20));
JLabel titlelbl = new JLabel("欢迎来到迷宫世界");//创建标签
titlelbl.setFont(new Font("宋体", Font.PLAIN, 24));//设置标签的风格
titlelbl.setHorizontalAlignment(SwingConstants.CENTER);
setpnl.add(titlelbl);//将标签加到容器中
JPanel numberpnl = new JPanel();//创建面板
setpnl.add(numberpnl);//将面板添加到容器中
numberpnl.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 5));//设置面板的框架形式
JLabel numberlbl = new JLabel("<html>迷宫维度:<br>(请输入大于8的整数)");//创建标签
numberlbl.setHorizontalAlignment(SwingConstants.CENTER);
numberpnl.add(numberlbl);//将标签加到容器中
numbertext = new JTextField();//创建文本框
numberpnl.add(numbertext);//将文本框添加到容器中
numbertext.setColumns(10);//设置文本框的大小
JLabel stylelbl = new JLabel("迷宫样式:");//创建迷宫样式提示标签
setpnl.add(stylelbl);//将提示标签添加到容器中
JPanel picturepnl = new JPanel();//创建容器
setpnl.add(picturepnl);
picturepnl.setLayout(new GridLayout(1, 0, 20, 0));//设置容器布局
ButtonGroup group = new ButtonGroup();//创建按钮
style1rbx = new JRadioButton("");
style1rbx.setHorizontalAlignment(SwingConstants.RIGHT);
picturepnl.add(style1rbx);
group.add(style1rbx);
picture1 = new JLabel("");
picture1.setHorizontalAlignment(SwingConstants.CENTER);
picturepnl.add(picture1);
style2rbx = new JRadioButton("");
style2rbx.setHorizontalAlignment(SwingConstants.RIGHT);
picturepnl.add(style2rbx);
group.add(style2rbx);
picture2 = new JLabel("");
picture2.setHorizontalAlignment(SwingConstants.CENTER);
picturepnl.add(picture2);
certainbtn = new JButton("确定");//创建按钮
setpnl.add(certainbtn);//将按钮添加到容器中
gamepnl = new JPanel();//创建游戏面板
mainpnl.add(gamepnl, "name_2797593012179");
gamepnl.setLayout(new BorderLayout(0, 0));//设置面板布局
mazepnl = new JPanel();//创建迷宫面板
gamepnl.add(mazepnl, BorderLayout.CENTER);//在游戏面板中添加迷宫面板
isturelbl = new JLabel("有通路");//创建标签
isturelbl.setHorizontalAlignment(SwingConstants.CENTER);
gamepnl.add(isturelbl, BorderLayout.NORTH);//将标签加到游戏面板中
JPanel operpnl = new JPanel();
FlowLayout flowLayout = (FlowLayout) operpnl.getLayout();
flowLayout.setHgap(2);
gamepnl.add(operpnl, BorderLayout.SOUTH);
helpbtn = new JLabel("提示(H)");
operpnl.add(helpbtn);
replaybtn = new JLabel("重玩(R)");
operpnl.add(replaybtn);
exitbtn = new JButton("退出");
operpnl.add(exitbtn);
//迷宫样式1
photo1 =new ImageIcon(Gui.class.getResource("wall.jpg"));
photo1.setImage(
photo1.getImage().getScaledInstance(110,110, Image.SCALE_DEFAULT)
);
picture1.setIcon(photo1);
//迷宫样式2
photo2 =new ImageIcon(Gui.class.getResource("wall1.jpg"));
photo2.setImage(
photo2.getImage().getScaledInstance(110,110, Image.SCALE_DEFAULT)
);
picture2.setIcon(photo2);
//起点人物
baby =new ImageIcon(Gui.class.getResource("lbxx.gif"));
baby.setImage(
baby.getImage().getScaledInstance(20,20, Image.SCALE_DEFAULT)
);
//终点旗帜
flag =new ImageIcon(Gui.class.getResource("flag.jpg"));
flag.setImage(
flag.getImage().getScaledInstance(20,20, Image.SCALE_DEFAULT)
);
JLabel lblNewLabel = new JLabel("");
picturepnl.add(lblNewLabel);
this.setFocusable(true);//设置窗口焦点
this.addKeyListener(this);//注册键盘监听
}
//主框架方法,各类监听器实现
public void major() {
//迷宫构建确认按钮监听器(界面切换)
certainbtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int i,j,p,n=0;
ImageIcon image;
image = whichstyle();//所选择样式图片
if(isnumber(numbertext.getText())) {//如果维度为整数
n=Integer.valueOf(numbertext.getText());//迷宫维度
mazes = new Mazeelem[n][n]; //迷宫元素二维数组
if(style>0) {
card.previous(mainpnl);//切换界面
setBounds(100, 100, 30+20*n, 105+20*n);//设置窗口大小
mazepnl.setLayout(new GridLayout(n, n, 0, 0));//设置布局格式
for(i=0;i<n;i++) {//创建迷宫格子
for(j=0;j<n;j++) {
mazes[i][j] = new Mazeelem(1,i,j,new JLabel());
mazepnl.add(mazes[i][j].pic);
}
}
mazes[1][1].pic.setIcon(baby);//设置起点
xx=1;
yy=1;
mazes[n-2][n-2].pic.setIcon(flag);//设置终点
for(j=0;j<n;j++) {//设置迷宫边界
mazes[0][j].pic.setIcon(image);
mazes[0][j].is=0;
mazes[j][0].pic.setIcon(image);
mazes[j][0].is=0;
mazes[n-1][j].pic.setIcon(image);
mazes[n-1][j].is=0;
mazes[j][n-1].pic.setIcon(image);
mazes[j][n-1].is=0;
}
Random rand = new Random();
for(p=0;p<n*n/3;) {//随机产生障碍
i=rand.nextInt(n-2)+1;//产生1~n-2的随机数
j=rand.nextInt(n-2)+1;
if(!((i==1&&j==1)||(i==n-2&&j==n-2))) {
mazes[i][j].pic.setIcon(image);
mazes[i][
迷宫Java带界面方向键控制
需积分: 14 117 浏览量
2018-12-05
21:02:46
上传
评论 1
收藏 1.56MB ZIP 举报
皮皮+
- 粉丝: 2
- 资源: 4
最新资源
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
- 基于哈希链表的简单人员信息管理系统
- 其他类别JdonFramework开源框架 v5.1 Build20071025-jdonframework-5.1.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈