⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 world.java

📁 J2ME飞机设计游戏,希望对学习J2ME的程序员有所帮助
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
				objectPool.releasUsed(bullet);
				isCollide = false;
				continue;
			}

			if (isBulletOutScreen(bullet)) {
				objectPool.releasUsed(bullets[idx]);
			} else {
				bullet.changeMyState();
			}
		}
	}
	
	private boolean isCollideInEnemySpirit(ObjectPool objectPool, Bullet bullet) {
		if (objectPool != null) {
			if (objectPool.getUseObjectNum() != 0) {
				Object[] actors = objectPool.getFreeActor();
				for (int idx = 0; idx < actors.length; idx++) {
					Actor actor = (Actor) actors[idx];
	
					if (actor.isNotUsed() == true) {
						continue;
					}
	
					if (bullet.isCollideInTopLeft(actor, bullet)) {
						actor.setEnemyLife(actor.getEnemyLife()
								- bullet.getDamage());
	
						// newBullet(1, actor.getIPosX(), actor.getIPosY()
						// - (20 << 8), 0, 4 << 8);
	
						if (actor.getEnemyLife() <= 0) {
							Bullet bombEffect = (Bullet) bombEffectPool
									.getNextFree();
							bombEffect.setIPosX(actor.getIPosX());
							bombEffect.setIPosY(actor.getIPosY());
	
							// battlePlane.setIScore(battlePlane.getIScore() +
							// 50);
							BattlePlaneActor.iScore += 50;
							actor.setAction((byte) 0);
							actor.setCurrentFrame(-1);
							objectPool.releasUsed(actor);
						}
	
						isCollide = true;
					}
				}
			}
		}
		return isCollide;
	}

	private boolean isCollideInEnemy(ObjectPool objectPool, Bullet bullet) {
		if (objectPool != null) {
			if (objectPool.getUseObjectNum() != 0) {
				Object[] actors = objectPool.getFreeActor();
				for (int idx = 0; idx < actors.length; idx++) {
					Actor actor = (Actor) actors[idx];

					if (actor.isNotUsed() == true) {
						continue;
					}

					if (actor.isCollideInCenterTopLeft(actor, bullet)) {

						actor.setEnemyLife(actor.getEnemyLife()
								- bullet.getDamage());

						// newBullet(1, actor.getIPosX(), actor.getIPosY()
						// - (20 << 8), 0, -4 << 8);

						if (actor.getEnemyLife() <= 0) {
							Bullet bombEffect = (Bullet) bombEffectPool
									.getNextFree();
							bombEffect.setIPosX(actor.getIPosX());
							bombEffect.setIPosY(actor.getIPosY());

							// battlePlane.setIScore(battlePlane.getIScore() +
							// 50);
							BattlePlaneActor.iScore += 50;
							objectPool.releasUsed(actor);
						}

						isCollide = true;
						//return true;
					}
				}
			}
		}
		return isCollide;
		// return isCollide;
	}
	
	private void changeRocketState(ObjectPool objectPool) {
		if (objectPool.getUseObjectNum() == 0) {
			return;
		}

		Object[] bullets = objectPool.getFreeActor();

		for (int idx = 0; idx < bullets.length; idx++) {
			Bullet bullet = (Bullet) bullets[idx];
			if (bullet.isNotUsed() == true) {
				continue;
			}

			if (bullet.getMoveTimes() == 0) {
				bullet.setXSpeed(0);
				bullet.setYSpeed(6 << 8);
				
				if (bullet.getFumeInterval() % 6 == 0) {
					newBullet(10, bullet.getIPosX() + (4 << 8), bullet.getIPosY()
							+ (20 << 8), 0, 6<<8);
				}
				
				bullet.setFumeInterval(bullet.getFumeInterval() + 1);

			} else {
				bullet.setMoveTimes(bullet.getMoveTimes() - 1);
			}

			if(isCollideInEnemySpirit(helicopterActorPool, bullet)){
				BattlePlaneActor.iScore  += 10;
				objectPool.releasUsed(bullet);
				isCollide = false;
				continue;
			}

			if(isCollideInEnemySpirit(hidingPlaneActorPool, bullet)){
				BattlePlaneActor.iScore  += 10;
				objectPool.releasUsed(bullet);
				isCollide = false;
				continue;
			}

			if(isCollideInEnemySpirit(scoutPlaneActorPool, bullet)){
				BattlePlaneActor.iScore  += 10;
				objectPool.releasUsed(bullet);
				isCollide = false;
				continue;
			}

			if(isCollideInEnemy(largePlaneActorPool, bullet)){
				BattlePlaneActor.iScore  += 10;
				objectPool.releasUsed(bullet);
				isCollide = false;
				continue;
			}
			
			if(isCollideInEnemy(plAircraftActorPool, bullet)){
				BattlePlaneActor.iScore  += 10;
				objectPool.releasUsed(bullet);
				isCollide = false;
				continue;
			}

			if(isCollideInEnemy(shipActorPool,bullet)){
				BattlePlaneActor.iScore  += 10;
				objectPool.releasUsed(bullet);
				isCollide = false;
				continue;
			}

			if (isBulletOutScreen(bullet)) {
				objectPool.releasUsed(bullets[idx]);
			} else {
				bullet.changeMyState();
			}
		}
	}
	
	private void changeBombState(ObjectPool objectPool) {
		if (objectPool.getUseObjectNum() == 0) {
			return;
		}

		Object[] bullets = objectPool.getFreeActor();

		for (int idx = 0; idx < bullets.length; idx++) {
			Bullet bullet = (Bullet) bullets[idx];
			if (bullet.isNotUsed() == true) {
				continue;
			}

			// 与飞机的碰撞
			isCollideInEnemySpirit(helicopterActorPool, bullet);
			isCollideInEnemySpirit(hidingPlaneActorPool, bullet);
			isCollideInEnemySpirit(scoutPlaneActorPool, bullet);
			isCollideInEnemy(largePlaneActorPool, bullet);
			isCollideInEnemy(plAircraftActorPool, bullet);
			isCollideInEnemy(shipActorPool,bullet);

			// 与子弹的碰撞
			isCollideInEnemyBullet(helicopterBulletPool, bullet);
			isCollideInEnemyBullet(largePlaneBulletPool, bullet);
			isCollideInEnemyBullet(bossBulletPool, bullet);

			//objectPool.releasUsed(bullet);
			if(isBossAppear != true){
				objectPool.releasUsed(bullet);
			}
		}
	}
	
	private void changeSpeedState() {
		if(battlePlane.isAddSpeed() == true){
			//System.out.println("speedCount===" + battlePlane.getSpeedCount());

			battlePlane.setSpeedCount((byte)(battlePlane.getSpeedCount() - 1));
			if (battlePlane.getSpeedCount() <= 0) {
				//还原速度
				battlePlane.setXSpeed(4);
				battlePlane.setYSpeed(6);
				battlePlane.setSpeedCount((byte)100);
				battlePlane.setAddSpeed(false);
			}
		}
	}
	
	private void changeWingState(ObjectPool objectPool) {
		if (objectPool.getUseObjectNum() == 0) {
			return;
		}

		Object[] bullets = objectPool.getFreeActor();

		for (int idx = 0; idx < bullets.length; idx++) {
			Bullet bullet = (Bullet) bullets[idx];
			if (bullet.isNotUsed() == true) {
				continue;
			}

			if(bombTimes % 23 == 0){
				if (isBossAppear == false) {
					destroyEnemy(helicopterActorPool);
					destroyEnemy(hidingPlaneActorPool);
					destroyEnemy(scoutPlaneActorPool);
					destroyEnemy(largePlaneActorPool);
					destroyEnemy(plAircraftActorPool);
				}
				
				//第3关BOSS出现的时候
				if(isBossAppear == true && gameLevel == 3)
				destroyEnemy(plAircraftActorPool);

				//第2关BOSS没出现的时候
				if (gameLevel == 2 && isBossAppear == false) {
					destroyEnemy(shipActorPool);
				}

				destroyBoss();
				destroyEnemyBullet(helicopterBulletPool);
				destroyEnemyBullet(largePlaneBulletPool);
				destroyEnemyBullet(bossBulletPool);
			}

			if(bombTimes % 5 == 0)
			bomb(random.nextInt() % 12);
			
			bombTimes++;
			if ((bullet.getIPosX() >> 8) > GameConstant.iSCREEN_WIDTH + 4) {
				objectPool.releasUsed(bullet);
			} else {
				bullet.changeMyState();
			}
		}
	}

	private void destroyEnemyBullet(ObjectPool objectPool) {
		if (objectPool != null) {
			if (objectPool.getUseObjectNum() == 0) {
				return;
			}

			Object[] enemyBullets = objectPool.getFreeActor();

			for (int idx = 0; idx < enemyBullets.length; idx++) {
				Bullet enemyBullet = (Bullet) enemyBullets[idx];
				if (enemyBullet.isNotUsed() == true) {
					continue;
				}

				objectPool.releasUsed(enemyBullet);
			}
		}
	}
	
	private void bomb(int bombTimes){
		switch(bombTimes){
		case 0:
			newBullet(7, 150 << 8, 30 << 8, 0, 0);
			break;
		case 1:
			newBullet(7, 24 << 8, 24 << 8, 0, 0);
			break;
		case 2:
			newBullet(7, 11 << 8, 51 << 8, 0, 0);
			break;
		case 3:
			newBullet(7, 100 << 8, 20 << 8, 0, 0);
			break;
		case 4:
			newBullet(7, 20 << 8, 95 << 8, 0, 0);
			break;
		case 5:
			newBullet(7, 120 << 8, 90 << 8, 0, 0);
			break;
		case 6:
			newBullet(7, 70 << 8, 115 << 8, 0, 0);
			break;
		case 7:
			newBullet(7, 130 << 8, 168 << 8, 0, 0);
			break;
		case 8:
			newBullet(7, 140 << 8, 130 << 8, 0, 0);
			break;
		case 9:
			newBullet(7, 30 << 8, 160 << 8, 0, 0);
			break;
		case 10:
			newBullet(7, 95 << 8, 65 << 8, 0, 0);
			break;
		case 11:
			newBullet(7, 85 << 8, 105 << 8, 0, 0);
			break;
		}
	}

	private void destroyEnemy(ObjectPool objectPool) {
		if (objectPool != null) {
			if (objectPool.getUseObjectNum() == 0) {
				return;
			}

			Object[] enemys = objectPool.getFreeActor();

			for (int idx = 0; idx < enemys.length; idx++) {
				Actor enemy = (Actor) enemys[idx];
				if (enemy.isNotUsed() == true) {
					continue;
				}

				enemy.setEnemyLife(enemy.getEnemyLife() - 4);

				if (enemy.getEnemyLife() <= 0) {
					Bullet bombEffect = (Bullet) bombEffectPool.getNextFree();
					bombEffect.setIPosX(enemy.getIPosX());
					bombEffect.setIPosY(enemy.getIPosY());

					BattlePlaneActor.iScore += 50;
					objectPool.releasUsed(enemy);
				}
			}
		}
	}

	private void destroyBoss() {
		if (isBossAppear) {
			switch (gameLevel) {
			case 1:
				frBoss.isCollideWithBoss();
				break;
			case 2:
				secBoss.isCollideWithBoss();
				break;
			case 3:
				thBoss.isCollideWithBoss();
				break;
			}
		}
	}

	private void doEnemyBullet() {
		changeBulletState(helicopterBulletPool);
		changeBulletState(largePlaneBulletPool);
		changeTrackBulletState(missileBulletPool);
		changeSupplyBulletState(supplyBullet);

		if(isBossAppear == true && gameLevel != 3){
			changeBulletState(bossBulletPool);
		}
		
		//changeBulletSpiritState(thunderBulletpool);
		
	}
	
	/**
	 * @param bullets
	 */
	private void changeSupplyBulletState(Bullet[] bullets) {
		if (bullets != null) {
			for (int sIdx = 0; sIdx < bullets.length; sIdx++) {
				Bullet bullet = bullets[sIdx];
				if (bullet.isNotUsed() == true) {
					continue;
				}

				if (battlePlane.getLiftNum() >= 0
						&& bullet.isCollideInCenter(battlePlane, bullet)) {
					if (bullet.getAction() == 0) {
						battlePlane.setBattle_life(150);
					} else if (bullet.getAction() == 1) {
						// 子弹只能升2级
						if (battlePlane.getBulletLevel() < 3) {
							battlePlane.setBulletLevel((byte) (battlePlane
									.getBulletLevel() + 1));
						}
					} else if (bullet.getAction() == 2) {
						battlePlane.setBattle_magic(100);
					}

					bullet.setNotUsed(true);
				} else {
					if (bullet.getMoveTimes() > 0) {
						if ((bullet.getIPosX() >> 8) >= GameConstant.iSCREEN_WIDTH
								|| (bullet.getIPosX() >> 8) <= 0) {
							bullet.setXSpeed(-bullet.getXSpeed());
						} else if ((bullet.getIPosY() >> 8) >= GameConstant.iSCREEN_HEIGHT
								|| (bullet.getIPosY() >> 8) <= 0) {
							bullet.setYSpeed(-bullet.getYSpeed());
						}

						bullet.changeMyState();
					} else {
						if (isBulletOutScreen(bullet)) {
							bullet.setNotUsed(true);
						} else {
							bullet.changeMyState();
						}
					}
				}

				bullet.setMoveTimes(bullet.getMoveTimes() - 1);
			}
		}
	}

	private void doEffect(){
		changeBulletEffect(bombEffectPool);
		
		if(isBossAppear == true)
		changeBulletEffect(bulletEffectPool);
		
		changeBulletEffect(somkeEffectPool);
	}

	private void changeBulletState(ObjectPool actorPool) {
		if (actorPool != null) {
			if (actorPool.getUseObjectNum() == 0) {
				return;
			}

			Object[] bullets = actorPool.getFreeActor();

			for (int idx = 0; idx < bullets.length; idx++) {
				Bullet bullet = (Bullet) bullets[idx];
				if (bullet.isNotUsed() == true) {
					continue;
				}

				if (battlePlane.getLiftNum() >= 0
						&& battlePlane.isInvincible() == false
						&& bullet.isCollideInTopLeft(battlePlane, bullet)) {
					battlePlane.setBattle_life(battlePlane.getBattle_life()
							- bullet.getDamage());

					actorPool.releasUsed(bullets[idx]);

					if (battlePlane.getBattle_life() <= 0) {
						Bullet bombEff

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -