展开全部

//老鼠走迷宫程序

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Maze1 extends JPanel implements KeyListener

{ private int Width, Height,blockWidth, blockHeight;

//character是老鼠,floor是地板,block1是砖,block2是另一种e69da5e887aa3231313335323631343130323136353331333330343237砖

private Image character, floor, block1, block2;

//backGround是背景,offScreen是用于双缓冲用的次画面

private Image backGround, offScreen;

private Graphics drawOffScreen;

//这个类用来控制老鼠的移动

private SpriteAndMaze spriteAndMaze;

//是否进行了初始化

private boolean init = false;

//地图

private int[][] maze =

{{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},

{0,0,0,0,0,1,0,0,2,0,0,1,1,0,0,0,2,2},

{2,0,1,0,1,0,0,0,2,0,1,0,0,1,1,0,2,2},

{2,0,0,0,0,0,1,1,2,0,1,0,1,0,0,0,0,2},

{2,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,2},

{2,1,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,2},

{2,1,0,0,0,0,1,0,0,2,0,0,0,0,2,0,2,2},

{2,1,0,0,2,0,1,1,1,2,0,1,0,0,2,0,1,2},

{2,1,1,1,1,0,0,0,1,2,0,0,0,0,1,0,0,2},

{2,0,0,0,0,0,0,0,1,0,0,1,1,0,2,1,0,2},

{2,0,2,0,1,0,0,0,1,0,1,0,0,0,0,0,0,2},

{2,1,2,0,0,0,1,1,1,0,1,0,1,1,2,1,0,2},

{2,0,0,0,2,0,0,0,1,1,0,0,0,0,0,0,0,0},

{2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};

//老鼠的宽和高

private int characterWidth, characterHeight;

//初始化程序

public void initial()

{

addKeyListener(this);

setBackground(Color.white);

//取得JPanel的高度,宽度

Width = this.getWidth();

Height =this.getHeight();

//mediaTracker对象是用来跟踪影像的加载情况的,

//影像加载完毕之后才可以显示出来,否则就会出错

MediaTracker mediaTracker = new MediaTracker(this);

//获得image对象

character = Toolkit.getDefaultToolkit().getImage("character.gif");

floor = Toolkit.getDefaultToolkit().getImage("floor.gif");

block1 = Toolkit.getDefaultToolkit().getImage("block1.gif");

block2 = Toolkit.getDefaultToolkit().getImage("block2.gif");

//把几个image对象都放在mediaTracker里,第二个参数是加载的优先权,目前设

//成0,即优先权都相同

mediaTracker.addImage(character,0);

mediaTracker.addImage(floor,0);

mediaTracker.addImage(block1,0);

mediaTracker.addImage(block2,0);

try

{

//等待影像加载完毕

mediaTracker.waitForAll();

}

catch(InterruptedException e)

{ e.printStackTrace(); }

//spriteAndMaze对象的构造,0,1是老鼠的初始坐标,maze是迷宫数组对象

spriteAndMaze = new SpriteAndMaze(0, 1, maze);

//砖的宽度

blockWidth = Width / maze[0].length;

//砖的高度

blockHeight = Height / maze.length;

//老鼠的宽度

characterWidth = Width / maze[0].length;

//老鼠的高度

characterHeight = Height / maze.length;

//建立次画面

offScreen = this.createImage(Width, Height);

drawOffScreen = offScreen.getGraphics();

// 建立地图

backGround = createImage(Width, Height);

Graphics g = backGround.getGraphics();

// 画地板

for(int i = 0; i < maze.length; i++)

{

for(int j = 0; j < maze[0].length; j++)

{

g.drawImage(floor, j*blockWidth,i*blockHeight, blockWidth,blockHeight, this);

}

}

// 画障碍物

for(int i = 0; i < maze.length; i++)

{

for(int j = 0; j < maze[0].length; j++)

{

switch(maze[i][j])

{

case 1:

g.drawImage(block1, j*blockWidth,i*blockHeight, blockWidth,blockHeight, this);

break;

case 2:

g.drawImage(block2, j*blockWidth,i*blockHeight, blockWidth,blockHeight, this);

break;

default:

g.drawImage(floor,j*blockWidth, i*blockHeight,blockWidth, blockHeight, this);

}

}

}

this.grabFocus();

init = true;

repaint();

}

public void paintComponent(Graphics g)

{

if(init == false)

{

return;

}

// 在次画面上贴地图

drawOffScreen.drawImage(backGround, 0, 0, this);

//在次画面上贴老鼠

drawOffScreen.drawImage(

character,

spriteAndMaze.getLocationX()*blockWidth,

spriteAndMaze.getLocationY()*blockHeight,

characterWidth,

characterHeight,

this);

//将次画面贴到主画面中

g.drawImage(offScreen, 0, 0,this);

}

public void update(Graphics g)

{

paint(g);

}

//=====实现KeyListener接口=====

public void keyTyped(KeyEvent e) { }

public void keyPressed(KeyEvent e)

{

int key = e.getKeyCode();

switch(key)

{

case KeyEvent.VK_RIGHT:

spriteAndMaze.moveRight();

break;

case KeyEvent.VK_LEFT:

spriteAndMaze.moveLeft();

break;

case KeyEvent.VK_UP:

spriteAndMaze.moveUp();

break;

case KeyEvent.VK_DOWN:

spriteAndMaze.moveDown();

break;

}

repaint();

}

public void keyReleased(KeyEvent e) {}

public static void main(String args[])

{

JFrame f = new JFrame();

Container c = f.getContentPane();

f.setSize(600,600);

Maze1 m = new Maze1();

c.add(m);

f.show();

//调用初始化程序

m.initial();

}

}

class SpriteAndMaze

{

private int x, y;//老鼠的x,y坐标

private int maze[][];//迷宫数组

public SpriteAndMaze() {}

//构造函数

public SpriteAndMaze(int x, int y)

{

this.x = x;

this.y = y;

}

public SpriteAndMaze(int x, int y, int[][] maze)

{

this(x, y);

this.maze = maze;

}

//老鼠向上移

public void moveUp()

{

if(isMovable(x, y-1))

{

y--;

}

}

//老鼠向下移

public void moveDown()

{

if(isMovable(x, y+1))

{

y++;

}

}

//老鼠向右移

public void moveRight()

{

if(isMovable(x+1, y))

{

x++;

}

}

//老鼠向左移

public void moveLeft()

{

if(isMovable(x-1, y))

{

x--;

}

}

//是否能移动,如果前方有障碍物,返回假

private boolean isMovable(int x, int y)

{

if(y < 0 || x < 0 || x >= maze[0].length || y >=maze.length)

return false;

if(maze[y][x] == 0)

return true;

else

return false;

}

public int getLocationX()

{ return x;

}

public int getLocationY()

{

return y;

}

public void setLocationX(int locationX)

{ this.x = locationX;

}

public void setLocationY(int locationY)

{

this.y= locationY;

}

public int[][] getMaze()

{

return maze;

}

public void setMaze(int[][] maze)

{

this.maze = maze;

}

}

追问

这个我也有不过没有修改迷宫和计时功能,也不能找出最短路径

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java 迷宫代码_老鼠走迷宫代码 JAVA相关推荐

  1. Java老鼠走迷宫流程图_老鼠走迷宫(队列实现)

    1.[文件] Game.cpp ~ 2KB 下载(134) // Game.cpp: implementation of the Game class. // // #include "Ga ...

  2. java老鼠走迷宫算法_老鼠走迷宫java算法

    说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选一个 ...

  3. java递归老鼠走迷宫_老鼠走迷宫----------递归问题

    老鼠走迷宫是一个典型的递归的问题,写几个这样的题才可以充分理解递归的过程. 写递归的过程有几点需要注意: (1)递归结束的条件 (2)递归过程的脉络,即逻辑要清晰. / // // 在迷宫中显示老鼠能 ...

  4. Java算法六:老鼠走迷宫

    老鼠走迷宫(Mouse) 问题说明: 老鼠走迷宫是循环求解的基本类型,我们在二维数组中用2来表示迷宫的墙壁,使用1来表示老鼠的行走路径,并用程序求出从入口到出口的距离. 问题解答: 实际上是使用回溯算 ...

  5. java迷宫队列实现_老鼠走迷宫(队列实现)

    1.[文件] Game.cpp ~ 2KB     下载(133) // Game.cpp: implementation of the Game class. // // #include &quo ...

  6. java代码老鼠走迷宫案例

    java代码老鼠走迷宫案例 public class MiGong{//编写一个main方法public static void main(String[] args) {//思路// 1. 先创建迷 ...

  7. 米奇小老鼠走迷宫问题代码以及注释

    代码浅析已在代码注释里,代码如下: /**@author 旧梦吖*@version 1.0* 走迷宫问题*/ public class Maze {public static void main(St ...

  8. java递归老鼠走迷宫_递归算法求老鼠走迷宫(C语言)

    /*说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁, 使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选 ...

  9. 老鼠走迷宫-java

    推荐韩老师课程:https://www.bilibili.com/video/BV1fh411y7R8?t=260&p=225 老鼠走迷宫-Maze.java package lbxx.day ...

最新文章

  1. 关于R和Python的安全机制
  2. Redis-参数说明
  3. 使用NPOI——C#和WEB API导出到Excel
  4. docker export/import到docker容器迁移的思考
  5. 用户增长 - BG/NBD概率模型预测用户生命周期LTV(二)
  6. 使用JSON和Jersey的Java RESTful Web服务
  7. html书签展示(带搜索)
  8. Java IO流(精简版)
  9. js 翻转数组 倒序排列
  10. 图像识别没你想的那么难!看完这篇你也能成专家
  11. 情有独钟,迷情电子三五年(七)
  12. Zotero实现双电脑+云端同步—Zotfile、坚果云
  13. 《女神异闻录5》那套酷炫界面的背后,是18年来的始终如一
  14. MFC基本图形的绘制(一)设备环境类CDC、画笔和画刷
  15. 自然语言处理数据集收集
  16. Compilation failed while executing : strip 问题解决
  17. html投影电脑,投影仪怎么连接笔记本电脑
  18. Centos 7安装Quagga
  19. php学生管理系统视频教程,学生管理系统——PHP
  20. Deep Gait Recognition: A Survey

热门文章

  1. 程序员开发常用英语词汇汇总,满满的干货!
  2. Building fresh packages...
  3. (转)国企,私企与外企利弊通观--关键时刻给应届毕业生及时点拨5
  4. C#:实现gnome sort 侏儒排序算法(附完整源码)
  5. 微信小程序中用户登录和登录态维护
  6. 服务器日志文件已被清除恢复,Linux服务器入侵后日志文件删除/恢复方法
  7. 计算机win7卡顿如何解决方法,电脑win7系统出现卡顿怎么处理
  8. 纯CSS实现三角形图标
  9. 【JS】跨域问题读写cookie的解决办法
  10. mplayer undefined reference to `av_lzo1x_decode''render_one_glyph'