Swing写的老鼠走迷宫游戏,mvc含最佳路径算法

  • S1_851713
    了解作者
  • 61KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-13 04:27
    上传日期
可以编辑地图,读取存储地图文件,可以显示最佳路径, 部分代码http://zhaoyangjay.javaeye.com/admin/blogs/640998
maze.rar
  • maze
  • maze
  • MenuController.class
    3.4KB
  • Point.java
    881B
  • RightPanel$UserTask.class
    624B
  • MenuController.java
    3.8KB
  • GameMap.class
    938B
  • PathFinder.class
    3.1KB
  • GameMap.java
    835B
  • Mouse.class
    1.3KB
  • Point.class
    1.4KB
  • Mouse.java
    718B
  • MainFrame.class
    1.4KB
  • PathFinder.java
    3.4KB
  • Gui.class
    6.1KB
  • MenuController$1.class
    741B
  • MenuController$2.class
    2.3KB
  • Gui.java
    5KB
  • RightPanel.class
    1.5KB
  • RightPanel.java
    732B
  • MainFrame.java
    779B
  • util
  • SerUtil.java
    1.1KB
  • SerUtil.class
    1.3KB
  • .settings
  • org.eclipse.jdt.ui.prefs
    99B
  • org.eclipse.jdt.core.prefs
    629B
  • .project
    380B
  • road2.bmp
    776B
  • load.bmp
    2MB
  • spring.log
    140B
  • mouse.bmp
    55.3KB
  • path.jpg
    12.5KB
  • Start_end.bmp
    4.8KB
  • log4j.properties
    746B
  • Thumbs.db
    12KB
  • .classpath
    384B
  • block.bmp
    774B
内容介绍
package maze; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JOptionPane; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class Gui extends javax.swing.JPanel implements KeyListener , MouseListener { public GameMap map; public maze.Mouse mouse; public maze.RightPanel rightPanel; Image blockImage=null; Image startEndImage=null; Image mouseImage=null; Image loadImage=null; Image pathImage=null; public final static int BLOCK_SIZE=30; public Gui( GameMap map) { mouse=new Mouse(); this.map=map; try { mouseImage=ImageIO.read(new File("mouse.bmp")); blockImage=ImageIO.read(new File("block.bmp")); startEndImage=ImageIO.read(new File("Start_end.bmp")); loadImage=ImageIO.read(new File("road2.bmp")); pathImage=ImageIO.read(new File("path.jpg")); } catch (IOException e) { e.printStackTrace(); } this.setOpaque(true); this.setBackground(Color.WHITE); this.setVisible(true); this.setSize(BLOCK_SIZE*8, BLOCK_SIZE*6); setFocusable(true); this.addKeyListener(this); this.addMouseListener(this); } public void init() { } public void paint(Graphics g) { super.paint(g); g.drawRect(0 ,0, BLOCK_SIZE*8, BLOCK_SIZE*8); for(int i=0;i<map.arr.length;i++) { for(int j=0;j<map.arr.length;j++) { if(map.arr[i][j]==map.BLOCK) { g.drawImage(blockImage, 30*j, 30*i,30,30, null); } else if(map.arr[i][j]==map.LOAD) { g.drawImage(loadImage, 30*j, 30*i, 30, 30, null); } else if(map.arr[i][j]==map.EDN) { g.drawImage(startEndImage, 30*j, 30*i, 30, 30, null); } } } g.drawImage(mouseImage, 30*mouse.getX(), 30*mouse.getY(), 30, 30, null); } private final Log log = LogFactory.getLog(getClass()); public void keyPressed(KeyEvent e) { //up log.info(mouse.getX()+"_"+mouse.getY()); if(e.getKeyChar()=='w') { if(!(this.map.arr[mouse.getY()-1][mouse.getX()]==map.BLOCK)) { this.mouse.up(); handelIfIsEnd(mouse.getX(),mouse.getY()); this.repaint(); } } //down else if(e.getKeyChar()=='s') { if(!(this.map.arr[mouse.getY()+1][mouse.getX()]==map.BLOCK)) { this.mouse.down(); handelIfIsEnd(mouse.getX(),mouse.getY()); this.repaint(); } } // left else if(e.getKeyChar()=='a') { if(!(this.map.arr[mouse.getY()][mouse.getX()-1]==map.BLOCK)) { this.mouse.left(); handelIfIsEnd(mouse.getX(),mouse.getY()); this.repaint(); } } //right else if(e.getKeyChar()=='d') { if(!(this.map.arr[mouse.getY()][mouse.getX()+1]==map.BLOCK)) { this.mouse.right(); handelIfIsEnd(mouse.getX(),mouse.getY()); this.repaint(); } } } public void showPath() { maze.PathFinder finder=new maze.PathFinder(map); for(Point p:finder.FindPath()) { log.info("正在显示最佳路径坐标为"+p); try { Thread.sleep(600); } catch (InterruptedException e) { e.printStackTrace(); } this.getGraphics().drawImage(pathImage, 30*p.getX(), 30*p.getY(), 30, 30, null); } } private void handelIfIsEnd(int x,int y) { if(x==this.map.arr.length-1&&y==this.map.arr.length-1) { int count=this.getRightPanel().getCount(); this.getRightPanel().stopCount(); if(count<60) JOptionPane.showMessageDialog( null,"成功完成挑战!"); else JOptionPane.showMessageDialog( null,"挑战失败!超时!"); } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } public void mouseClicked(MouseEvent e) { if(this.map.arr[e.getY()/this.BLOCK_SIZE][e.getX()/this.BLOCK_SIZE]==map.BLOCK) { log.info("双击了地图中的墙面"); this.map.arr[e.getY()/this.BLOCK_SIZE][e.getX()/this.BLOCK_SIZE]=map.LOAD; } else if(this.map.arr[e.getY()/this.BLOCK_SIZE][e.getX()/this.BLOCK_SIZE]==map.LOAD) { log.info("双击了地图中的路"); this.map.arr[e.getY()/this.BLOCK_SIZE][e.getX()/this.BLOCK_SIZE]=map.BLOCK; } this.repaint(); } public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } public GameMap getMap() { return map; } public void setMap(GameMap map) { this.map = map; } public maze.RightPanel getRightPanel() { return rightPanel; } public void setRightPanel(maze.RightPanel rightPanel) { this.rightPanel = rightPanel; } }
评论
    相关推荐
    • SpringRaft:使用Spring MVC和Spring WebFlux的筏式共识算法实现
      SpringRaft是一个学位论文项目,包含在Servlet和Reactive堆栈中的Raft共识算法实现中。 此实现应该是模块化的,以便可以对其进行扩展,并且应该是通用的,以便可以在不同的用例中重用它们。 该项目的最终目的是在...
    • apriori算法求频繁项集和关联规则 mvc架构 java版
      完整代码Java版,mvc架构,优美的界面。置信度和关联规则一并解决
    • AES加密算法
      基于MVC的实现的AES加密解密算法,采用的是Unicode编码的格式,每个字符占两个字节。所以输入的原文为八个字符。密钥根据长度不同为8个,12个或者16个不等。程序会首先将字符转化成十六进制再进行加密,每一步的加密...
    • 时间片轮转算法调度实验
      用java实验的时间片轮转法调度实验,基于MVC框架,界面简单,功能完好,代码简单易懂~
    • 走迷宫算法mvc++6.0win32应用程序
      走迷宫算法,microsoft visual c++6.0 下win32窗口应用程序演示,实现走迷宫算的窗口界面化显示。
    • PureMVC_Iso_Astar.rar
      a星算法,寻路算法,有fla源代码,有演示
    • 类似画图板的程序-VC源码
      我的毕业设计. 拥有画图板的部分功能.有一部分图象处理功能. 但只能处理不大于1024*768像素的bmp格式文件. ... 图象处理的核心算法都在CBmpDat类中. 我的大部分程序都采用的MVC模式,数据与显示是分离的.
    • programming-2:UoPeople-编程2课程
      单元1-异常,switch语句,算法分析 单元2-递归和链接列表 单元3- ADT,堆栈和队列 第4单元-递归下降解析器和通用编程 单元5-通用编程 第6单元-文件和网络; 先进的GUI编程 单元7-动作和按钮; 复杂组件和MVC 单元8-...
    • 用Jsp写的用户管理系统采用MVC模式(分页,CRUD,行显示颜色交替算法,转向和转发的区别)
      这样能学习到J2EE中的2种重要的技术,明白MVC的核心知识,代码有注释,对理解有很大的帮助,理解其中的Jsp,Servlet,Java class(javabean)在项目中充当的角色,其中有分页技术,经典的行颜色交替算法,...
    • todomvp:最小可行比萨
      TODO: MVP 算法接受以下输入: 标准的“切片”尺寸 该组需要的切片总数 比萨店的比萨大小和价格 TODO: MVP 算法将依次推荐几个满足团体需求的披萨订购选项。 我可以用它做什么? 好吧,您可以使用它来确定要订购...