安卓飞机大战实现自动躲避和瞄准

0. 使用方法

将下面三个函数添加到GameHelper.java,然后在GameView.java的onPaint()函数的碰撞检测下面调用。

1. 自动躲避

/**
	 * 自动躲避
	 */
	public static void autoMove(Player player, List<Enemy> enemys) {
     
		int xp = player.getX();
		int yp = player.getY();
		int w = player.getWidth();
		
		for(Enemy e : enemys) {
     
			if(e.getY() + 100 > yp) {
     
				if(e.getX() >= xp && e.getX() - xp <= w) {
     
					player.move(-5, 0);
					if(e.getX() - xp <= w && xp <= w/2) {
     
						player.move(w, 0);
					}
				}
				if(xp >= e.getX() && xp - e.getX() <= w) {
     
					player.move(5, 0);
					if(xp - e.getX() <= w/2 && xp + w/2 >= screenWidth) {
     
						player.move(-w, 0);
					}
				}
			}
		}
	}

2. 自动瞄准

/**
	 * 自动瞄准模式
	 */
	public static void autoDefend(Player player, List<Enemy> enemys) {
     
		for(Enemy e : enemys) {
     
			if(e.getY() > screenHeight - 2*player.getHeight()) return;
			
			int xe = e.getX() + e.getWidth()/2;
			player.moveTo(xe, screenHeight);
			if(e.getType() == 2) {
     
				player.move(0, 0);
				player.move(0, 0);
				player.move(0, 0);
			}
			if(e.getType() == 3) {
     
				player.move(0, 0);
				player.move(0, 0);
				player.move(0, 0);
				player.move(0, 0);
				player.move(0, 0);
			}			
		}
	}

3. 自动接装备

/**
	 * 自动接装备
	 */
	public static void autoCatch(Player player, Equipment equip) {
     
		if(!player.isAlive() || equip == null || !equip.isVisible())
			return;
		
		int x = equip.getX() + equip.getWidth()/2;
		player.moveTo(x, screenHeight);
	}

4. 注意事项

自动躲避的逻辑还是过于简单,当敌人太多的时候就躲不过去了。
当然如果火力猛的话可以缓解这种情况出现的概率。
自动接装备很容易和自动躲避冲突,谨慎使用╮( ̄▽ ̄)╭!

你可能感兴趣的:(java,安卓,linux,嵌入式)