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

📄 ai3.java

📁 华容道源程序代码。非常简单。非常实用。快来看看吧
💻 JAVA
字号:
// 程序:复合型移动
// 范例文件:AI3.java

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

class Sprite
{
   int    spriteX,spriteY,VX,VY,AppletWidth,AppletHeight,CurrentMode;
   AI3    Game;
   Random R;

   public Sprite(AI3 Game,int AppletWidth,int AppletHeight)
   {
      this.Game         = Game; 
      this.AppletWidth  = AppletWidth;
      this.AppletHeight = AppletHeight;
      R                 = new Random();
      CurrentMode       = 0;

      spriteX   = 0;
      spriteY   = 0;
      VX        = 0;
      VY        = 0;
   }

   public void updateState()
   {
      if(Math.abs(R.nextInt() % 100) < 5)   //变换行为的机率
      {
         if(CurrentMode == 0)
            CurrentMode = 1;
         else
            CurrentMode = 0;
      }


      switch(CurrentMode)
      {
         case 0: //逃离型Sprite
                 if(spriteX + 25 > Game.getX())
                    VX = 1;
                 else if(spriteX + 25 < Game.getX())
                    VX = -1;
                 else
                    VX = 0;

                 if(spriteY + 25 > Game.getY())
                    VY = 1;
                 else if(spriteY + 25 < Game.getY())
                    VY = -1;
                 else
                    VY = 0;
                 break;
         case 1: //追踪型Sprite
                 if(spriteX + 25 > Game.getX())
                    VX = -1;
                 else if(spriteX + 25 < Game.getX())
                    VX = 1;
                 else
                    VX = 0;

                 if(spriteY + 25 > Game.getY())
                    VY = -1;
                 else if(spriteY + 25 < Game.getY())
                    VY = 1;
                 else
                    VY = 0;
                 break;         
      }   
 
      spriteX = spriteX + VX;
      spriteY = spriteY + VY;

      if(spriteX < 0)
         spriteX = 0;
      else if(spriteX > AppletWidth - 50)
         spriteX = AppletWidth - 50;

      if(spriteY < 0)
         spriteY = 0;
      else if(spriteY > AppletHeight - 50)
         spriteY = AppletWidth - 50;
   }

   public void paintSprite(Graphics g)
   {  
      //绘制实心圆形与中央十字准心
      g.setColor(Color.black);           
      g.fillOval(spriteX,spriteY,50,50);
      
      g.setColor(Color.white);
      g.drawLine(spriteX + 25,spriteY + 15,spriteX + 25,spriteY + 35);
      g.drawLine(spriteX + 15,spriteY + 25,spriteX + 35,spriteY + 25);
   }
}

public class AI3 extends Applet 
       implements Runnable,MouseListener,MouseMotionListener

{
   int      mouseX,mouseY,AppletWidth,AppletHeight;   
   Image    OffScreen, Hammer, Pig;
   Thread   newThread; 
   Graphics drawOffScreen;
   boolean  update;

   Sprite   S;

   public void init()
   {
      mouseX       = 0;
      mouseY       = 0;
      AppletWidth  = getSize().width;
      AppletHeight = getSize().height;
      update       = false;

      Hammer   = getImage(getDocumentBase(),"Images/hammer1.gif");
      Pig      = getImage(getDocumentBase(),"Images/pighead1.gif");
    
      S            = new Sprite(this,AppletWidth,AppletHeight);
      //建立追踪Sprite

      addMouseListener(this);            //注册事件处理函数
      addMouseMotionListener(this);


      //建立次画面
      OffScreen      = createImage(AppletWidth,AppletHeight);
      drawOffScreen  = OffScreen.getGraphics();
   }

   public void start()                    //start()函数  
   {
      newThread = new Thread(this);       //建立与启动新线程
      newThread.start();
   }

   public void stop()                     //stop()函数
   {
      newThread = null;                   //将线程设为null
   }

   public void paint(Graphics g)
   {
      //只清除此部分区域的图像
      drawOffScreen.clearRect(0,0,AppletWidth,AppletHeight);

      //绘制Sprite到次画面中
      S.paintSprite(drawOffScreen);
           
      //将次画面贴到主画面上
      g.drawImage(OffScreen,0,0,this); 
   }

   public void update(Graphics g)         //update()函数
   {
      paint(g);                           //只单纯呼叫paint()函数
   }

   public void run()
   {
      while(newThread != null)
      {
         repaint();                       //重绘图像

         try
         {
            Thread.sleep(33);             //暂停33毫秒
         }
         catch(InterruptedException E){ }

         if(update)
            S.updateState();              //更改Sprite
      }
   }

   //==================================================================
   public int getX()    //让Sprite取得鼠标X坐标
   {
      return mouseX;
   }

   public int getY()    //让Sprite取得鼠标Y坐标
   {
      return mouseY;
   }

   //=====实现MouseListener界面=======================================
   public void mouseExited(MouseEvent e)      //鼠标离开Component
   {
      update = false;                         //不更改Sprite
   }
   
   public void mouseClicked(MouseEvent e){}   //鼠标按键被按下后放开
   
   public void mouseEntered(MouseEvent e)     //鼠标进入Component
   {
      update = true;                          //更改Sprite
   }
   
   public void mousePressed(MouseEvent e){}   //鼠标按键被按下
   
   public void mouseReleased(MouseEvent e){}  //鼠标按键放开
  
   //=====实现MouseMotionListener界面=================================
   public void mouseMoved(MouseEvent e)       //鼠标移动时
   {
      mouseX = e.getX();                      //取得鼠标X坐标
      mouseY = e.getY();                      //取得鼠标Y坐标
      showStatus("(" + mouseX + "," + mouseY + ")");
   }  
 
   public void mouseDragged(MouseEvent e){}   //鼠标拖曳时 
}
                                                                                    

⌨️ 快捷键说明

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