以下代码鬼自由跑->
需要
鬼一出来就在不停的计算离人最近的路线,然后过去抓住人.
我找个直线算法
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 修改完在存与油箱中,感谢,请不要修改用户及密码谢谢合作
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();
}
}