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 + -
显示快捷键?