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

📄 maze25d.java

📁 用JAVA进行游戏设计的图书 可以了解JAVA的运行状态 和编写游戏的特点
💻 JAVA
字号:
// 程序:2.5D斜角迷宫
// 范例文件:Maze25D.java

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Maze25D extends Applet
    implements Runnable, KeyListener 
{
   int          AppletWidth, AppletHeight,floorW,floorH,
                blockW,blockH,charW,key,sx;
   Image        floor,block,block2,OffScreen,character2;
   Thread       newThread;
   Graphics     drawOffScreen; 
   MediaTracker MT;
   Sprite2 s; 

   int[][] maze = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                   {0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1},
                   {1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,1},
                   {1,0,0,0,1,1,1,1,1,0,1,0,1,1,0,1},
                   {1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1},
                   {1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,1},
                   {1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,1},
                   {1,1,0,0,2,0,1,1,1,1,0,1,0,0,1,1},
                   {1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,1},
                   {1,0,0,0,0,0,0,0,1,0,0,1,1,0,1,1},
                   {1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1},
                   {1,1,1,0,0,0,1,1,1,0,1,0,1,1,1,1},
                   {1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1},
                   {1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1},
                   {1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0},
                   {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};

   public void init()
   {
      addKeyListener(this);   

      setBackground(Color.white); 
  
      AppletWidth  = getSize().width;
      AppletHeight = getSize().height; 

      MT           = new MediaTracker(this);
      floor = getImage(getDocumentBase(),"Images/floor.gif");         
      block = getImage(getDocumentBase(),"Images/block3.gif");        
      block2 = getImage(getDocumentBase(),"Images/block4.gif");    
      character2 = getImage(getDocumentBase(),"Images/character2.gif");          
      MT.addImage(floor,0);
      MT.addImage(block,0);
      MT.addImage(block2,0);
      MT.addImage(character2,0);
     
      try
      {
         showStatus("图像载入中(Loading Images)...");
         MT.waitForAll();
      }
      catch(InterruptedException E){ } 
      
      OffScreen     = createImage(AppletWidth,AppletHeight);
      drawOffScreen = OffScreen.getGraphics();

      floorW = floor.getWidth(this);
      floorH = floor.getHeight(this);
      blockW = block.getWidth(this);
      blockH = block.getHeight(this);
      charW = character2.getHeight(this);
 
      sx = 0;

      s = new Sprite2(charW, maze);
   }

   public void start()
   {
      newThread = new Thread(this);
      newThread.start();
   }

   public void stop()
   {
      newThread = null;
   }

   public void update(Graphics g)
   {
      paint(g);    
   }

   public void paint(Graphics g)
   {

      g.drawImage(OffScreen,0,0,this);
   }


   private int rotateX(int j, int i)
   {
      int x;
      x = (j-i)*floorW + 500;
      return (int) (x*Math.cos(60*Math.PI/180));
   }


   private int rotateY(int j, int i)
   {
      int x, y;
      x = j*floorW + 150;
      y = -i*floorH;
      y = (int )-(y*Math.cos(-15*Math.PI/180) + 
             x*Math.sin(60*Math.PI/180)*Math.sin(-15*Math.PI/180));
      y = y - i * floorH/2;
      return y ;
   }


    public void run()
    {
        while(true)
        {

          drawOffScreen.clearRect(0,0,AppletWidth,AppletHeight);

           int X,Y;

           for(int i=1; i < 16; i++)
              for(int j=1; j < 16; j++)
              {

                 X = rotateX(j,i);
                 Y = rotateY(j,i);
                 drawOffScreen.drawImage(floor,X,Y,X+floorW,
                      Y+floorH,0,0,floorW,floorH,this);
              }


           for(int i=0; i < 16; i++)
              for(int j=0; j < 16; j++)
              {
                 if(maze[i][j] != 0) {

                    X = rotateX(j,i);
                    Y = rotateY(j,i);
                    drawOffScreen.drawImage(block,X,Y+4,X+blockW,
                        Y+blockH+4,0,0,blockW,blockH,this);
                 }
              }        


           X = rotateX(s.indexJ,s.indexI) - 5;
           Y = rotateY(s.indexJ,s.indexI) - 5;


           drawOffScreen.drawImage(character2,X,Y,X+30,Y+30,
                                 sx, 0, sx+50,50,this);

           if(maze[s.indexI][s.indexJ+1] != 0) {
              X = rotateX(s.indexJ+1,s.indexI);
              Y = rotateY(s.indexJ+1,s.indexI);
              drawOffScreen.drawImage(block2,X,Y+4,X+blockW,
                    Y+blockH+4,0,0,blockW,blockH,this);
           }

           if(maze[s.indexI+1][s.indexJ] != 0) {
              X = rotateX(s.indexJ,s.indexI+1);
              Y = rotateY(s.indexJ,s.indexI+1);
              drawOffScreen.drawImage(block2,X,Y+4,X+blockW,
                    Y+blockH+4,0,0,blockW,blockH,this);
           }

           if(maze[s.indexI+1][s.indexJ+1] != 0) {
              X = rotateX(s.indexJ+1,s.indexI+1);
              Y = rotateY(s.indexJ+1,s.indexI+1);
              drawOffScreen.drawImage(block2,X,Y+4,X+blockW,
                    Y+blockH+4,0,0,blockW,blockH,this);
           }

           repaint();

           sx += 50;
           if(sx >= 300)
              sx = 0;

           try {
               Thread.sleep(200);
           }
           catch (InterruptedException e)
           {

           }
        }
    }


   public void keyTyped(KeyEvent e)  { }

   public void keyPressed(KeyEvent e)
   {
      key = e.getKeyCode();

      if(key == KeyEvent.VK_RIGHT)
         s.moveUp(); 
      else if(key == KeyEvent.VK_LEFT)
         s.moveDown(); 
      else if(key == KeyEvent.VK_UP)
          s.moveLeft();  
      else if(key == KeyEvent.VK_DOWN)
          s.moveRight(); 
   }

   public void keyReleased(KeyEvent e) {}
}

⌨️ 快捷键说明

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