⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maze1.java

📁 走迷宫小程序,很好玩,自己和几个朋友随便玩着设计的
💻 JAVA
字号:
//人物走迷宫程序
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是另一种砖
     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;    
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -