Java 开发实例(第3篇),绘制迷宫1 生成迷宫地图

您所在的位置:网站首页 简易迷宫图片怎么画好看 Java 开发实例(第3篇),绘制迷宫1 生成迷宫地图

Java 开发实例(第3篇),绘制迷宫1 生成迷宫地图

2024-07-10 18:16| 来源: 网络整理| 查看: 265

开发环境: 操作系统Win10。 1.下载Java 15,提取码:soft 2.下载软件 Eclipse 2020-12,提取码:soft

下载本博客的实例工程代码,提取码:soft

        前天2月9日在逛B站App时,意外看到一个很有意思的视频,Up“暗流啊暗流”通过视频讲了一个迷宫算法,看得手痒难耐,就花了一些时间写了这么一个迷宫算法最基本应用—即生成迷宫。         简单来讲,生成迷宫就是一个砸墙的过程,砸墙规则可以归纳为以下三点:          1,只有当隔壁房间没去过的时候,墙才可以砸          2,无墙可砸的时候,就传送到一个去过的房间里          3,每一个房间都要到达         有想了解迷宫算法更多应用的,可以到这里去看视频,从迷宫生成算法到创意编程

代码实现粗糙,水平有限,如果有更好的实装方案,可以精简代码,或更加灵巧可扩展,等等,欢迎批评指正,提建议。

文章目录 1. 工程目录结构2. 代码内容2.1 主启动类 StartFrame.java2.2 迷宫类 Maze.java2.3 迷宫房间类 MazeMember.java 3. 运行效果

1. 工程目录结构

在这里插入图片描述

2. 代码内容 2.1 主启动类 StartFrame.java package maze.view; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; /** * 用迷宫算法,随机生成迷宫 * 思想:生成迷宫的过程就是一个在小方格里砸墙的过程 * 迷宫算法规则: * 1,只有当隔壁房间没去过的时候,墙才可以砸 * 2, 无墙可砸的时候,就传送到一个去过的房间里 * 3, 每一个房间都要到达 * @author 见瑞彬 * */ public class StartFrame extends JFrame implements ActionListener { /** 序列ID */ private static final long serialVersionUID = 1L; private int frameX = 0; private int frameY = 0; private int frameW = 800; private int frameH = 700; /** 迷宫类 */ private Maze mazeObject; /** 迷宫区域 */ private Rectangle mazeArea; /** 按钮 */ private JButton remakeMazeButton; private JTextField rowCountField; private JTextField colCountField; private JLabel rowCountLabel; // 居中 { Dimension clientSize = Toolkit.getDefaultToolkit().getScreenSize(); frameX = (int) ((clientSize.getWidth() - frameW) / 2); frameY = (int) ((clientSize.getHeight() - frameH) / 2); // 设定迷宫 mazeObject = new Maze(); // 设定迷宫区域 mazeArea = new Rectangle(20, 80, 600, 600); } public StartFrame() { // 设定布局 FlowLayout flow = new FlowLayout(); flow.setAlignment(FlowLayout.LEFT); this.setLayout(flow); // 添加按钮 remakeMazeButton = new JButton("重新生成迷宫"); remakeMazeButton.addActionListener(this); this.add(remakeMazeButton); // 设定水平垂直的方格数 rowCountLabel = new JLabel("水平方格数"); this.add(rowCountLabel); rowCountField = new JTextField(6); this.add(rowCountField); // 窗体属性 this.setBounds(frameX, frameY, frameW, frameH); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); this.validate(); } /** * 重绘窗体 */ @Override public void paint(Graphics g) { super.paint(g); drawMaze(g); } /** * 画迷宫 * * @param g */ private void drawMaze(Graphics g) { // 迷宫线颜色 g.setColor(Color.RED); // 画迷宫区域边线 g.drawRect(mazeArea.x, mazeArea.y, mazeArea.width, mazeArea.height); // 取得每个方格宽度和高度 int width = mazeArea.width / mazeObject.getRowCount(); int height = mazeArea.height / mazeObject.getColCount(); // 绘制迷宫元素 MazeMember[][] mazeTable = mazeObject.create(); // 设定左上角方格为起点 mazeTable[0][0].setMazeMemberId(MazeMember.ID.VISITOR); // 设定右下角方格为终点 mazeTable[mazeObject.getRowCount() - 1][mazeObject.getColCount() - 1].setMazeMemberId(MazeMember.ID.TARGET); // 遍历迷宫区域的所有方格 for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3