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

📄 world.java

📁 J2ME飞机设计游戏,希望对学习J2ME的程序员有所帮助
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
				}
				bossBullet = null;
			}

			bulletEffectPool.cleanObjectPool();
			bulletEffectPool = null;

			for (int bulletEffectIdx = 0; bulletEffectIdx < GameConstant.MAX_EFFECT_BULLET; bulletEffectIdx++) {
				bulletEffect[bulletEffectIdx].cleanSpirit();
				bulletEffect[bulletEffectIdx] = null;
			}
			bulletEffect = null;
		}
		
		if (gameLevel == 3) {
			plAircraftActorPool.cleanObjectPool();
			plAircraftActorPool = null;

			for (int plIdx = 0; plIdx < GameConstant.MAX_ENEMY_AIRCRAFT; plIdx++) {
				plAircraftActor[plIdx].clean();
				plAircraftActor[plIdx] = null;
			}

			plAircraftActor = null;
		}

		if (gameLevel == 1) {
			largePlaneBulletPool.cleanObjectPool();
			largePlaneBulletPool = null;

			for (int eBullet2Idx = 0; eBullet2Idx < GameConstant.MAX_ENEMY_LARGEPLANEBULLET; eBullet2Idx++) {
				largePlaneBullet[eBullet2Idx].clean();
				largePlaneBullet[eBullet2Idx] = null;
			}
			largePlaneBullet = null;
			
		}

		if (gameLevel != 3) {
			helicopterBulletPool.cleanObjectPool();
			missileBulletPool.cleanObjectPool();
			helicopterBulletPool = null;
			missileBulletPool = null;

			for (int eBullet1Idx = 0; eBullet1Idx < GameConstant.MAX_ENEMY_HELICOPTERBULLET; eBullet1Idx++) {
				helicopterBullet[eBullet1Idx].clean();
				helicopterBullet[eBullet1Idx] = null;
			}
			helicopterBullet = null;

			for (int mIdx = 0; mIdx < GameConstant.MAX_BULLET_MISSILEBULLET; mIdx++) {
				missileBullet[mIdx].clean();
				missileBullet[mIdx] = null;
			}
			missileBullet = null;
		}

//		if (isBossAppear == true) {
//			
//		}
		
		for (int spIdx = 0; spIdx < supplyBullet.length; spIdx++) {
			supplyBullet[spIdx].cleanSpirit();
			supplyBullet[spIdx] = null;
		}
		supplyBullet = null;
		
		bgImage = null;
		dangerImage = null;
		//mapFileName = null;
		//isBossAppear = false;

		planeWingPool.realeaseAllObjectPool();
		bombEffectPool.realeaseAllObjectPool();
		System.out.println("num====" + bombEffectPool.getUseObjectNum());
		
		System.gc();
	}

	// 加载BOSS
	public void loadBoss() {
		if (bossStateCount == 10) {
			backMoveSpeed = 8;
			cleanNotUsedObject();

			if (gameLevel == 2) // 第2关BOSS出现之前把所有不需要的子弹对象全部清空
				cleanObjectBeforeSecBoss();

			if (gameLevel == 3) // 第3关BOSS出现之前把所有不需要的子弹对象全部清空
				cleanObjectBeforeThBoss();
		}

		if (bossStateCount == 40) {
			// 根据关数初始化BOSS对象
			switch (gameLevel) {
			case 1:
				frBoss = new FrBoss();
				frBoss.initData();
				break;
			case 2:
				secBoss = new SecBoss();
				secBoss.initData();
				break;
			case 3:
				thBoss = new ThBoss();
				thBoss.initData();
				break;
			}
		}

		if (bossStateCount == 60) {
			// 第3关不加载
			if (gameLevel != 3) {
				// 加载BOSS子弹
				bossBullet = new Bullet[GameConstant.MAX_ENEMY_BOSSBULLET];
				//System.out.println("boss========" + GameConstant.MAX_ENEMY_BOSSBULLET);
				for (int bossBulletIdx = 0; bossBulletIdx < GameConstant.MAX_ENEMY_BOSSBULLET; bossBulletIdx++) {
					bossBullet[bossBulletIdx] = new Bullet();

					bossBullet[bossBulletIdx].init("/enemybullet4.png", 13, 13,
							4, 0);
					bossBullet[bossBulletIdx].setIWidth(11 << 8);
					bossBullet[bossBulletIdx].setIHeight(11 << 8);
					bossBullet[bossBulletIdx].setDamage((byte) 35);
				}

				bossBulletPool = new ObjectPool(bossBullet);
			}
		}

		if (bossStateCount == 90) {
			bulletEffect = new Bullet[GameConstant.MAX_EFFECT_BULLET];
			for (int bulletEffectIdx = 0; bulletEffectIdx < GameConstant.MAX_EFFECT_BULLET; bulletEffectIdx++) {
				bulletEffect[bulletEffectIdx] = new Bullet();

				bulletEffect[bulletEffectIdx].initSpiritDate(
						"/bulletEffect.bin", "/fumeEffect.png",
						"/bulletEffectCom.bin");
			}

			bulletEffectPool = new ObjectPool(bulletEffect);
		}

		if (bossStateCount == 100) {
			transport.clean();
			transport = null;
			bossStateCount = 0;

			isBossAppear = true;
			
			System.gc();
			GameScreen.gameState = GameConstant.STATE_GAME_RUN;
		}

		bossStateCount++;
	}
	
//	public void taskComplete() {
//		if (bossStateCount == 10) {
//			cleanAllObecjt();
//			isBossAppear = false;
//		}
//		
//		if(bossStateCount == 80){
//				// 加载游戏菜单
//			menu.initGameMenu();
//		}
//
//		if (bossStateCount == 120) {
//			GameScreen.gameState = GameConstant.STATE_GAME_OVER; // 加载
//		}
//
//		bossStateCount++;
//	}
	
//	// 任务结束
//	public void drawTaskComplete(Graphics graphics) {
//		graphics.setClip(0, 0, GameConstant.iSCREEN_WIDTH,
//				GameConstant.iSCREEN_HEIGHT);
//
//		// 画背景
//		graphics.drawImage(bgImage, 0, displacement, GameConstant.TOPLEFT);
//		graphics.drawImage(bgImage, 0, displacement, GameConstant.LEFTBUTTOM);
//
//		graphics.setColor(0);
//		graphics.fillRect(0, (GameConstant.iSCREEN_HEIGHT >> 1) - 24,
//				GameConstant.iSCREEN_WIDTH, 49);
//
//		graphics.drawImage(taskCompelete,
//				(GameConstant.iSCREEN_WIDTH >> 1) - 71,
//				(GameConstant.iSCREEN_HEIGHT >> 1) - 24, GameConstant.TOPLEFT);
//	}

	public void cleanPlane() {
		battlePlane.clean();
		battlePlane = null;

		planeBulletPool.cleanObjectPool();
		planeBulletPool = null;

		for (int pbIdx = 0; pbIdx < GameConstant.MAX_PLANE_BULLET_MAIN; pbIdx++) {
			planeBullet[pbIdx].clean();
			planeBullet[pbIdx] = null;
		}

		for (byte weaponIdx = 0; weaponIdx < weaponType.length; weaponIdx++) {
			switch (weaponType[weaponIdx]) {
			case 1: // 大型导弹
				planeBigMisslePool.cleanObjectPool();
				planeBigMisslePool = null;

				for (int mIdx = 0; mIdx < GameConstant.MAX_PLANE_BULLET_BIGMISSILE; mIdx++) {
					planeBigMissle[mIdx].clean();
					planeBigMissle[mIdx] = null;
				}
				break;
			case 2: // 机枪
				planeMachineGunPool.cleanObjectPool();
				planeMachineGunPool = null;

				for (int mcIdx = 0; mcIdx < GameConstant.MAX_PLANE_BULLET_MACHINEGUN; mcIdx++) {
					planeMachineGun[mcIdx].clean();
					planeMachineGun[mcIdx] = null;
				}
				break;
			case 3: // 直射火箭
				planeRocketPool.cleanObjectPool();
				planeRocketPool = null;

				for (int rIdx = 0; rIdx < GameConstant.MAX_PLANE_BULLET_ROCKET; rIdx++) {
					planeRocket[rIdx].clean();
					planeRocket[rIdx] = null;
				}
				break;
			case 5: // 呼叫僚机
				planeWingPool.cleanObjectPool();
				planeWingPool = null;

				for (int wIdx = 0; wIdx < GameConstant.MAX_PLANE_BULLET_WING; wIdx++) {
					planeWing[wIdx].clean();
					planeWing[wIdx] = null;
				}
				break;
			case 6: // 大型炸弹
				planeBombPool.cleanObjectPool();
				planeBombPool = null;

				for (int bIdx = 0; bIdx < GameConstant.MAX_PLANE_BULLET_BOMB; bIdx++) {
					planeBomb[bIdx] = null;
				}
				break;
			}
		}

		bombEffectPool.cleanObjectPool();
		somkeEffectPool.cleanObjectPool();

		bombEffectPool = null;
		somkeEffectPool = null;

		for (int bombEffectIdx = 0; bombEffectIdx < GameConstant.MAX_EFFECT_BOMB; bombEffectIdx++) {
			bombEffect[bombEffectIdx].cleanSpirit();
			bombEffect[bombEffectIdx] = null;
		}
		bombEffect = null;

		for (int somkeEffectIdx = 0; somkeEffectIdx < GameConstant.MAX_EFFECT_SOMKE; somkeEffectIdx++) {
			somkeEffect[somkeEffectIdx].cleanSpirit();
			somkeEffect[somkeEffectIdx] = null;
		}
		somkeEffect = null;

		i = 0;
		mapLoadCount = 20;
		gameLevel = 1;
		System.gc();
	}
	
	private void doBoss() {
		if (isBossAppear == true) {
			switch (gameLevel) {
			case 1: // 第一关
				frBoss.changeMyState();
				break;
			case 2: // 第二关
				secBoss.changeMyState();
				break;
			case 3: // 第三关
				thBoss.changeMyState();
				break;
			}
		}
	}

	private boolean isHaveClass() {
		if ((helicopterActorPool != null && (helicopterActorPool
				.getUseObjectNum() > 0))
				|| (hidingPlaneActorPool != null && (hidingPlaneActorPool
						.getUseObjectNum() > 0))
				|| (largePlaneActorPool != null && (largePlaneActorPool
						.getUseObjectNum() > 0))
				|| (scoutPlaneActorPool != null && scoutPlaneActorPool
						.getUseObjectNum() > 0)
				|| (plAircraftActorPool != null && plAircraftActorPool
						.getUseObjectNum() > 0)
						|| transport.isNotUsed() == false) {
			return true;
		}
		return false;
	}

	public Bullet newBullet(int bulletType, int xPos, int yPos, int xSpeed,
			int ySpeed) {
		Bullet bullet = null;
		switch (bulletType) {
		case 0: //主角子弹
			bullet = (Bullet)planeBulletPool.getNextFree();
			break;
		case 1: // 子弹效果
			bullet = (Bullet) bulletEffectPool.getNextFree();
			break;
		case 2: // 大型飞机的子弹
			bullet = (Bullet) largePlaneBulletPool.getNextFree();
			break;
		case 3: // 直升飞机的子弹
			bullet = (Bullet) helicopterBulletPool.getNextFree();
			break;
		case 5: // 空雷
			//bullet = (Bullet) thunderBulletpool.getNextFree();
			break;
		case 4: // Boss子弹
			bullet = (Bullet) bossBulletPool.getNextFree();
			break;
		case 9: // 跟踪导弹
			bullet = (Bullet) missileBulletPool.getNextFree();
			bullet.setMoveTimes(0);
			break;
		case 7: // 爆炸效果
			bullet = (Bullet) bombEffectPool.getNextFree();
			break;
		case 6: // 大型导弹
			bullet = (Bullet) planeBigMisslePool.getNextFree();
			bullet.setFumeInterval(6);
			break;
		case 8: // 机枪
			bullet = (Bullet) planeMachineGunPool.getNextFree();
			break;
		case 10: // 导弹烟雾效果
			bullet = (Bullet) somkeEffectPool.getNextFree();
			bullet.setFumeInterval(6);
			break;
		case 11: // 直射火箭
			bullet = (Bullet) planeRocketPool.getNextFree();
			bullet.setFumeInterval(6);
			break;
		case 12: // 保险
			bullet = (Bullet) planeBombPool.getNextFree();
			break;
		case 13: //僚机
			bullet = (Bullet) planeWingPool.getNextFree();
			//bullet.setMoveTimes(0);
			break;
		case 14: //补充子弹
			for (int i = 0; i < 2; i++) {
				if (supplyBullet[i].isNotUsed() == true) {
					supplyBullet[i].setNotUsed(false);
					bullet = supplyBullet[i];
					bullet.setMoveTimes(120);
					break;
				}
			}
			break;
//		case 15: // 主角跟踪子弹
//			bullet = (Bullet) planeTrackRoketPool.getNextFree();
//			break;
		}

		bullet.setIPosX(xPos);
		bullet.setIPosY(yPos);
		bullet.setXSpeed(xSpeed);
		bullet.setYSpeed(ySpeed);

		return bullet;
	}

	//加载轨迹数据
	public void loadEnemyDatae() {
		try {
			InputStream inputStream = this.getClass().getResourceAsStream(
					"/fly.bin");
			DataInputStream datainputstream = new DataInputStream(inputStream);
			int lenght = datainputstream.read();

			enemyFlyData = new byte[lenght * 39];
			for (int idx = 0; idx < lenght; idx++) {
				for (int j = 0; j < 12; j++) {
					enemyFlyData[idx * 39 + j] = (byte) datainputstream.read();
				}

				for (int j = 0; j < 3 * enemyFlyData[idx * 39 + 11]; j++) {
					enemyFlyData[idx * 39 + 12 + j] = (byte) datainputstream
							.read();
				}
			}
			
			datainputstream.close();
			//inputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	//加载地图数据
	public int[][] loadMapData(String mapFileName,int[][] dataMap) {
		try {
			InputStream inputstream = this.getClass().getResourceAsStream(
					mapFileName);
			DataInputStream datainputstream = new DataInputStream(inputstream);
			int lenght = datainputstream.read();
//			mapData = new int[lenght][4];
//			for (byte idx = 0; idx < mapData.length; idx++) {
//				for (int i = 0; i < 4; i++) {
//					mapData[idx][i] = datainputstream.read();
//				}
//			}
			dataMap = new int[lenght][4];
			for (byte idx = 0; idx < dataMap.length; idx++) {
				for (int i = 0; i < 4; i++) {
					dataMap[idx][i] = datainputstream.read();
				}
			}
			
			//return dataMap;
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		return dataMap;
	}

	/*
	 * 加载敌人对象
	 * @orbitType 轨迹类型
	 */
	public void newEnemy(int orbitType) {
		//System.out.println("enemyNo ==" + enemyNo);
		switch (enemyFlyData[orbitType * 39 + 1]) {
		case 1: // 直升飞机
			Actor newHelicopter = (Actor) helicopterActorPool.getNextFree();
			newHelicopter.initOrbit(enemyFlyData, orbitType);
			newHelicopter.setAction((byte) 0);
			newHelicopter.setCurrentFrame(-1);

			//screenActors[enemyNo] = newHelicopter;
			break;
		case 2: // 飞机
			Actor newScoutPlane = (Actor) scoutPlaneActorPool.getNextFree();
			newScoutPlane.initOrbit(enemyFlyData, orbitType);
			newScoutPlane.setAction((byte) 0);
			newScoutPlane.setCurrentFrame(-1);
			
			//screenActors[enemyNo] = newScoutPlane;
			break;
		case 3: // 大飞机
			Actor newlargePlane = (Actor) largePlaneActorPool.getNextFree();
			newlargePlane.initOrbit(enemyFlyData, orbitType);
			
			//screenActors[enemyNo] = newlargePlane;
			break;
		case 4: // 隐形直升飞机
			Actor newHidingPlane = (Actor) hidingPlaneActorPool.getNextFree();
			newHidingPlane.initOrbit(enemyFlyData, orbitType);

⌨️ 快捷键说明

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