home
This commit is contained in:
parent
25128eaa78
commit
7a94718937
@ -192,14 +192,14 @@ public class AssetManager {
|
||||
//Heavy tank regen 3000
|
||||
|
||||
|
||||
goldMines[0] = new goldMine(2f,-0.515f, 1.25f, 30000);
|
||||
goldMines[1] = new goldMine(9.5f,-0.515f, 5.5f, 30000);
|
||||
goldMines[2] = new goldMine(2f,-0.515f, 28.25f, 40000);
|
||||
goldMines[3] = new goldMine(26f,-0.515f, 3.5f, 40000);
|
||||
goldMines[4] = new goldMine(29.75f,-0.515f, 30f, 30000);
|
||||
goldMines[5] = new goldMine(22.5f,-0.515f, 25.5f, 30000);
|
||||
goldMines[6] = new goldMine(15.5f,-0.515f, 17.75f, 50000);
|
||||
goldMines[7] = new goldMine(16.5f,-0.515f, 12.5f, 50000);
|
||||
goldMines[0] = new goldMine(2f,-0.515f, 1.25f, 45000);
|
||||
goldMines[1] = new goldMine(9.5f,-0.515f, 5.5f, 45000);
|
||||
goldMines[2] = new goldMine(2f,-0.515f, 28.25f, 50000);
|
||||
goldMines[3] = new goldMine(26f,-0.515f, 3.5f, 50000);
|
||||
goldMines[4] = new goldMine(29.75f,-0.515f, 30f, 45000);
|
||||
goldMines[5] = new goldMine(22.5f,-0.515f, 25.5f, 45000);
|
||||
goldMines[6] = new goldMine(15.75f,-0.515f, 18f, 55000);
|
||||
goldMines[7] = new goldMine(16.25f,-0.515f, 12.25f, 55000);
|
||||
|
||||
|
||||
//create trees from bitmap
|
||||
@ -251,8 +251,8 @@ public class AssetManager {
|
||||
for(int i = 0; i < 10; i ++){
|
||||
|
||||
for(int j = 0; j < 6; j++){
|
||||
lightTank l = new lightTank(new vector(i*0.25f+ 1.125f,-0.3f, 17.375f - 0.25f*j), 90, 0);
|
||||
addLightTank(l);
|
||||
//lightTank l = new lightTank(new vector(i*0.25f+ 1.125f,-0.3f, 17.375f - 0.25f*j), 90, 0);
|
||||
//addLightTank(l);
|
||||
//l.hasMultiShotUpgrade = true;
|
||||
//lightTank l = new lightTank(new vector(i*0.25f + 1.125f,-0.3f, 0.5f + 18.625f + j*0.25f), 90, 0);
|
||||
|
||||
|
@ -9,6 +9,7 @@ import entity.*;
|
||||
public class baseExpensionAI {
|
||||
public baseInfo theBaseInfo;
|
||||
public int[] expensionPiorityList;
|
||||
public boolean expensionListRerolled;
|
||||
public stealthTank[] scouts;
|
||||
public constructionVehicle myMCV;
|
||||
public boolean isExpanding;
|
||||
@ -53,9 +54,21 @@ public class baseExpensionAI {
|
||||
|
||||
public void processAI(){
|
||||
|
||||
|
||||
frameAI++;
|
||||
|
||||
if(frameAI > 750 && frameAI < 1000 && !expensionListRerolled) {
|
||||
//if the AI has smaller force than player when it's time to grab a third base, use the less aggressive base expansion route
|
||||
if(mainThread.ec.theCombatManagerAI.checkIfAIHasBiggerForce(1) == false) {
|
||||
int randomeNumber = gameData.getRandom();
|
||||
if(randomeNumber < 512)
|
||||
expensionPiorityList = new int[]{5,2,3,6,7};
|
||||
else
|
||||
expensionPiorityList = new int[]{5,3,2,6,7};
|
||||
expensionListRerolled = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(goldMines == null)
|
||||
goldMines = mainThread.theAssetManager.goldMines;
|
||||
|
||||
@ -126,11 +139,24 @@ public class baseExpensionAI {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
boolean playerHasLessUnits = mainThread.ec.theCombatManagerAI.checkIfAIHasBiggerForce(0.85f);
|
||||
|
||||
int lowGoldmineThreshold = 17500;
|
||||
|
||||
|
||||
if(mainThread.ec.theEconomyManagerAI.preferedGoldMine == mainThread.theAssetManager.goldMines[4])
|
||||
lowGoldmineThreshold = 12500;
|
||||
if(playerHasLessUnits) {
|
||||
lowGoldmineThreshold = 25000;
|
||||
|
||||
if(mainThread.ec.theEconomyManagerAI.preferedGoldMine == mainThread.theAssetManager.goldMines[4])
|
||||
lowGoldmineThreshold = 30000;
|
||||
|
||||
if(mainThread.ec.theEconomyManagerAI.preferedGoldMine == mainThread.theAssetManager.goldMines[5])
|
||||
lowGoldmineThreshold = 20000;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if(myMCV == null && expensionGoldMine.goldDeposite >= 17500 && (mainThread.ec.theEconomyManagerAI.preferedGoldMine.goldDeposite < lowGoldmineThreshold ||
|
||||
(mainThread.ec.theEconomyManagerAI.preferedGoldMine == expensionGoldMine && !hasConstructionYardNearGoldMine(expensionGoldMine) && !hasRefineryNearTheGoldmine(expensionGoldMine)))){
|
||||
|
@ -108,17 +108,7 @@ public class buildingManagerAI {
|
||||
if(theBaseInfo.canBuildRefinery == false || theBaseInfo.lowPower || (theBaseInfo.currentPowerConsumption >= (theBaseInfo.currentPowerLevel - 500) && theBaseInfo.currentCredit > 500 && theBaseInfo.numberOfPowerPlant >=2 && frameIndex > 300)){
|
||||
addBuildingToQueue(101);
|
||||
}
|
||||
|
||||
//build a gun turret if there is a need for it
|
||||
if(theBaseInfo.canBuildGunTurret && mainThread.ec.theDefenseManagerAI.needGunTurret) {
|
||||
addBuildingToQueue(200);
|
||||
}
|
||||
|
||||
//build missile turret if there is a need for it
|
||||
if(theBaseInfo.canBuildMissileTurret && mainThread.ec.theDefenseManagerAI.needMissileTurret) {
|
||||
addBuildingToQueue(199);
|
||||
}
|
||||
|
||||
|
||||
//build a refinery center if there isn't any
|
||||
if(theBaseInfo.numberOfRefinery == 0 && theBaseInfo.canBuildRefinery){
|
||||
addBuildingToQueue(102);
|
||||
@ -137,6 +127,11 @@ public class buildingManagerAI {
|
||||
|
||||
}
|
||||
|
||||
//build a gun turret if there is a need for it
|
||||
if(theBaseInfo.canBuildGunTurret && mainThread.ec.theDefenseManagerAI.needGunTurret) {
|
||||
addBuildingToQueue(200);
|
||||
}
|
||||
|
||||
//build an addtional factory if we have enough harvester to sustain the production
|
||||
if(mainThread.ec.theEconomyManagerAI.numberOfharvesters/2 > theBaseInfo.numberOfFactory && theBaseInfo.canBuildFactory && theBaseInfo.numberOfFactory < 2 && theBaseInfo.currentCredit > 1300){
|
||||
addBuildingToQueue(105);
|
||||
@ -152,8 +147,15 @@ public class buildingManagerAI {
|
||||
addBuildingToQueue(107);
|
||||
}
|
||||
|
||||
|
||||
//build missile turret if there is a need for it
|
||||
if(theBaseInfo.canBuildMissileTurret && mainThread.ec.theDefenseManagerAI.needMissileTurret) {
|
||||
addBuildingToQueue(199);
|
||||
}
|
||||
|
||||
|
||||
//build more factory if we have plenty of money in the bank
|
||||
if(theBaseInfo.currentCredit > 2200 && theBaseInfo.canBuildFactory && theBaseInfo.numberOfFactory <= mainThread.ec.theEconomyManagerAI.numberOfharvesters/2){
|
||||
if(theBaseInfo.currentCredit > 2200 && theBaseInfo.canBuildFactory && theBaseInfo.numberOfFactory < 4 && theBaseInfo.numberOfFactory <= mainThread.ec.theEconomyManagerAI.numberOfharvesters/2){
|
||||
addBuildingToQueue(105);
|
||||
}
|
||||
|
||||
@ -632,9 +634,9 @@ public class buildingManagerAI {
|
||||
return 100;
|
||||
else if(buildingType == 199) {
|
||||
if(communicationCenter.rapidfireResearched_enemy)
|
||||
return 275;
|
||||
return 300;
|
||||
else
|
||||
return 200;
|
||||
return 250;
|
||||
}else if(buildingType == 107)
|
||||
return 400;
|
||||
return 0;
|
||||
|
@ -151,10 +151,10 @@ public class combatManagerAI {
|
||||
int targetPlayerExpension = mainThread.ec.theMapAwarenessAI.targetPlayerExpension;
|
||||
|
||||
if(frameAI > attackTime) {
|
||||
if(targetPlayerExpension == 2 || targetPlayerExpension == 4 || targetPlayerExpension == 6 || targetPlayerExpension == 7)
|
||||
shouldAttack = checkIfAIHasBiggerForce(1.2f);
|
||||
else
|
||||
if(targetPlayerExpension == 0 || targetPlayerExpension == 1 || targetPlayerExpension == 6 || targetPlayerExpension == 7)
|
||||
shouldAttack = checkIfAIHasBiggerForce(0.9f);
|
||||
else
|
||||
shouldAttack = checkIfAIHasBiggerForce(1.2f);
|
||||
}
|
||||
|
||||
|
||||
@ -374,6 +374,8 @@ public class combatManagerAI {
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println(staticDefenseAhead + " " + attackPosition);
|
||||
|
||||
|
||||
//send units to attack-move to target position
|
||||
if(!playerHasBecomeStrongerThanAIDuringMarching && !frontalTroopIverwhelmed && (unNeutralizedEntity != null || distanceToTarget > 2)){
|
||||
@ -416,6 +418,17 @@ public class combatManagerAI {
|
||||
distanceToTarget = attackDirection.getLength();
|
||||
attackDirection.unit();
|
||||
}
|
||||
|
||||
//make sure the attack position is a valid point on the map
|
||||
if(attackPosition.x < 1.5)
|
||||
attackPosition.x = 1.5f;
|
||||
if(attackPosition.x > 30.5)
|
||||
attackPosition.x = 30.5f;
|
||||
if(attackPosition.y < 1.5)
|
||||
attackPosition.y = 1.5f;
|
||||
if(attackPosition.y > 30.5)
|
||||
attackPosition.y = 30.5f;
|
||||
|
||||
everyoneAttackTargetPosition();
|
||||
|
||||
}else{
|
||||
@ -675,9 +688,6 @@ public class combatManagerAI {
|
||||
//System.out.println("unrevealedPlayerForceStrength" + unrevealedPlayerForceStrength + " " + "enemyAIForceStrength " + enemyAIForceStrength + " " + "playerForceStrength" + playerForceStrength);
|
||||
|
||||
return enemyAIForceStrength > 0 && playerForceStrength/enemyAIForceStrength < ratio;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -320,7 +320,7 @@ public class defenseManagerAI {
|
||||
needGunTurret = true;
|
||||
}
|
||||
|
||||
if(!missileTurretAlreadyInQueue && majorThreatLocation.x != 0) {
|
||||
if(!missileTurretAlreadyInQueue && majorThreatLocation.x != 0 && mainPlayerForceSize !=0) {
|
||||
needMissileTurret = true;
|
||||
}
|
||||
|
||||
|
@ -121,11 +121,6 @@ public class enemyCommander {
|
||||
theMicroManagementAI.processAI();
|
||||
//}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -47,6 +47,7 @@ public class mapAwarenessAI {
|
||||
public boolean playerDoesntHaveMassHeavyTanks;
|
||||
public boolean playerIsRushingLightTank;
|
||||
public boolean playerHasManyLightTanksButNoHeavyTank;
|
||||
public boolean playerHasMostlyHeavyAndStealthTanks;
|
||||
|
||||
public solidObject[] mapAsset;
|
||||
public boolean[] visionMap;
|
||||
@ -453,6 +454,8 @@ public class mapAwarenessAI {
|
||||
|
||||
playerIsRushingLightTank = mainThread.frameIndex/30 > 300 && mainThread.frameIndex/30 < 600 && ((playerLikelyCanNotProduceHighTierUnits && numberOfStealthTanks_player < 3) || playerHasMostlyLightTanks);
|
||||
|
||||
playerHasMostlyHeavyAndStealthTanks = (maxNumberOfStealthTanks_playerInLastFiveMinutes >=2 ) && (float)(numberOfHeavyTanks_player + numberOfStealthTanks_player)/(numberOfLightTanks_player + numberOfRocketTanks_player + numberOfStealthTanks_player + numberOfHeavyTanks_player) > 0.8f;
|
||||
|
||||
|
||||
//advanced counting of player units
|
||||
if(numberOfStealthTanks_player > maxNumberOfStealthTanks_playerInLastFiveMinutes) {
|
||||
@ -506,7 +509,7 @@ public class mapAwarenessAI {
|
||||
|
||||
//check if there are any player's structure around each gold mine.
|
||||
for(int i = 0; i < goldMines.length; i++){
|
||||
playerExpensionInfo[i] = findplayexpensionDefenseScore(goldMines[i], 3);
|
||||
playerExpensionInfo[i] = findplayexpensionDefenseScore(goldMines[i], 4);
|
||||
}
|
||||
|
||||
//compute the target player expansion defense score
|
||||
|
@ -137,6 +137,7 @@ public class unitProductionAI {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//make decision on what unit to produce
|
||||
int numberOfPlayerGunTurrets= mainThread.ec.theMapAwarenessAI.numberOfGunTurret_player;
|
||||
int numberOfPlayerMissileTurrets= mainThread.ec.theMapAwarenessAI.numberOfMissileTurret_player;
|
||||
@ -152,15 +153,17 @@ public class unitProductionAI {
|
||||
boolean playerLikelyCanNotProduceHighTierUnits = mainThread.ec.theMapAwarenessAI.playerLikelyCanNotProduceHighTierUnits;
|
||||
boolean playerDoesntHaveMassHeavyTanks = mainThread.ec.theMapAwarenessAI.playerDoesntHaveMassHeavyTanks;
|
||||
boolean playerHasManyLightTanksButNoHeavyTank = mainThread.ec.theMapAwarenessAI.playerHasManyLightTanksButNoHeavyTank;
|
||||
boolean playerHasMostlyHeavyAndStealthTanks = mainThread.ec.theMapAwarenessAI.playerHasMostlyHeavyAndStealthTanks;
|
||||
|
||||
if((numberOfRocketTanks_AI < 2 && frameAI > 300 ) || numberOfRocketTanks_AI < numberOfPlayerGunTurrets + numberOfPlayerMissileTurrets*1.5 || (gameData.getRandom() > 925 && !playerHasMostlyLightTanks)){
|
||||
currentProductionOrder = produceRocketTank;
|
||||
}else if(theBaseInfo.canBuildHeavyTank
|
||||
&& !playerHasManyLightTanksButNoHeavyTank
|
||||
}else if(theBaseInfo.canBuildHeavyTank &&
|
||||
playerHasMostlyHeavyAndStealthTanks ||
|
||||
(!playerHasManyLightTanksButNoHeavyTank
|
||||
&& !playerHasMostlyLightTanks
|
||||
&& !(numberOfHeavyTanks_player == 0 && maxNumberOfStealthTanks_playerInLastFiveMinutes < 3 && mainThread.frameIndex/30 > 600)
|
||||
&& !(playerHasMostlyHeavyTanks && numberOfStealthTanks_player < numberOfHeavyTanks_AI*2)
|
||||
&& (playIsRushingHighTierUnits || gameData.getRandom() > 985 || maxNumberOfStealthTanks_playerInLastFiveMinutes*4 > numberOfHeavyTanks_AI || (mainThread.frameIndex/30 > 400 && mainThread.frameIndex/30 < 600 && numberOfPlayerGunTurrets + numberOfPlayerMissileTurrets+ numberOfLightTanks_player + numberOfRocketTanks_player + numberOfHeavyTanks_player*5 < 5))){
|
||||
&& (playIsRushingHighTierUnits || gameData.getRandom() > 985 || maxNumberOfStealthTanks_playerInLastFiveMinutes*4 > numberOfHeavyTanks_AI || (mainThread.frameIndex/30 > 400 && mainThread.frameIndex/30 < 600 && numberOfPlayerGunTurrets + numberOfPlayerMissileTurrets+ numberOfLightTanks_player + numberOfRocketTanks_player + numberOfHeavyTanks_player*5 < 5)))){
|
||||
currentProductionOrder = produceHeavyTank;
|
||||
}else if(theBaseInfo.canBuildStealthTank && (playerHasMostlyLightTanks || playerLikelyCanNotProduceHighTierUnits || playerDoesntHaveMassHeavyTanks) && !playerHasMostlyHeavyTanks){
|
||||
currentProductionOrder = produceStealthTank;
|
||||
@ -169,11 +172,9 @@ public class unitProductionAI {
|
||||
}
|
||||
|
||||
|
||||
|
||||
//make decision on what tech to research
|
||||
|
||||
if(mainThread.ec.theBuildingManagerAI.theBaseInfo.numberOfCommunicationCenter > 0) {
|
||||
if(mainThread.ec.theDefenseManagerAI.needMissileTurret && theBaseInfo.currentCredit > 500) {
|
||||
if(mainThread.ec.theDefenseManagerAI.needMissileTurret || theBaseInfo.currentCredit > 1500) {
|
||||
if(!communicationCenter.rapidfireResearched_enemy) {
|
||||
if(communicationCenter.rapidfireResearchProgress_enemy == 255){
|
||||
communicationCenter.researchRapidfire(1);
|
||||
@ -183,7 +184,7 @@ public class unitProductionAI {
|
||||
}
|
||||
}
|
||||
|
||||
if(mainThread.ec.theBuildingManagerAI.theBaseInfo.numberOfTechCenter > 0){
|
||||
if(mainThread.ec.theBuildingManagerAI.theBaseInfo.numberOfTechCenter > 0 && ((numberOfLightTanks_player + numberOfStealthTanks_player> 8) || theBaseInfo.currentCredit > 2000 || numberOfStealthTanks_AI > 6)){
|
||||
|
||||
//Immediately start stealth tank upgrades when a tech center is built
|
||||
if(!techCenter.stealthTankResearched_enemy){
|
||||
@ -214,7 +215,7 @@ public class unitProductionAI {
|
||||
System.out.println("should make Rocket tank now----------------");
|
||||
|
||||
|
||||
if(numberOfRocketTanks_AI > 5 && theBaseInfo.currentCredit > 750){
|
||||
if(numberOfRocketTanks_AI > 2 && theBaseInfo.currentCredit > 750 && (numberOfPlayerGunTurrets > 0 || numberOfPlayerMissileTurrets > 0)){
|
||||
if(!techCenter.rocketTankResearched_enemy){
|
||||
if(techCenter.lightTankResearchProgress_enemy >= 240 && techCenter.stealthTankResearchProgress_enemy >= 240 && techCenter.rocketTankResearchProgress_enemy >= 240 && techCenter.heavyTankResearchProgress_enemy >= 240){
|
||||
|
||||
|
@ -967,8 +967,8 @@ public class communicationCenter extends solidObject{
|
||||
|
||||
}else{
|
||||
if(harvesterSpeedResearchProgress_enemy < 240){
|
||||
if(mainThread.pc.theBaseInfo.currentCredit >0){
|
||||
mainThread.pc.theBaseInfo.currentCredit--;
|
||||
if(mainThread.ec.theBaseInfo.currentCredit >0){
|
||||
mainThread.ec.theBaseInfo.currentCredit--;
|
||||
creditSpentOnResearching_enemy++;
|
||||
harvesterSpeedResearchProgress_enemy = 240 * creditSpentOnResearching_enemy/1500;
|
||||
}
|
||||
@ -982,8 +982,8 @@ public class communicationCenter extends solidObject{
|
||||
}
|
||||
|
||||
if(rapidfireResearchProgress_enemy < 240){
|
||||
if(mainThread.pc.theBaseInfo.currentCredit >0){
|
||||
mainThread.pc.theBaseInfo.currentCredit--;
|
||||
if(mainThread.ec.theBaseInfo.currentCredit >0){
|
||||
mainThread.ec.theBaseInfo.currentCredit--;
|
||||
creditSpentOnResearching_enemy++;
|
||||
rapidfireResearchProgress_enemy = 240 * creditSpentOnResearching_enemy/1500;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user