📄 player.java
字号:
// CS 582 - Fall 1996 - OSU// Jean-Guy Spetonimport java.awt.*;import java.util.*;public class Player{ private Risk risk; private String name; private Color color; private Hashtable countries; private Pile pile; private int numArmies; // Tracks whether or not the player has captured at least 1 enemy // territory in the current turn. Should be cleared at the end of // each turn. private boolean cardFlag; public Player(Risk risk, String name, Color color) { this.risk = risk; this.name = name; this.color = color; countries = new Hashtable(); pile = new Pile(); numArmies = 0; } // Game methods. public String getName() { return name; } public Color getColor() { return color; } public Pile getPile() { return pile; } public void addCard(Card c) { pile.addCard(c); } public boolean canTradeCards() { Card c[] = new Card[3]; int j = 0; c[2] = null; // marker for (int i = 0; i < pile.size(); i++) { if (pile.cardAt(i).isSelected()) { c[j++] = pile.cardAt(i); } } if (c[2] != null) { return Card.isSet(c[0], c[1], c[2]); } return false; } public void tradeCards(int a) { boolean hasBonus = false; // only 1 bonus per trade! for (int i = 0; i < pile.size(); i++) { if (pile.cardAt(i).isSelected()) { // If we own the country on the card, award with bonus 2 armies. Country cn; if (!hasBonus && (cn = hasCountry(pile.cardAt(i).getCountry())) != null) { hasBonus = true; cn.incrementArmies(2); } pile.removeCardAt(i); i--; // to offset the end-of-for increment } } incrementArmies(a); } public void addCountry(Country c) { countries.put(c.getID(), c); c.setOwner(this); } public void removeCountry(Country c) { countries.remove(c.getID()); c.setOwner(null); } public int numCountries() { return countries.size(); } public Country hasCountry(int i) { Enumeration enum = countries.elements(); while (enum.hasMoreElements()) { Country c = (Country)enum.nextElement(); if (c.getNum() == i) { return c; } } return null; } public int getArmies() { return numArmies; } public void setArmies(int i) { numArmies = i; } public void decrementArmies(int i) { numArmies -= i; } public void incrementArmies(int i) { numArmies += i; } // Calculate start-of-turn bonus armies based on holdings. public void gainBonusArmies() { int bonus = countries.size() / 3; if (bonus < 3) { bonus = 3; } // Calculate continent bonuses. World world = risk.getWorld(); for (int i = Country.NORTH_AMERICA; i <= Country.AUSTRALIA; i++) { if (world.ownerOfContinent(i) == this) { bonus += Country.ARMY_BONUS[i]; } } incrementArmies(bonus); } // Randomly distribute reserve armies. Usually only called during // game setup. public void distributeArmies() { while (numArmies > 0) { Enumeration e = countries.elements(); while (e.hasMoreElements()) { if (numArmies == 0) { break; } ((Country)e.nextElement()).incrementArmies(1); numArmies--; } } } public int getTotalCountries() { return countries.size(); } public int getTotalArmies() { int n = 0; Enumeration enum = countries.elements(); while (enum.hasMoreElements()) { Country c = (Country)enum.nextElement(); n += c.getArmies(); } return n; } public void setCardFlag() { cardFlag = true; } public void clearCardFlag() { cardFlag = false; } public boolean getCardFlag() { return cardFlag; } // Called when this occupies pl's last territory. public void vanquished(Player pl) { // Take the player's cards. pile.addPile(pl.getPile()); // Check to see if we've won the game. if (countries.size() == Country.NUM_COUNTRIES) { System.out.println(name + " wins!"); System.exit(0); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -