以下代码鬼自由跑->
需要
鬼一出来就在不停的计算离人最近的路线,然后过去抓住人.
我找个直线算法
http://www.learnjava.cn/Article/j2se/jinjie/200706/221.html 参考初次接触望大大给与帮助
由于论坛字数限制  特把源代码存入网易163.com中[email protected] 
用户名/密码 :  ceshi_yonghu/yonghu  修改完在存与油箱中,感谢,请不要修改用户及密码谢谢合作
import java.awt.*;
import java.applet.Applet;public class PacMan extends Applet implements Runnable
{
  Dimension d;
  Font  largefont = new Font("Helvetica", Font.BOLD, 24);
  Font smallfont = new Font("Helvetica", Font.BOLD, 14);  FontMetrics fmsmall, fmlarge;  
  Graphics goff;
  Image ii;
  Thread thethread;
  MediaTracker  thetracker = null;
  Color dotcolor=new Color(192,192,0);
  int bigdotcolor=192;
  int dbigdotcolor=-2;
  Color mazecolor;  boolean ingame=false;
  boolean showtitle=true;
  boolean       scared=false;
  boolean       dying=false;  final int screendelay=120;
  final int     blocksize=24;
  final int     nrofblocks=15;
  final int     scrsize=nrofblocks*blocksize;
  final int animdelay=8;
  final int     pacanimdelay=2;
  final int     ghostanimcount=2;
  final int     pacmananimcount=4;
  final int     maxghosts=12;
  final int pacmanspeed=6;  int animcount=animdelay;
  int           pacanimcount=pacanimdelay;
  int pacanimdir=1;
  int count=screendelay;
  int ghostanimpos=0;
  int pacmananimpos=0;
  int nrofghosts=6;
  int pacsleft,score;
  int deathcounter;
  int[] dx,dy;
  int[] ghostx, ghosty, ghostdx, ghostdy, ghostspeed;  Image ghost1,ghost2,ghostscared1,ghostscared2;
  Image pacman1, pacman2up, pacman2left, pacman2right, pacman2down;
  Image pacman3up, pacman3down, pacman3left, pacman3right;
  Image pacman4up, pacman4down, pacman4left, pacman4right;  int pacmanx, pacmany, pacmandx, pacmandy;
  int reqdx, reqdy, viewdx, viewdy;
  int scaredcount, scaredtime;
  final int maxscaredtime=120;
  final int     minscaredtime=20;  final short   level1data[] = { 
19,26,26,22, 9,12,19,26,22, 9,12,19,26,26,22,
37,11,14,17,26,26,20,15,17,26,26,20,11,14,37,
17,26,26,20,11, 6,17,26,20, 3,14,17,26,26,20,
21, 3, 6,25,22, 5,21, 7,21, 5,19,28, 3, 6,21,
21, 9, 8,14,21,13,21, 5,21,13,21,11, 8,12,21,
25,18,26,18,24,18,28, 5,25,18,24,18,26,18,28,
 6,21, 7,21, 7,21,11, 8,14,21, 7,21, 7,21,03,
 4,21, 5,21, 5,21,11,10,14,21, 5,21, 5,21, 1,
12,21,13,21,13,21,11,10,14,21,13,21,13,21, 9,
19,24,26,24,26,16,26,18,26,16,26,24,26,24,22,
21, 3, 2, 2, 6,21,15,21,15,21, 3, 2, 2,06,21,
21, 9, 8, 8, 4,17,26, 8,26,20, 1, 8, 8,12,21,
17,26,26,22,13,21,11, 2,14,21,13,19,26,26,20,
37,11,14,17,26,24,22,13,19,24,26,20,11,14,37,
25,26,26,28, 3, 6,25,26,28, 3, 6,25,26,26,28  };  final int validspeeds[] = { 1,2,3,4,6,6 };
  final int maxspeed=6;由于论坛字数限制  特把源代码存入网易163.com中[email protected] 
用户名/密码 :  ceshi_yonghu/yonghu  修改完在存与油箱中,感谢,请不要修改用户及密码谢谢合作

解决方案 »

  1.   

    int currentspeed=3;
      short[] screendata;
      public String getAppletInfo()
      {
        return("PacMan - by Brian Postma");
      }  public void init()
      {
        short i;
        GetImages();    screendata=new short[nrofblocks*nrofblocks];    Graphics g;
        d = size();
        setBackground(Color.black);
        g=getGraphics();
        g.setFont(smallfont);
        fmsmall = g.getFontMetrics();
        g.setFont(largefont);
        fmlarge = g.getFontMetrics();
        ghostx=new int[maxghosts];
        ghostdx=new int[maxghosts];
        ghosty=new int[maxghosts];
        ghostdy=new int[maxghosts];
        ghostspeed=new int[maxghosts];
        dx=new int[4];
        dy=new int[4];
        GameInit();
      }
      public void GameInit()
      {
        pacsleft=3;
        score=0;
        scaredtime=maxscaredtime;
        LevelInit();
        nrofghosts=6;
        currentspeed=3;
        scaredtime=maxscaredtime;
      }
      public void LevelInit()
      {
        int  i;
        for (i=0; i<nrofblocks*nrofblocks; i++)
          screendata[i]=level1data[i];    LevelContinue();
      } 
      public void LevelContinue()
      {
        short i;
        int dx=1;
        int random;    for (i=0; i<nrofghosts; i++)
        {
          ghosty[i]=7*blocksize;
          ghostx[i]=7*blocksize;
          ghostdy[i]=0;
          ghostdx[i]=dx;
          dx=-dx;
          random=(int)(Math.random()*(currentspeed));
          if (random>(currentspeed-1))
            random=currentspeed-1;
          ghostspeed[i]=validspeeds[random];
        }
        screendata[7*nrofblocks+6]=10;
        screendata[7*nrofblocks+8]=10;
        pacmanx=7*blocksize;
        pacmany=11*blocksize;
        pacmandx=0;
        pacmandy=0;
        reqdx=0;
        reqdy=0;
        viewdx=-1;
        viewdy=0;
        dying=false;
        scared=false;
      }
      public void GetImages()
      {
        thetracker=new MediaTracker(this);    ghost1=getImage(getDocumentBase(),"pacpix/Ghost1.gif");
        thetracker.addImage(ghost1,0);
        ghost2=getImage(getDocumentBase(),"pacpix/Ghost2.gif");
        thetracker.addImage(ghost2,0);
        ghostscared1=getImage(getDocumentBase(),"pacpix/GhostScared1.gif");
        thetracker.addImage(ghostscared1,0);
        ghostscared2=getImage(getDocumentBase(),"pacpix/GhostScared2.gif");
        thetracker.addImage(ghostscared2,0);    pacman1=getImage(getDocumentBase(),"pacpix/PacMan1.gif");
        thetracker.addImage(pacman1,0);
        pacman2up=getImage(getDocumentBase(),"pacpix/PacMan2up.gif");
        thetracker.addImage(pacman2up,0);
        pacman3up=getImage(getDocumentBase(),"pacpix/PacMan3up.gif");
        thetracker.addImage(pacman3up,0);
        pacman4up=getImage(getDocumentBase(),"pacpix/PacMan4up.gif");
        thetracker.addImage(pacman4up,0);    pacman2down=getImage(getDocumentBase(),"pacpix/PacMan2down.gif");
        thetracker.addImage(pacman2down,0);
        pacman3down=getImage(getDocumentBase(),"pacpix/PacMan3down.gif");
        thetracker.addImage(pacman3down,0);
        pacman4down=getImage(getDocumentBase(),"pacpix/PacMan4down.gif");
        thetracker.addImage(pacman4down,0);    pacman2left=getImage(getDocumentBase(),"pacpix/PacMan2left.gif");
        thetracker.addImage(pacman2left,0);
        pacman3left=getImage(getDocumentBase(),"pacpix/PacMan3left.gif");
        thetracker.addImage(pacman3left,0);
        pacman4left=getImage(getDocumentBase(),"pacpix/PacMan4left.gif");
        thetracker.addImage(pacman4left,0);    pacman2right=getImage(getDocumentBase(),"pacpix/PacMan2right.gif");
        thetracker.addImage(pacman2right,0);
        pacman3right=getImage(getDocumentBase(),"pacpix/PacMan3right.gif");
        thetracker.addImage(pacman3right,0);
        pacman4right=getImage(getDocumentBase(),"pacpix/PacMan4right.gif");
        thetracker.addImage(pacman4right,0);    try
        {
          thetracker.waitForAll();
        }
        catch (InterruptedException e)
        {
          return;
        }
      }
      public boolean keyDown(Event e, int key)
      {
        if (ingame)
        {
          if (key == Event.LEFT)
          {
            reqdx=-1;
            reqdy=0;
          }
          else if (key == Event.RIGHT)
          {
            reqdx=1;
            reqdy=0;
          }
          else if (key == Event.UP)
          {
            reqdx=0;
            reqdy=-1;
          }
          else if (key == Event.DOWN)
          {
            reqdx=0;
            reqdy=1;
          }
          else if (key == Event.ESCAPE)
          {
            ingame=false;
          }
        }
        else
        {
          if (key == 's' || key == 'S')
          {
            ingame=true;
            GameInit();
          }
        }
        return true;
      }
      public boolean keyUp(Event e, int key)
      {
        if (key == Event.LEFT || key == Event.RIGHT || key == Event.UP ||  key == Event.DOWN)
        {
          reqdx=0;
          reqdy=0;
        }
        return true;
      }
      public void paint(Graphics g)
      {
        String s;
        Graphics gg;    if (goff==null && d.width>0 && d.height>0)
        {
          ii = createImage(d.width, d.height);
          goff = ii.getGraphics();
        }
        if (goff==null || ii==null)
          return;    goff.setColor(Color.black);
        goff.fillRect(0, 0, d.width, d.height);    DrawMaze();
        DrawScore();
        DoAnim();
        if (ingame)
          PlayGame();
        else
          PlayDemo();    g.drawImage(ii, 0, 0, this);
      }
      public void DoAnim()
      {
        animcount--;
        if (animcount<=0)
        {
          animcount=animdelay;
          ghostanimpos++;
          if (ghostanimpos>=ghostanimcount)
            ghostanimpos=0;
        }
        pacanimcount--;
        if (pacanimcount<=0)
        {
          pacanimcount=pacanimdelay;
          pacmananimpos=pacmananimpos+pacanimdir;
          if (pacmananimpos==(pacmananimcount-1) ||  pacmananimpos==0)
            pacanimdir=-pacanimdir;
        }
      }
      public void PlayGame()
      {
        if (dying)
        {
          Death();
        }
        else
        {
          CheckScared();
          MovePacMan();
          DrawPacMan();
          MoveGhosts();
          CheckMaze();
        }  
      }
      public void PlayDemo()
      {
        CheckScared();
        MoveGhosts();
        ShowIntroScreen();
      }
      public void Death()
      {
        int k;    deathcounter--;
        k=(deathcounter&15)/4;
        switch(k)
        {
          case 0:
            goff.drawImage(pacman4up,pacmanx+1,pacmany+1,this);
            break;
          case 1:
            goff.drawImage(pacman4right,pacmanx+1,pacmany+1,this);
            break;
          case 2:
            goff.drawImage(pacman4down,pacmanx+1,pacmany+1,this);
            break;
          default:
            goff.drawImage(pacman4left,pacmanx+1,pacmany+1,this);
        }
        if (deathcounter==0)
        {
          pacsleft--;
          if (pacsleft==0)
            ingame=false;
          LevelContinue();
        }
      }