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

📄 aihardcapital.java

📁 java 开源游戏源码 RISK 联机对战 战棋类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                                    //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 + -