📄 aihardcapital.java
字号:
//System.out.println("eliminate: " + output); TESTING
break;
}
}
}
}
}
if ( output==null ) {
output="endattack";
}
return output;
}
public String getBattleWon() {
String output;
/* Attempt to safeguard critical areas when moving armies to won country */
Country attacker = game.getAttacker();
Continent continent = attacker.getContinent();
//If attacking from the capital, try to leave enough defense.
if (attacker.getColor() == player.getCapital().getColor()) {
if (attacker.getArmies() >= addEnemies(player.getCapital())*2 + 3)
output = "move " + (attacker.getArmies() - (addEnemies(player.getCapital())*2 + 1));
else
output = "move " + (attacker.getArmies()-1);
}
else if (continent.isOwned(player) == true || mostlyOwned(continent) == true) {
/* Set 50% security limit */
if (attacker.getArmies() > 6)
output = "move " + (attacker.getArmies()-1);
else if (attacker.getArmies() > 3 && attacker.getArmies() <= 6)
output = "move " + (attacker.getArmies()-1);
else
output = "move all";
}
else {
output="move all";
}
return output;
}
public String getCapital() {
return "capital " + findCapital().getColor();
}
/**
* Returns the number of armies in most fortified neighbor. If player owns all of the countries around it,
* return 1, because there is still a potential for a threat
* @param Country c which is the country that you want to know the enemies of the given player that are around
* @return int with the number of Enemies around or 1, whichever is higher.
*/
public int addEnemies(Country c) {
int nearbyEnemies = 0;
//Country cap = player.getCapital();
Country[] countries = game.getCountries();
for (int j=0; j<countries.length; j++) {
if (countries[j].isNeighbours(c) && countries[j].getOwner() != player)
if (countries[j].getArmies() > nearbyEnemies)
nearbyEnemies = countries[j].getArmies();
}
return nearbyEnemies == 0 ? 1 : nearbyEnemies;
}
/**
* Checks if the player's capital has enough armies and checks if its neighbours has enough armies
* @param capital The capital country
* @return String Returns the name of the capital
*/
public String reinforceBase(Country capital) {
String str = null;
boolean foundCap = false;
Vector players = game.getPlayers();
//Reinforce base if there are not 3 times the number of surrounding enemies present.
for (int i=0; i<players.size(); i++) {
Player p2 = (Player) players.elementAt(i);
Country cap = p2.getCapital();
if (p2 == player)
cap = capital;
if (cap != null && cap.getOwner() == player) {
if (cap.getArmies() < addEnemies(player.getCapital())*2 && cap.getArmies() < 50) {
str = cap.getColor()+"";
foundCap = true;
break;
}
}
}
if (foundCap == false) {
boolean found = false;
for (int i=0; i<players.size(); i++) {
Player p2 = (Player) players.elementAt(i);
Country cap = p2.getCapital();
if (p2 == player)
cap = capital;
if (cap != null && cap.getOwner() == player) {
Vector v = cap.getNeighbours();
for (int j=0; j<v.size(); j++) {
Country c = (Country) v.elementAt(j);
if (c.getOwner() == player && c.getArmies() < 4) {
str = c.getColor()+"";
found = true;
break;
}
}
}
if (found == true)
break;
}
}
return str;
}
/**
* get the best capital position for the current player
*
*/
public Country findCapital() {
// TODO someone needs to document how this is working!
Vector pt = player.getTerritoriesOwned();
Country country = null;
int difference1 = Integer.MAX_VALUE;
int difference2 = Integer.MAX_VALUE;
for (int i=0; i<pt.size(); i++) {
int count = 0;
Country c1 = (Country) pt.elementAt(i);
Vector v = c1.getNeighbours();
for (int j=0; j<v.size(); j++) {
Country c2 = (Country) v.elementAt(j);
if (c2.getOwner() == player) {
count++;
}
}
int diff1 = v.size() - count;
int diff2 = addEnemies(c1) - c1.getArmies();
if (diff1 <= difference1 && diff2 <= difference2) {
difference1 = diff1;
difference2 = diff2;
country = c1;
}
// count = 0; // ??? wtf is this for ???
}
// Country country = pt.size() > 0 ? (Country)pt.get(0) : null;
// for (int i=0; i<pt.size(); i++) {
// Country tmp = (Country)pt.get(i);
// if (tmp.getArmies() > country.getArmies())
// country = tmp;
// }
return country;
}
/**
* Checks through the enemy's capital and finds a neighbouring territory owned by the reinforcing player
* @return String Returns the name of the reinforcing territory
*/
public String attackCapital() {
String str = null;
Vector players = game.getPlayers();
Country capital = null;
for (int i=0; i<players.size(); i++) {
Player p2 = (Player) players.elementAt(i);
capital = p2.getCapital();
if (capital != null && capital.getOwner() != player)
break;
}
if (capital != null) {
Vector v = capital.getNeighbours();
for (int i=0; i<v.size(); i++) {
Country c = (Country) v.elementAt(i);
if (c.getOwner() == player && c.isNeighbours(capital)) {
str = c.getColor()+"";
break;
}
}
}
return str;
}
/**
* Checks through the player's current owned territories and picks a neighbour if it is free
* @param pt The player's territories
* @return String Returns the name of the country if found, returns null otherwise
*/
public String expandBase(Vector pt) {
String str = null;
boolean found = false;
for (int i=0; i<pt.size(); i++) {
Country c1 = (Country) pt.elementAt(i);
Vector v = c1.getNeighbours();
for (int j=0; j<v.size(); j++) {
Country c2 = (Country) v.elementAt(j);
if (c2.getOwner() == null) {
str = c2.getColor()+"";
found = true;
break;
}
}
if (found == true)
break;
}
return str;
}
public String getRoll() {
String output;
int n=((Country)game.getAttacker()).getArmies() - 1;
/* Only roll for as long as while attacking player has more armies than defending player */
int m=((Country)game.getDefender()).getArmies();
if (((Country)game.getAttacker()).getColor() == player.getCapital().getColor()) {
if (player.getCapital().getArmies() > addEnemies(player.getCapital())*2+5)
output = "roll "+3;
else
output = "retreat";
}
else if (n > 3 && n > m) {
output= "roll "+3;
}
else if (n <= 3 && n > m) {
output= "roll "+n;
}
else {
output= "retreat";
}
return output;
}
public String getTacMove() {
String output=null;
/* reinforces armies from less critical to more critical areas */
Vector t = player.getTerritoriesOwned();
Vector n;
boolean possible = false;
int difference = 0;
Country sender = null;
Country receiver = null;
Country temp = null;
int highest = 1;
for (int a=0; a<t.size(); a++) {
Country country = ((Country)t.elementAt(a));
difference = country.getArmies();
if (difference > highest && country.getColor() != player.getCapital().getColor()) {
highest = difference;
sender = country;
}
}
if (sender != null) {
receiver = check1(sender);
if (receiver == null) {
n = sender.getNeighbours();
for (int i=0; i<n.size(); i++) {
temp = (Country) n.elementAt(i);
if (temp.getOwner() == player) {
possible = check2(temp);
}
if (possible == true) { receiver = temp; break; }
}
}
}
if (receiver != null && receiver != sender) {
output= "movearmies " + ((Country)sender).getColor() + " " + ((Country)receiver).getColor() + " " + (((Country)sender).getArmies()-1);
//System.out.println(((Country)sender).getName()); TESTING
//System.out.println(((Country)receiver).getName()); TESTING
}
if ( output == null ) {
output = "nomove";
}
return output;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -