📄 npcai.java
字号:
/**
* 怪物AI类
* 实现怪物AI
**/
package bin;
public class NpcAI implements Runnable
{
// 声明变量
int gameBoyX, gameBoyY;
int npcX, npcY;
String switchImage;
Thread thr;
Gameboy game;
int over = 0;
/**
* 获得玩家、怪物的坐标和怪物的左右图片的控制变量char变量swithImage
**/
public NpcAI(Gameboy game)
{
//把获得的参数付给本类变量
this.game = game;
thr = new Thread(this);
thr.start();
//调用下面的判断方法,把玩家坐标和怪物坐标传给判断方法
//judge(gameBoyX, gameBoyY, npcX, npcY);
}
public void run()
{
while (true)
{
this.gameBoyX = game.GameboyX;
this.gameBoyY = game.GameboyY;
try
{
thr.sleep(100);
}
catch(Exception e)
{
e.printStackTrace();
}
judge(gameBoyX, gameBoyY, npcX, npcY);
}
}
/**
* 判断玩家坐标和怪物坐标的差别
**/
public void judge(int gameBoyX, int gameBoyY, int npcX, int npcY)
{
//临时变量,用于接收怪物和玩家相遇的返回值
boolean temp = false;
/**
* 分别判断玩家坐标的X和怪物坐标的X,玩家坐标的Y和怪物坐标的Y的大小比,然后进入不同的移动方法。
* 路线方法返回值付给临时变量temp,由temp来判断是否相遇。true = 相遇,false = 没有相遇
**/
if (npcX < gameBoyX && npcY < gameBoyY)
{
//判断之后,把坐标作为参数传给移动方法,以下同这个,只是路线不同
move1(gameBoyX, gameBoyY, npcX, npcY);
}
else if (npcX < gameBoyX && npcY == gameBoyY)
{
move2(gameBoyX, gameBoyY, npcX, npcY);
}
else if (npcX < gameBoyX && npcY > gameBoyY)
{
move3(gameBoyX, gameBoyY, npcX, npcY);
}
else if (npcX > gameBoyX && npcY < gameBoyY)
{
move4(gameBoyX, gameBoyY, npcX, npcY);
}
else if (npcX > gameBoyX && npcY == gameBoyY)
{
move5(gameBoyX, gameBoyY, npcX, npcY);
}
else if (npcX > gameBoyX && npcY > gameBoyY)
{
move6(gameBoyX, gameBoyY, npcX, npcY);
}
else if (npcX == gameBoyX && npcY < gameBoyY)
{
move7(gameBoyX, gameBoyY, npcX, npcY);
}
else if (npcX == gameBoyX && npcY > gameBoyY)
{
move8(gameBoyX, gameBoyY, npcX, npcY);
}
else if (npcX == gameBoyX && npcY == gameBoyY)
{
temp = true;
}
else
{
temp = false;
}
//如果临时变量temp为ture,证明玩家和怪物相遇,就调用give()
if(temp == true)
{
give();
}
}
/**
* 实现怪物到玩家的基本路线 move1 - move8
**/
public void move1(int gameBoyX, int gameBoyY, int npcx, int npcy)
{
//向右移动的图片标识
switchImage = "Right";
//怪物路线循环体
//先移动怪物的X坐标点,直到达到玩家的X坐标点
for (int k = npcX; k <= gameBoyX;k = k + 20)
{
//k的值最后就是玩家的X坐标
npcX = k;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
//再移动怪物的Y坐标点,这时怪物的X坐标就为玩家的X坐标,直到达到玩家的Y坐标点
//这样的话,怪物就移动到了玩家的坐标
for (int l = npcY; l <= gameBoyY; l = l + 24)
{
//l的值最后也就是玩家的Y坐标
npcY = l;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
}
/**
* 怪物移动路线都差不多,主要是判断完后,X和Y,哪个少了就+,哪个多了就-,相等不就变
**/
public void move2(int gameBoyX, int gameBoyY, int npcx, int npcy)
{
//向右移动的图片标识
switchImage = "Right";
//因为玩家的Y坐标点和怪物的Y坐标点是相等的,所以之移动怪物的X坐标
for (int k = npcX; k <= gameBoyX; k = k + 20)
{
npcX = k;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
}
public void move3(int gameBoyX, int gameBoyY, int npcx, int npcy)
{
//向右移动的图片标识
switchImage = "Right";
for (int k = npcX; k <= gameBoyX; k = k + 20)
{
npcX = k;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
for (int l = npcY; l >= gameBoyY; l = l - 24)
{
npcY = l;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
}
public void move4(int gameBoyX, int gameBoyY, int npcx, int npcy)
{
//向左移动的图片标识
switchImage = "Left";
for (int k = npcX; k >= gameBoyX; k = k - 20)
{
npcX = k;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
for (int l = npcY; l <= gameBoyY; l = l + 24)
{
npcY = l;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
}
public void move5(int gameBoyX, int gameBoyY, int npcx, int npcy)
{
//向左移动的图片标识
switchImage = "Left";
for (int k = npcX; k >= gameBoyX; k = k -20)
{
npcX = k;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
}
public void move6(int gameBoyX, int gameBoyY, int npcx, int npcy)
{
//向左移动的图片标识
switchImage = "Left";
for (int k = npcX; k >= gameBoyX; k = k - 20)
{
npcX = k;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
for (int l = npcY; l >= gameBoyY; l = l - 24)
{
npcY = l;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
}
public void move7(int gameBoyX, int gameBoyY, int npcx, int npcy)
{
//向右移动的图片标识
switchImage = "Right";
for (int k = npcY; k <= gameBoyY; k = k + 24)
{
npcY = k;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
}
public void move8(int gameBoyX, int gameBoyY, int npcx, int npcy)
{
//向左移动的图片标识
switchImage = "Left";
for (int k = npcY; k >= gameBoyY; k = k - 24)
{
npcY = k;
try
{
Thread.sleep(250);
}
catch(Exception e)
{
e.getMessage();
}
}
}
/**
* 玩家和怪物相遇后,调用此方法,返回true,让玩家类处理
**/
public boolean give()
{
over = 1;
npcX = 0;
npcY = 0;
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -