📄 plane.java
字号:
public class Plane
{
public String status=new String("wait"); //定义飞机的状态,初始值为等待
public String color=new String(); //飞机的颜色
int player,station; //定义玩家x,飞机的位置
public PlaneGame pg=new PlaneGame(); //产生一个PlaneGame对象
public ConXY xy; //飞机的坐标
public int num; //随机数
private int times=0; //以后在fly()方法中有用,防止无限循环
//定义特殊点,specialP[0],specialP[1]分别与specialD[0],specialD[1]相对应,请看common()方法
private int specialP[][]={{13,17,49},{26,30,10},{39,43,23},{0,4,36}};//冲的两点升天点 在 map.gif 中有表示 P
private int specialD[][]={{29,33},{26,30},{3,7},{16,20}}; //冲后的落点 在 map.gif 中有表示 d
public Plane(String color,int player,int station,String status)
{
this.color=color;
this.player=player;
this.station=station;
this.status=status;
}
public void wait(int random) //飞机的等待方法
{
num=random;
if(num==6) //如果随机数是6那么飞机就起飞了,呵呵!
{
flyUp();
}
else{
calculnate(); //计算飞机的坐标
}
}
private void flyUp() //飞机的起飞方法
{
status="flyUp";
calculnate(); //计算飞机的坐标
}
public void move(int random) //飞机的移动方法
{
num=random;
common(num); //调用飞机的逻辑计算方法
}
public void fly() //飞机的飞跃方法
{
num=0;
times++;
station+=4; //飞机的位置加4
if(times==1)
{ common(num); } //调用飞机的逻辑计算方法
}
//请看飞机的数据流图
public void common(int random) //公共的飞机计算,检测方法
{
num=random;
station+=num;
//==================================飞机在临近航道的最后一个格子时========================
//因为飞机超过了第51格,就要转换
if(player==0&&station>51) //如果玩家是1号并且其位置大于51
{
num=0;
status="toSky";
station=station-specialP[player][2];
toSky(num); //这架飞机要进入升天格
}
else if(station>51) //如果玩家不是第一个,那么就接着判断它的位置是否是大于51的
{
station=station-52;
if(pg.moveMap[player][0]==color) //判断下一个格子是否与飞机同色
{
if(times==0||times==1) //用time来判断飞机是不是重新调用了common()
{
if(station==specialP[player][0]) //判断飞机的下一格是否为special格子
{
station=specialD[player][0]; //对应的特殊格
calculnate();
}
else if(station==specialP[player][1]) //判断飞机的下一格是否为special格子
{
station=specialD[player][1]; //对应的特殊格
calculnate();
}
fly(); //游戏规则遇到与飞机相同的格子就飞跃
calculnate();
}
}
}
//===================非(飞机在临近航道的最后一个格子时)========================
else if(pg.moveMap[player][0]==color&&station!=specialP[player][2]) //格子的颜色与飞机的颜色
{ //--并且该格子不是升天格
if(times==0||times==1) //用time来判断飞机是不是重新调用了common()
{
if(station==specialP[player][0]) //判断飞机的下一格是否为special格子
{
station=specialD[player][0];
calculnate();
}
else if(station==specialP[player][1]) //判断飞机的下一格是否为special格子
{
station=specialD[player][1];
calculnate();
}
else{ fly(); //游戏规则遇到与飞机相同的格子就飞跃
calculnate();}
}
}
else if(station>specialP[player][2]) //游戏规则是相应的飞机在到了升天格后就不能再往
{ // 下走了,必须进入升天格内,这个方法就是来
num=0; // 处理这样的问题
toSky(num);
}
else { calculnate(); }
}
public void toSky(int random) //飞机升天方法
{
num=random;
status="toSky";
station+=num;
if(station>6)
{
station=12-station; //游戏规则是飞机所撒的点数大于其位置到终点的格子数
calculnate(); // 就要退回来,这里就是来处理的
}
else if(station==6)
{
status="complete";
pg.complete[player]++;
calculnate();
}
else { calculnate(); }
}
private void calculnate() //坐标计算方法,可以忽略
{
int n=station+1;
int x,y;
x=0;y=0;
if(status=="flyUp")
{
if(player==0)
{
xy=new ConXY(180,660);
}
else if(player==1)
{
xy=new ConXY(20,180);
}
else if(player==2)
{
xy=new ConXY(500,20);
}
else if(player==3)
{
xy=new ConXY(660,500);
}
}
/////////////
if(status=="move")
{
switch(n)
{ case 1: case 4: case 18: case 21:
x=220;
if(n==1)
y=620;
if(n==4)
y=500;
if(n==18)
y=180;
if(n==21)
y=60;
xy=new ConXY(x,y);
break;
case 27: case 30: case 44: case 47:
x=460;
if(n==27)
y=60;
if(n==30)
y=180;
if(n==44)
y=500;
if(n==47)
y=620;
xy=new ConXY(x,y);
break;
case 5: case 17:
x=180;
if(n==5)
y=460;
if(n==17)
y=220;
xy=new ConXY(x,y);
break;
case 31: case 43:
x=500;
if(n==31)
y=220;
if(n==43)
y=460;
xy=new ConXY(x,y);
break;
case 8: case 14:
x=60;
if(n==8)
y=460;
if(n==14)
y=220;
xy=new ConXY(x,y);
break;
case 34: case 40:
x=620;
if(n==34)
y=220;
if(n==40)
y=460;
xy=new ConXY(x,y);
break;
case 22: case 23: case 24: case 25: case 26:
y=40;
x=(n-16)*40+20;
xy=new ConXY(x,y);
break;
case 35: case 36: case 37: case 38: case 39:
x=640;
y=(n-29)*40+20;
xy=new ConXY(x,y);
break;
case 9: case 10: case 11: case 12: case 13:
x=40;
y=(19-n)*40+20;
xy=new ConXY(x,y);
break;
case 48: case 49: case 50: case 51: case 52:
y=640;
x=(58-n)*40+20;
xy=new ConXY(x,y);
break;
case 15: case 16: case 32: case 33:
y=200;
if(n==15)
x=100;
if(n==16)
x=140;
if(n==32)
x=540;
if(n==33)
x=580;
xy=new ConXY(x,y);
break;
case 6: case 7: case 41: case 42:
y=480;
if(n==6)
x=140;
if(n==7)
x=100;
if(n==41)
x=580;
if(n==42)
x=540;
xy=new ConXY(x,y);
break;
case 2: case 3: case 19: case 20:
x=200;
if(n==2)
y=580;
if(n==3)
y=540;
if(n==19)
y=140;
if(n==20)
y=100;
xy=new ConXY(x,y);
break;
case 28: case 29: case 45: case 46:
x=480;
if(n==28)
y=100;
if(n==29)
y=140;
if(n==45)
y=540;
if(n==46)
y=580;
xy=new ConXY(x,y);
break;
}
}
if(status=="toSky"||status=="complete")
{
if(player==0)
{
n+=52;
switch(n)
{
case 53: case 54: case 55: case 56: case 57: case 58:
x=340;
y=(67-n)*40+20;
xy=new ConXY(x,y);
break;
}
}
else if(player==2)
{
n+=64;
switch(n)
{
case 65: case 66: case 67: case 68: case 69: case 70:
x=340;
y=(n-63)*40+20;
xy=new ConXY(x,y);
break;
}
}
else if(player==1)
{
n+=58;
switch(n)
{
case 59: case 60: case 61: case 62: case 63: case 64:
y=340;
x=(n-57)*40+20;
xy=new ConXY(x,y);
break;
}
}
else if(player==3)
{
n+=70;
switch(n)
{
case 71: case 72: case 73: case 74: case 75: case 76:
y=340;
x=(85-n)*40+20;
xy=new ConXY(x,y);
break;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -