maincanvas.java
来自「用J2ME实现的战棋类小游戏DEMO,寻路用A星算法,因为时间关系物品使用功能请」· Java 代码 · 共 1,739 行 · 第 1/4 页
JAVA
1,739 行
}}
if(indexPWLA==9){
//PlayerToEnemyA();
player.setCurrentFrames(player.up);
player.setCurrentFrame(0);
indexPWLA=0;
GameTools.currentAction=5;
}
}
}
if (enemyA.getY()==fangPlayer.getY()&&enemyA.getX()==fangPlayer.getX()){
if((enemyA.getY()==player.getY()+24)&&(enemyA.getX()==player.getX())){
indexPWLA++;
if(directP!=1){
playerWLAttacker.setCurrentFrames(playerWLAttacker.down);
playerWLAttacker.setCurrentFrame(0);
directP++;
}
playerWLAttacker.setPosition(player.getX(),player.getY());
inGameingIndex = 3;
playerWLAttacker.moveSpritePWLA();
if(indexPWLA==6){zhujueAttack(enemyA);
if(enemyX.HMAD[0]<=0){
enemyX.HMAD[0]=0;
GameTools.currentAction=13;
indexPWLA=0;
break;
}}
if(indexPWLA==9){
//PlayerToEnemyA();
player.setCurrentFrames(player.down);
player.setCurrentFrame(0);
indexPWLA=0;
GameTools.currentAction=5;
}
}
}
if (enemyA.getY()==fangPlayer.getY()&&enemyA.getX()==fangPlayer.getX()){
if((enemyA.getY()==player.getY())&&(enemyA.getX()==player.getX()-24)){
indexPWLA++;
if(directP!=1){
playerWLAttacker.setCurrentFrames(playerWLAttacker.left);
playerWLAttacker.setCurrentFrame(0);
directP++;
}
playerWLAttacker.setPosition(player.getX(),player.getY());
inGameingIndex = 3;
playerWLAttacker.moveSpritePWLA();
if(indexPWLA==6){zhujueAttack(enemyA);
if(enemyX.HMAD[0]<=0){
enemyX.HMAD[0]=0;
GameTools.currentAction=13;
indexPWLA=0;
break;
}}
if(indexPWLA==9){
// PlayerToEnemyA();
player.setCurrentFrames(player.left);
player.setCurrentFrame(0);
indexPWLA=0;
GameTools.currentAction=5;
}
}
}
if (enemyA.getY()==fangPlayer.getY()&&enemyA.getX()==fangPlayer.getX()){
if((enemyA.getY()==player.getY())&&(enemyA.getX()==player.getX()+24)){
indexPWLA++;
if(directP!=1){
playerWLAttacker.setCurrentFrames(playerWLAttacker.right);
playerWLAttacker.setCurrentFrame(0);
directP++;
}
playerWLAttacker.setPosition(player.getX(),player.getY());
inGameingIndex = 3;
playerWLAttacker.moveSpritePWLA();
if(indexPWLA==6){zhujueAttack(enemyA);
if(enemyX.HMAD[0]<=0){
enemyX.HMAD[0]=0;
GameTools.currentAction=13;
indexPWLA=0;
break;
}}
if(indexPWLA==9){
// PlayerToEnemyA();
player.setCurrentFrames(player.right);
player.setCurrentFrame(0);
indexPWLA=0;
GameTools.currentAction=5;
}
}
}
if (enemyB.getY()==fangPlayer.getY()&&enemyB.getX()==fangPlayer.getX()){
if((enemyB.getY()==player.getY()-24)&&(enemyB.getX()==player.getX())){
indexPWLA++;
if(directP!=1){
playerWLAttacker.setCurrentFrames(playerWLAttacker.up);
playerWLAttacker.setCurrentFrame(0);
directP++;
}
playerWLAttacker.setPosition(player.getX(),player.getY());
inGameingIndex = 3;
playerWLAttacker.moveSpritePWLA();
if(indexPWLA==6){zhujueAttack(enemyB);
if(enemyX.HMAD[0]<=0){
enemyX.HMAD[0]=0;
GameTools.currentAction=13;
indexPWLA=0;
break;
}}
if(indexPWLA==9){
//PlayerToEnemyA();
player.setCurrentFrames(player.up);
player.setCurrentFrame(0);
indexPWLA=0;
GameTools.currentAction=5;
}
}
}
if (enemyB.getY()==fangPlayer.getY()&&enemyB.getX()==fangPlayer.getX()){
if((enemyB.getY()==player.getY()+24)&&(enemyB.getX()==player.getX())){
indexPWLA++;
if(directP!=1){
playerWLAttacker.setCurrentFrames(playerWLAttacker.down);
playerWLAttacker.setCurrentFrame(0);
directP++;
}
playerWLAttacker.setPosition(player.getX(),player.getY());
inGameingIndex = 3;
playerWLAttacker.moveSpritePWLA();
if(indexPWLA==6){zhujueAttack(enemyB);
if(enemyX.HMAD[0]<=0){
enemyX.HMAD[0]=0;
GameTools.currentAction=13;
indexPWLA=0;
break;
}}
if(indexPWLA==9){
//PlayerToEnemyA();
player.setCurrentFrames(player.down);
player.setCurrentFrame(0);
indexPWLA=0;
GameTools.currentAction=5;
}
}
}
if (enemyB.getY()==fangPlayer.getY()&&enemyB.getX()==fangPlayer.getX()){
if((enemyB.getY()==player.getY())&&(enemyB.getX()==player.getX()-24)){
indexPWLA++;
if(directP!=1){
playerWLAttacker.setCurrentFrames(playerWLAttacker.left);
playerWLAttacker.setCurrentFrame(0);
directP++;
}
playerWLAttacker.setPosition(player.getX(),player.getY());
inGameingIndex = 3;
playerWLAttacker.moveSpritePWLA();
if(indexPWLA==6){zhujueAttack(enemyB);
if(enemyX.HMAD[0]<=0){
enemyX.HMAD[0]=0;
GameTools.currentAction=13;
indexPWLA=0;
break;
}}
if(indexPWLA==9){
// PlayerToEnemyA();
player.setCurrentFrames(player.left);
player.setCurrentFrame(0);
indexPWLA=0;
GameTools.currentAction=5;
}
}
}
if (enemyB.getY()==fangPlayer.getY()&&enemyB.getX()==fangPlayer.getX()){
if((enemyB.getY()==player.getY())&&(enemyB.getX()==player.getX()+24)){
indexPWLA++;
if(directP!=1){
playerWLAttacker.setCurrentFrames(playerWLAttacker.right);
playerWLAttacker.setCurrentFrame(0);
directP++;
}
playerWLAttacker.setPosition(player.getX(),player.getY());
inGameingIndex = 3;
playerWLAttacker.moveSpritePWLA();
if(indexPWLA==6){zhujueAttack(enemyB);
if(enemyX.HMAD[0]<=0){
enemyX.HMAD[0]=0;
GameTools.currentAction=13;
indexPWLA=0;
break;
}}
if(indexPWLA==9){
// PlayerToEnemyA();
player.setCurrentFrames(player.right);
player.setCurrentFrame(0);
indexPWLA=0;
GameTools.currentAction=5;
}
}
}
break;
case 5:
//把主角的setcurrentframe()重置一次
directP=0;
//开始判断敌人是生是死
if(enemyList[enemyActionShunXu].alive==false){GameTools.currentAction=12;}else{
// 方格移动到ENEMYA位置
fangPlayer.fangMoveToEnemyA(enemyList[enemyActionShunXu].getX(), enemyList[enemyActionShunXu].getY());
TiledLayer.setWindowPosition(fangPlayer.getX()
+ fangPlayer.getWidth() / 2 - GameTools.SCREEN_WIDTH
/ 2, fangPlayer.getY() + fangPlayer.getHeight() / 2
- GameTools.SCREEN_HEIGHT / 2);
GameTools.currentAction=6;
}
break;
case 6:
// 刷新TL2 + ENEMYA移动方法
setAllMapZero();
movingEnemyA(enemyList[1-enemyActionShunXu],enemyList[0+enemyActionShunXu]);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
GameTools.currentAction = 8;
break;
case 8:
//敌人物理攻击
fangPlayer.fangMoveToEnemyA(enemyList[enemyActionShunXu].getX(), enemyList[enemyActionShunXu].getY());
TiledLayer.setWindowPosition(fangPlayer.getX()
+ fangPlayer.getWidth() / 2 - GameTools.SCREEN_WIDTH
/ 2, fangPlayer.getY() + fangPlayer.getHeight() / 2
- GameTools.SCREEN_HEIGHT / 2);
enemyAttack(enemyList[enemyActionShunXu], 4+enemyActionShunXu, 12,enemyWLAList[enemyActionShunXu]);
break;
case 12:
if(enemyActionShunXu!=1){enemyActionShunXu+=1;GameTools.currentAction=5;}else{enemyActionShunXu=0;
GameTools.currentAction = 0;}
break;
case 13://敌人死亡动画
indexX++;
inGameingIndex = 18;
enemyDier.setPosition(enemyX.getX(),enemyX.getY());
enemyDier.moveSpritePWLA();
if(indexX==9){
System.out.println("bilibalabilibala");
if((enemyA.HMAD[0]==0)&&(enemyB.HMAD[0]==0)){GameTools.currentAction=14;break;}
enemyX.alive=false;
indexX=0;
map_tl2[enemyX.getY()/24][enemyX.getX()/24]=0;
enemyX.setPosition(0, 0);
GameTools.currentAction=5;
}
break;
case 14:
messageIndex+=1;
gameUserFace=WIN;
break;
default:
break;
}
}
}
//扣血法
public void zhujueAttack(Sprite enemyX){
this.enemyX=enemyX;
enemyX.HMAD[0]-=player.HMAD[2]-enemyX.HMAD[3];
}
public void enemyXAttack(Sprite enemyX){
player.HMAD[0]-=enemyX.HMAD[2]-player.HMAD[3];
}
//上下左右攻击范围
public void setUDLR() {
try{
if(map_tl2[player.getY() / 24 - 1][player.getX() / 24]!=0){}else
map_tl2[player.getY() / 24 - 1][player.getX() / 24] = 3;
}catch(Exception e){}
try{
if(map_tl2[player.getY() / 24 + 1][player.getX() / 24]!=0){}else
map_tl2[player.getY() / 24 + 1][player.getX() / 24] = 3;
}catch(Exception e){}
try{
if(map_tl2[player.getY() / 24 ][player.getX() / 24+1]!=0){}else
map_tl2[player.getY() / 24][player.getX() / 24 + 1] = 3;
}catch(Exception e){}
try{
if(map_tl2[player.getY() / 24 ][player.getX() / 24-1]!=0){}else
map_tl2[player.getY() / 24][player.getX() / 24 - 1] = 3;
}catch(Exception e){}
}
public void setAllMapZero() {
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 16; j++) {
if (map_tl2[i][j] == map_tl2[enemyA.getY() / 24][enemyA.getX() / 24]) {
} else if(map_tl2[i][j] == map_tl2[enemyB.getY() / 24][enemyB.getX() / 24]){}else {
if ((map_tl2[i][j] == 1)||(map_tl2[i][j]==3))
map_tl2[i][j] = 0;
}
}
}
}
// 角色/怪物 移动总方法
public void movingPlayer() {
movSteps = 3;
movShuZu = new int[500];
begin_x = player.getX() / 24;
begin_y = player.getY() / 24;
end_x = fangPlayer.getX() / 24;
end_y = fangPlayer.getY() / 24;
cw = 24;
ch = 24;
AAsterisk(begin_x, begin_y, end_x, end_y);
goRoad(end_x, end_y);
goPlayer();
rekeycode = 0;
// movingEnemyA();
}
public void movingEnemyA(Sprite enemyB,Sprite enemyA) {
map_tl2[enemyB.getY() / 24][enemyB.getX() / 24] = 2;
movStepsA = 4;
movShuZu = new int[500];
begin_x = enemyA.getX() / 24;
begin_y = enemyA.getY() / 24;
end_x = player.getX() / 24;
end_y = player.getY() / 24;
map_tl2[enemyA.getY() / 24][enemyA.getX() / 24] = 0;
cw = 24;
ch = 24;
AAsterisk(begin_x, begin_y, end_x, end_y);
goRoad(end_x, end_y);
goEnemy(enemyA);
map_tl2[enemyA.getY() / 24][enemyA.getX() / 24] = 2;
rekeycode = 0;
}
// 关于 寻路 移动 系列 方法
private void addInCloseList(int x, int y) {
closeList[y][x] = true;
closeListLength++;
}
private void addInOpenList(int x, int y) {
openList[y][x][0] = 1;
openListLength++;
}
private void removeFromOpenList(int x, int y) {
openList[y][x][0] = 0;
openListLength--;
}
// *******************************i s B a l
// k**********************************
private boolean isBalk(int x, int y) {
if (x < 0 || x >= GameTools.mWidth || y < 0 || y >= GameTools.mHeight) {
return true;
}
if (closeList[y][x])
return true;
if (map_tl2[y][x] == 2) {
return true;
}
// if(x==enemyA.getX()&&y==enemyA.getY()){
// return true;
// }
return false;
}
private void setFather(int x, int y, int f) {
openList[y][x][4] = f;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?