private void wonder_Click(object sender, RoutedEventArgs e) { String name = image.Source.ToString(); String subs = name.Split(',').Last(); String last = subs.Split('/').Last(); if (!last.Equals("BackOfWonderCards.png"))//make sure its not the placeholder { if (player.getPlayedACard() == false && (player.getBoard().getMaxWonderLevel() > player.getWonderCards().Count)) { if (rm.ValidateWonder(player)) { player.getHand().Remove(cardToPlay);//remove from cards in hand of player player.setWonderCards(cardToPlay); player.getBoard().incrementWonderLevel(player); this.Close(); PlayerGameBoard play = new PlayerGameBoard(parent, player, rm.getGameState()); } else { this.Close(); ResourceManager manager = ResourceManager.GetInstance(rm.getGameState()); manager.resetResources(player); WonderBuyingWindow window = new WonderBuyingWindow(ResourceManager.GetInstance().GetCombinedResources(player), cardToPlay, view, rm.getGameState()); window.Show(); } } } }
public Card getNextCard(PlayerState p, List<Card> hand) { Card cur = ult.playPrimary(p, hand); if (cur != null) { return cur; } if(((p.getBoard().getName().Equals("WB1")) || (p.getBoard().getName().Equals("WB1")) && (p.getBoard().getCurrentWonderLevel() == 2))){ cur = ult.buildWonder(p, hand); if (cur != null) { return cur; } } cur = ult.playSecondary(p, hand); if (cur != null) { return cur; } cur = ult.buildWonder(p, hand); if (cur != null) { return cur; } return ult.playAnyCard(p, hand); }
public Card getNextCard(PlayerState p, List <Card> hand) { Card cur = ult.playPrimary(p, hand); if (cur != null) { return(cur); } if (((p.getBoard().getName().Equals("WB1")) || (p.getBoard().getName().Equals("WB1")) && (p.getBoard().getCurrentWonderLevel() == 2))) { cur = ult.buildWonder(p, hand); if (cur != null) { return(cur); } } cur = ult.playSecondary(p, hand); if (cur != null) { return(cur); } cur = ult.buildWonder(p, hand); if (cur != null) { return(cur); } return(ult.playAnyCard(p, hand)); }
/* * Input: A Player * * * Output: True or False -> Does the player have enough resources to add to their Wonder Board? */ public bool ValidateWonder(PlayerState p) { //System.Console.WriteLine(p.getName() + ":ValidateWonder"); if (p.getBoard().getCurrentWonderLevel() < p.getBoard().getMaxWonderLevel()) { return(CheckResourceCost(p, p.getBoard().getBuildCost())); } return(false); }
//returns base+temp+special resources, but can return it for left and right public int[] tradableArray(PlayerState p, int lr) { PlayerState player = null; int[] tradeTable = new int[7] { 0, 0, 0, 0, 0, 0, 0 }; switch (lr) { case 0: return(trArray(p)); case 1: player = gameState.getLeftPlayer(p); break; case 2: player = gameState.getRightPlayer(p); break; } int[] boardResources = player.getBoard().getResources(); for (int i = 0; i < 7; i++) { tradeTable[i] = SpecialResourceArray(player)[i] + baseResources[player.getName()][i] + TempResources[player.getName()][i]; } return(tradeTable); }
private Card SetStrategy(PlayerState p, List<Card> hand) { Card bestCard = null; int currentAge = ResourceManager.GetInstance().getGameState().getAge(); if (p.getPlayedCards().Count() == 0) bestCard = BuildWonder(p, hand); if (bestCard == null) if (noOfPlayers == 3 || noOfPlayers == 7) if (p.getBoard().getCurrentWonderLevel() != currentAge) bestCard = BuildWonder(p, hand); if (bestCard == null) SetMilitaryStrategy(p, hand); if (bestCard == null) bestCard = SetScienceStrategy(p, hand); if (bestCard == null) bestCard = SetCommerceStrategy(p, hand); if (bestCard == null) bestCard = SetCivilianStrategy(p, hand); if (bestCard == null) { strategy = new RandomStrategy(); bestCard = strategy.getNextCard(p, hand); } return bestCard; }
public int calcCommerceIncome(Card playedCard, GameState gs, int playerId) { PlayerState thePlayer = gs.getPlayerNum(playerId); //System.Console.WriteLine(playedCard.getNumber()); if (!playedCard.getName().StartsWith("CO")) { return(0); } if (playedCard.GetType() != typeof(CommerceCard)) { return(0); } CommerceCard commCard = (CommerceCard)playedCard; if (commCard.getCoins() != 0) { return(commCard.getCoins()); } if ((commCard.getNumber().Equals(77)) || (commCard.getNumber().Equals(78))) { return(countCardType(1, thePlayer) + countCardType(1, gs.getLeftPlayer(thePlayer)) + countCardType(1, gs.getRightPlayer(thePlayer))); } if ((commCard.getNumber().Equals(80)) || (commCard.getNumber().Equals(79))) { return(countCardType(2, thePlayer) + countCardType(2, gs.getLeftPlayer(thePlayer)) + countCardType(2, gs.getRightPlayer(thePlayer))); } //Haven if ((commCard.getNumber().Equals(119)) || (commCard.getNumber().Equals(120))) { return(countCardType(1, thePlayer)); } //LightHouse if ((commCard.getNumber().Equals(121)) || (commCard.getNumber().Equals(122))) { return(countCardType(4, thePlayer)); } //Chamber of Commerce if ((commCard.getNumber().Equals(123)) || (commCard.getNumber().Equals(124))) { return(2 * countCardType(2, thePlayer)); } //Arena if ((commCard.getNumber().Equals(125)) || (commCard.getNumber().Equals(126)) || (commCard.getNumber().Equals(127))) { return(3 * thePlayer.getBoard().getCurrentWonderLevel()); } return(0); }
private Card BuildWonder(PlayerState p, List <Card> hand) { if (p.getBoard().notMaxYet()) { for (int i = 0; i < hand.Count(); i++) { if (hand[i].getType() == 1 || hand[i].getType() == 2) { if (ResourceManager.GetInstance().ValidateWonder(p)) { strategy = new CommerceStrategy(); p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return(hand[i]); } } } } return(null); }
/* * Input: A Player * * Output: void -> Given a player, This is the helper function to resetResources. * This looks through the list of played cards and adds special card values to a temporary * list of special resources. */ public void resetSpecialResourceSingular(PlayerState p) { List <ResourceCard> tempList = new List <ResourceCard>(); for (int i = 0; i < p.getPlayedCards().Count; i++) { if (p.getPlayedCards()[i].getType() < 3) { ResourceCard c = (ResourceCard)p.getPlayedCards()[i]; if (((c.getNumber() > 7) && (c.getNumber() < 14))) { tempList.Add(c); } } } if (p.getBoard().getName() == "WB2") { if (p.getBoard().getCurrentWonderLevel() > 0) { if (p.getBoard().getCurrentWonderLevel() > 1) { wonderBoardExceptionManGood = true; wonderBoardExceptionResource = true; } else { for (int j = 0; j < 7; j++) { wonderBoardExceptionResource = true; } } } } if ((p.getBoard().getName() == "WB1") && (p.getBoard().getCurrentWonderLevel() > 1)) { wonderBoardExceptionResource = true; } SResources[p.getName()] = tempList; }
int g_index = 0;//needed to reset ZIndex to original value upon mouse events public PlayerGameBoard(Grid gameGrid, PlayerState p, GameState g) { player = p; parent = gameGrid;//only 1 child if (parent.Children.Count > 1)//handle the case where there is existing child when we change views { parent.Children.Remove(parent.Children[1]); //System.Console.WriteLine("Child Removed"); } game = g; if (game.getAge() == 4)//game is over { ScoreWindow s = new ScoreWindow(game, parent); s.Show(); ; } playBoard = new Canvas(); parent.Children.Add(playBoard);//now child[1], two children createCardStack("R", 179, 10, playBoard);//0-9 createCardStack("M", 336, 10, playBoard);//10-19 createCardStack("S", 493, 10, playBoard);//20-29 createCardStack("Civ", 650, 10, playBoard);//30-39 createCardStack("Com", 807, 10, playBoard);//40-49 createCardStack("G", 964, 6, playBoard);//50-55 createHandStack();//56-62 updateAge(game.getAge());//63 createWonderBoard(player.getBoard().getName());//64 createPlayerButtons();//65-71 createPlayerRedCircles();//72-78 createPlayerBlueCircles();//79-85 createMoveButtons();//86-89 updateMoney();//90 createWonderSpots(player.getBoard().getMaxWonderLevel());//[91-94] variable length createRulesButton();//variable base on above wonder updateWonderSpots(player.getWonderCards()); updateHand(player.getHand()); updateCards(player.getPlayedCards()); }
public PlayerGameBoard(Grid gameGrid, PlayerState p, GameState g) { player = p; parent = gameGrid; //only 1 child if (parent.Children.Count > 1) //handle the case where there is existing child when we change views { parent.Children.Remove(parent.Children[1]); //System.Console.WriteLine("Child Removed"); } game = g; if (game.getAge() == 4)//game is over { ScoreWindow s = new ScoreWindow(game, parent); s.Show();; } playBoard = new Canvas(); parent.Children.Add(playBoard); //now child[1], two children createCardStack("R", 179, 10, playBoard); //0-9 createCardStack("M", 336, 10, playBoard); //10-19 createCardStack("S", 493, 10, playBoard); //20-29 createCardStack("Civ", 650, 10, playBoard); //30-39 createCardStack("Com", 807, 10, playBoard); //40-49 createCardStack("G", 964, 6, playBoard); //50-55 createHandStack(); //56-62 updateAge(game.getAge()); //63 createWonderBoard(player.getBoard().getName()); //64 createPlayerButtons(); //65-71 createPlayerRedCircles(); //72-78 createPlayerBlueCircles(); //79-85 createMoveButtons(); //86-89 updateMoney(); //90 createWonderSpots(player.getBoard().getMaxWonderLevel()); //[91-94] variable length createRulesButton(); //variable base on above wonder updateWonderSpots(player.getWonderCards()); updateHand(player.getHand()); updateCards(player.getPlayedCards()); }
private Card SetStrategy(PlayerState p, List <Card> hand) { Card bestCard = null; int currentAge = ResourceManager.GetInstance().getGameState().getAge(); if (p.getPlayedCards().Count() == 0) { bestCard = BuildWonder(p, hand); } if (bestCard == null) { if (noOfPlayers == 3 || noOfPlayers == 7) { if (p.getBoard().getCurrentWonderLevel() != currentAge) { bestCard = BuildWonder(p, hand); } } } if (bestCard == null) { bestCard = SetMilitaryStrategy(p, hand); } if (bestCard == null) { bestCard = SetScienceStrategy(p, hand); } if (bestCard == null) { bestCard = SetCommerceStrategy(p, hand); } if (bestCard == null) { bestCard = SetCivilianStrategy(p, hand); } if (bestCard == null) { strategy = new RandomStrategy(); bestCard = strategy.getNextCard(p, hand); } return(bestCard); }
public void CheckWonderBoard(PlayerState p) { if (Log(p)) { Console.WriteLine("\n--------------------------------------------------------------------------------------------------------"); int[] resources = p.getBoard().getResources(); Console.WriteLine("[{0}] [Board.getResources ([{1}] [{2}])] ", _class.GetType().Name, p.getName(), p.getBoard().getName()); for (int index = 0; index < resources.Count(); index++) { Console.Write("[{0} : {1}] ", ((Resource)index).ToString(), resources[index]); } Console.WriteLine(); Console.WriteLine("--------------------------------------------------------------------------------------------------------\n"); } }
public Card getNextCard(PlayerState p, List <Card> hand) { Card cur = ult.playPrimary(p, hand); if (cur != null) { return(cur); } //attempts to play wonder to increase science if ((p.getBoard().getName().Equals("WB3")) && (p.getBoard().getCurrentWonderLevel() < 2) && (ResourceManager.GetInstance().ValidateWonder(p))) { for (int i = 0; i < hand.Count; i++) { if (hand[i].getType() != 6) { p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return(hand[i]); } } } if ((p.getBoard().getName().Equals("WB4")) && (p.getBoard().getCurrentWonderLevel() < 3) && (ResourceManager.GetInstance().ValidateWonder(p))) { for (int i = 0; i < hand.Count; i++) { if (hand[i].getType() != 6) { p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return(hand[i]); } } } cur = ult.playSecondary(p, hand); if (cur != null) { return(cur); } cur = ult.buildWonder(p, hand); if (cur != null) { return(cur); } return(ult.playAnyCard(p, hand)); }
//attempts to build a wonder public Card buildWonder(PlayerState p, List <Card> hand) { if (ResourceManager.GetInstance().ValidateWonder(p)) { for (int i = 0; i < hand.Count; i++) { if (hand[i].getType() == strategy) { p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return(hand[i]); } } return(hand[0]); } return(null); }
private int CommerceScore(PlayerState p) { int score = 0; List <CommerceCard> comlist; //Commercial Structure comlist = new List <CommerceCard>(); //Cycle through played cards //Add all Commerce cards to list for (int i = 0; i < p.getPlayedCards().Count; i++) { if ((p.getPlayedCards()[i].getType() == Card._MERCHANT) && (p.getPlayedCards()[i].getAct() == Card._CIVILIAN)) { comlist.Add((CommerceCard)p.getPlayedCards()[i]); } } for (int i = 0; i < comlist.Count; i++) { //Victorypoints per wonder if (comlist[i].getPerWonder() == 2) { score = score + p.getBoard().getCurrentWonderLevel(); } //Victorypoint per card if ((comlist[i].getCollect()[2] > 0)) { //crawl through all played cards of player for (int j = 0; j < p.getPlayedCards().Count; j++) { //if card type matches victorypoint condition of commercial card if (p.getPlayedCards()[j].getType() == comlist[i].getCollect()[0]) { //add points appropriate to commercial card parameters score = score + comlist[i].getCollect()[2]; System.Console.WriteLine(comlist[i].getCollect()[2]); } } } } return(score); }
public Card getNextCard(PlayerState p, List<Card> hand) { Card cur = ult.playPrimary(p, hand); if (cur != null) { return cur; } //attempts to play wonder to increase science if((p.getBoard().getName().Equals("WB3")) && (p.getBoard().getCurrentWonderLevel() < 2) && (ResourceManager.GetInstance().ValidateWonder(p))){ for (int i = 0; i < hand.Count; i++){ if(hand[i].getType() != 6){ p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return hand[i]; } } } if((p.getBoard().getName().Equals("WB4")) && (p.getBoard().getCurrentWonderLevel() < 3) && (ResourceManager.GetInstance().ValidateWonder(p))){ for (int i = 0; i < hand.Count; i++){ if(hand[i].getType() != 6){ p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return hand[i]; } } } cur = ult.playSecondary(p, hand); if (cur != null) { return cur; } cur = ult.buildWonder(p, hand); if (cur != null) { return cur; } return ult.playAnyCard(p, hand); }
//initial baseResources build up, SRCard initializer protected int[] ResourceInitializer(PlayerState p) { int[] rTotals = p.getBoard().getResources(); int[] tempResource = new int[7]; //Fill rTotals first, Wonder then Cards //Cards for (int i = 0; i < p.getPlayedCards().Count; i++) { //resource/manufactured good cards only if ((p.getPlayedCards()[i].getType() == 1) || (p.getPlayedCards()[i].getType() == 2)) { //remove optional resource cards from total if ((p.getPlayedCards()[i].getNumber() < 7) || (p.getPlayedCards()[i].getNumber() > 14)) { ResourceCard tempCard = (ResourceCard)p.getPlayedCards()[i]; System.Console.WriteLine("tempCard: " + tempCard.getResources()); addResources(rTotals,tempCard.getResources()); } } } return rTotals; }
private int ScienceScore(PlayerState p) { //System.Console.WriteLine("sciencescore start"); List <ScienceCard> scilist = new List <ScienceCard>(); int[] sciTotals = new int[3] { 0, 0, 0 }; //Cycle through played cards for (int i = 0; i < p.getPlayedCards().Count; i++) { if (p.getPlayedCards()[i].getType() == Card._SCIENCE) { scilist.Add((ScienceCard)p.getPlayedCards()[i]); } } //Cycle through science card list to add up sciencetype totals for (int i = 0; i < scilist.Count; i++) { //System.Console.WriteLine(scilist[i].getSciType()); sciTotals[scilist[i].getSciType()]++; } int score = 0; if (scienceguildCard == true) { if (sciTotals.Max() > 5) { sciTotals[Array.IndexOf(sciTotals, sciTotals.Max())]++; } else { sciTotals[Array.IndexOf(sciTotals, sciTotals.Min())]++; } } if (p.getBoard().getName() == "WB3") { if (((WB3)p.getBoard()).getScienceActivated()) { if (sciTotals.Max() > 5) { sciTotals[Array.IndexOf(sciTotals, sciTotals.Max())]++; } else { sciTotals[Array.IndexOf(sciTotals, sciTotals.Min())]++; } } } if (p.getBoard().getName() == "WB4") { if (((WB4)p.getBoard()).getScienceActivated()) { if (sciTotals.Max() > 5) { sciTotals[Array.IndexOf(sciTotals, sciTotals.Max())]++; } else { sciTotals[Array.IndexOf(sciTotals, sciTotals.Min())]++; } } } //Set points score = score + (sciTotals.Min() * 7); //System.Console.WriteLine("Min Score" + sciTotals.Min()); //Points for types //System.Console.WriteLine("Type 0" + sciTotals[0]); score = score + (sciTotals[0] * sciTotals[0]); //System.Console.WriteLine("Type 1" + sciTotals[1]); score = score + (sciTotals[1] * sciTotals[1]); //System.Console.WriteLine("Type 2" + sciTotals[2]); score = score + (sciTotals[2] * sciTotals[2]); System.Console.WriteLine(score); return(score); }
/* * Input: A Player * * * Output: True or False -> Does the player have enough resources to add to their Wonder Board? */ public bool ValidateWonder(PlayerState p) { //System.Console.WriteLine(p.getName() + ":ValidateWonder"); if (p.getBoard().getCurrentWonderLevel() <p.getBoard().getMaxWonderLevel() ) return CheckResourceCost(p, p.getBoard().getBuildCost()); return false; }
//trade card to player public void tradeTo(PlayerState p, int resourceIndex, int player) { int coinAmount = 2; int[] tradingPostCardNumber = new int[2] { 0, 0 }; if (resourceIndex > 6) { System.Console.WriteLine("resourceIndex over 6"); return; } PlayerState TradeTo = null; //Set TradetoPlayer : player = 0, left, else right if (player == 0) { TradeTo = gameState.getLeftPlayer(p); tradingPostCardNumber[0] = 33; tradingPostCardNumber[1] = 34; } else if (player == 1) { TradeTo = gameState.getRightPlayer(p); tradingPostCardNumber[0] = 31; tradingPostCardNumber[1] = 32; } //Commerce Trading Exceptions for (int i = 0; i < ComCards[p.getName()].Count; i++) { if ((resourceIndex > 3) && (p.getBoard().getName() == "WB10") && (p.getBoard().getCurrentWonderLevel() > 0)) { coinAmount = 1; } //Market Card if ((resourceIndex > 3) && ((ComCards[p.getName()][i].getNumber() == 35) || (ComCards[p.getName()][i].getNumber() == 36))) { coinAmount = 1; } //Trading Post if ((resourceIndex < 4) && ((ComCards[p.getName()][i].getNumber() == tradingPostCardNumber[0]) || (ComCards[p.getName()][i].getNumber() == tradingPostCardNumber[1]))) { coinAmount = 1; } } //1. Check for resource in base if (baseResources[TradeTo.getName()][resourceIndex] > 0) { coinTransactions[player] += coinAmount; TempResources[p.getName()][resourceIndex]++; TempResources[TradeTo.getName()][resourceIndex]--; System.Console.WriteLine("Traded from Base Resource."); } //2. Then check resource in SR else if (SpecialResourceArray(TradeTo)[resourceIndex] > 0) { coinTransactions[player] += coinAmount; TempResources[p.getName()][resourceIndex]++; usingSpecialResource(TradeTo, resourceIndex); System.Console.WriteLine("Traded from Special Resource."); } //3. Profit else { System.Console.WriteLine("Error, no such resource available."); } }
public Card getNextCard(PlayerState p, List <Card> hand) { PlayerState left = ResourceManager.GetInstance().getGameState().getLeftPlayer(p); PlayerState right = ResourceManager.GetInstance().getGameState().getRightPlayer(p); int age = ResourceManager.GetInstance().getGameState().getAge(); Card cur; //Checks to see if AI has enough MilitaryPower to win the //the battles at the end of the Age if ((left.getMilitaryPower() >= p.getMilitaryPower() - age) || (right.getMilitaryPower() >= p.getMilitaryPower() - age)) { cur = ult.playPrimary(p, hand); if (cur != null) { return(cur); } } //attempts to play wonder to increase military if ((p.getBoard().getName().Equals("WB7")) && (p.getBoard().getCurrentWonderLevel() < 2) && (ResourceManager.GetInstance().ValidateWonder(p))) { for (int i = 0; i < hand.Count; i++) { if (hand[i].getType() != 6) { p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return(hand[i]); } } } if ((p.getBoard().getName().Equals("WB8")) && (p.getBoard().getCurrentWonderLevel() < 2) && (ResourceManager.GetInstance().ValidateWonder(p))) { for (int i = 0; i < hand.Count; i++) { if (hand[i].getType() != 6) { p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return(hand[i]); } } } cur = ult.playSecondary(p, hand); if (cur != null) { return(cur); } cur = ult.buildWonder(p, hand); if (cur != null) { return(cur); } return(ult.playAnyCard(p, hand)); }
private int WonderScore(PlayerState p) { return p.getBoard().getVictoryPoints(); }
private int GuildScore(PlayerState p, GameState g) { int score = 0; List<GuildCard> glist = new List<GuildCard>(); //GameState g = ; //Cycle through played cards for (int i = 0; i < p.getPlayedCards().Count; i++) { if (p.getPlayedCards()[i].getType() == Card._GUILD) { glist.Add((GuildCard)p.getPlayedCards()[i]); } } //Cycle through guild cards for (int i = 0; i < glist.Count; i++) { //worker if (glist[i].getNumber() == 98) { score = score + (2 * (g.getLeftPlayer(p).countCardType(2) + g.getRightPlayer(p).countCardType(2)));} //craft if (glist[i].getNumber() == 99) { score = score + (g.getLeftPlayer(p).countCardType(1) + g.getRightPlayer(p).countCardType(1)); } //trader if (glist[i].getNumber() == 100) { score = score + (g.getLeftPlayer(p).countCardType(4) + g.getRightPlayer(p).countCardType(4)); } //Philospher if (glist[i].getNumber() == 101) { score = score + (g.getLeftPlayer(p).countCardType(6) + g.getRightPlayer(p).countCardType(6)); } //Spies if (glist[i].getNumber() == 102) { score = score + (g.getLeftPlayer(p).countCardType(5) + g.getRightPlayer(p).countCardType(5)); } //strat if (glist[i].getNumber() == 103) { score = score + (g.getLeftPlayer(p).getNumLosses()) + (g.getRightPlayer(p).getNumLosses());} //ship if (glist[i].getNumber() == 104) { score = score + (p.countCardType(1)) + (p.countCardType(2)) + (p.countCardType(7));} //Science if (glist[i].getNumber() == 105) { scienceguildCard = true; } //magistrat if (glist[i].getNumber() == 106) { score = score + (g.getLeftPlayer(p).countCardType(3) + g.getRightPlayer(p).countCardType(3)); } //builders if (glist[i].getNumber() == 107) { score = score + (g.getRightPlayer(p).getBoard().getCurrentWonderLevel()); score = score + (g.getLeftPlayer(p).getBoard().getCurrentWonderLevel()); score = score + (p.getBoard().getCurrentWonderLevel()); } } return score; }
private int GuildScore(PlayerState p, GameState g) { int score = 0; List <GuildCard> glist = new List <GuildCard>(); //GameState g = ; //Cycle through played cards for (int i = 0; i < p.getPlayedCards().Count; i++) { if (p.getPlayedCards()[i].getType() == Card._GUILD) { glist.Add((GuildCard)p.getPlayedCards()[i]); } } //Cycle through guild cards for (int i = 0; i < glist.Count; i++) { //worker if (glist[i].getNumber() == 98) { score = score + (2 * (g.getLeftPlayer(p).countCardType(2) + g.getRightPlayer(p).countCardType(2))); } //craft if (glist[i].getNumber() == 99) { score = score + (g.getLeftPlayer(p).countCardType(1) + g.getRightPlayer(p).countCardType(1)); } //trader if (glist[i].getNumber() == 100) { score = score + (g.getLeftPlayer(p).countCardType(4) + g.getRightPlayer(p).countCardType(4)); } //Philospher if (glist[i].getNumber() == 101) { score = score + (g.getLeftPlayer(p).countCardType(6) + g.getRightPlayer(p).countCardType(6)); } //Spies if (glist[i].getNumber() == 102) { score = score + (g.getLeftPlayer(p).countCardType(5) + g.getRightPlayer(p).countCardType(5)); } //strat if (glist[i].getNumber() == 103) { score = score + (g.getLeftPlayer(p).getNumLosses()) + (g.getRightPlayer(p).getNumLosses()); } //ship if (glist[i].getNumber() == 104) { score = score + (p.countCardType(1)) + (p.countCardType(2)) + (p.countCardType(7)); } //Science if (glist[i].getNumber() == 105) { scienceguildCard = true; } //magistrat if (glist[i].getNumber() == 106) { score = score + (g.getLeftPlayer(p).countCardType(3) + g.getRightPlayer(p).countCardType(3)); } //builders if (glist[i].getNumber() == 107) { score = score + (g.getRightPlayer(p).getBoard().getCurrentWonderLevel()); score = score + (g.getLeftPlayer(p).getBoard().getCurrentWonderLevel()); score = score + (p.getBoard().getCurrentWonderLevel()); } } return(score); }
public bool CheckResourceCost(PlayerState p, Card c) { int[] totalResources = { 0, 0, 0, 0, 0, 0, 0 }; int[] cost = c.getCost(); int[] boardResources = p.getBoard().getResources(); List<int> playersResources = hashtable[p.getName()]; for (int i = 0; i < playersResources.Count(); i++) { totalResources[i] = (playersResources[i] + boardResources[i]); } var resources = Enum.GetValues(typeof(Resource)); foreach (var type in resources) { int resource = (int)type; if (cost[resource] > totalResources[resource]) return false; } return true; }
public Resources GetResources(PlayerState p) { List<int> l = hashtable[gameState.getLeftPlayer(p).getName()]; List<int> r = hashtable[gameState.getRightPlayer(p).getName()]; List<int> c = hashtable[p.getName()]; // Get the wonder boards default resources //_logger.CheckWonderBoard(p); if (boardRAdded == false) { int[] br = p.getBoard().getResources(); for (int i = 0; i < br.Count(); i++) c[i] = (br[i] + c[i]); boardRAdded = true; } return new Resources(l.ToArray(), r.ToArray(), c.ToArray(), p.getName()); }
public Card getNextCard(PlayerState p, List<Card> hand) { PlayerState left = ResourceManager.GetInstance().getGameState().getLeftPlayer(p); PlayerState right = ResourceManager.GetInstance().getGameState().getRightPlayer(p); int age = ResourceManager.GetInstance().getGameState().getAge(); Card cur; //Checks to see if AI has enough MilitaryPower to win the //the battles at the end of the Age if ((left.getMilitaryPower() >= p.getMilitaryPower() - age) || (right.getMilitaryPower() >= p.getMilitaryPower() - age)) { cur = ult.playPrimary(p, hand); if (cur != null) { return cur; } } //attempts to play wonder to increase military if ((p.getBoard().getName().Equals("WB7")) && (p.getBoard().getCurrentWonderLevel() < 2) && (ResourceManager.GetInstance().ValidateWonder(p))) { for (int i = 0; i < hand.Count; i++) { if (hand[i].getType() != 6) { p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return hand[i]; } } } if ((p.getBoard().getName().Equals("WB8")) && (p.getBoard().getCurrentWonderLevel() < 2) && (ResourceManager.GetInstance().ValidateWonder(p))) { for (int i = 0; i < hand.Count; i++) { if (hand[i].getType() != 6) { p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return hand[i]; } } } cur = ult.playSecondary(p, hand); if (cur != null) { return cur; } cur = ult.buildWonder(p, hand); if (cur != null) { return cur; } return ult.playAnyCard(p, hand); }
private Card BuildWonder(PlayerState p, List<Card> hand) { if (p.getBoard().notMaxYet()) { for (int i = 0; i < hand.Count(); i++) { if (hand[i].getType() == 1 || hand[i].getType() == 2) { if (ResourceManager.GetInstance().ValidateWonder(p)) { strategy = new CommerceStrategy(); p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return hand[i]; } } } } return null; }
//Initial call to check for wonder validity public bool ValidateWonder(PlayerState p) { return CheckResourceCost(p, p.getBoard().getBuildCost(p.getBoard().getCurrentWonderLevel())); }
//returns the base resources /*public Resources GetResources(PlayerState p) { List<int> l = baseResources[gameState.getLeftPlayer(p).getName()]; List<int> r = baseResources[gameState.getRightPlayer(p).getName()]; List<int> c = baseResources[p.getName()]; // Get the wonder boards default resources //_logger.CheckWonderBoard(p); return new Resources(l.ToArray(), r.ToArray(), c.ToArray(), p.getName()); }*/ /* * Input: A Player * * * Output: Resources Object -> Given the player object, what are the total available resources * adding both chosen special resources and base resources? */ public Resources GetCombinedResources(PlayerState p) { List<int> l = new List<int>(); List<int> r = new List<int>(); List<int> c = new List<int>(); for (int i = 0; i < 7; i++) { l.Add(baseResources[gameState.getLeftPlayer(p).getName()][i] + TempResources[gameState.getLeftPlayer(p).getName()][i]); r.Add(baseResources[gameState.getRightPlayer(p).getName()][i] + TempResources[gameState.getRightPlayer(p).getName()][i]); c.Add(baseResources[p.getName()][i] + TempResources[p.getName()][i]); } // Get the wonder boards default resources //_logger.CheckWonderBoard(p); int[] br = p.getBoard().getResources(); for (int i = 0; i < br.Count(); i++) c[i] = (br[i] + c[i]); // Now lets get any speical resources the player may have //List<ResourceCard> sr = SResources[p.getName()]; //for (int i = 0; i < sr.Count(); i++) //{ // ResourceCard rc = sr[i]; // int[] resources = rc.getResources(); // for (int index = 0; index < resources.Count(); index++) // c[index] = (c[index] + resources[index]); //} return new Resources(l.ToArray(), r.ToArray(), c.ToArray(), p.getName()); }
//Mouse Click for "Add to Wonder" Button public void wonderCardButton_Click(object sender, EventArgs e) { if (player.getPlayedACard() == false && (player.getBoard().getMaxWonderLevel() > player.getWonderCards().Count)) { for (int i = 0; i < player.getHand().Count; i++) { Card c = player.getHand()[i]; Image img = (Image)playBoard.Children[(56 + i)]; if (img.ActualHeight > 150) { if (img.Source != new BitmapImage(new Uri(@"pack://*****:*****@"pack://application:,,,/Images/EmptyCard.png", UriKind.RelativeOrAbsolute)); Image imgl = (Image)playBoard.Children[91]; PlayerGameBoard play = new PlayerGameBoard(parent, player, game); } else { ResourceManager manager = ResourceManager.GetInstance(game); manager.resetResources(player); WonderBuyingWindow window = new WonderBuyingWindow(ResourceManager.GetInstance().GetCombinedResources(player), c, this, game); window.Show(); } } } } } }
private int WonderScore(PlayerState p) { return(p.getBoard().getVictoryPoints()); }
/* * Input: A Player, a Card and a direction(0 = right, 1 = left) * * * Output: number of coins required to trade for resources for card with the player * at the given direction. negitive number if impossible */ public int validateTrade(PlayerState p, Card c, int direction) { int recCost = 2; int comCost = 2; //checkes to see if a player can play card with thier own resources if (ValidateCard(p, c)) { return 0; } PlayerState trader; if ((p.getBoard().getName().Equals("WB10") && (p.getBoard().getCurrentWonderLevel() >= 1))) { recCost = 1; } if (direction == 0) { trader = gameState.getRightPlayer(p); for (int i = 0; i < p.getPlayedCards().Count; i++) { if ((p.getPlayedCards()[i].getNumber() == 31) || (p.getPlayedCards()[i].getNumber() == 32)) { recCost = 1; break; } } } else { trader = gameState.getLeftPlayer(p); for (int i = 0; i < p.getPlayedCards().Count; i++) { if ((p.getPlayedCards()[i].getNumber() == 33) || (p.getPlayedCards()[i].getNumber() == 34)) { recCost = 1; break; } } } for (int i = 0; i < p.getPlayedCards().Count; i++) { if ((p.getPlayedCards()[i].getNumber() == 35) || (p.getPlayedCards()[i].getNumber() == 36)) { comCost = 1; } } if (!baseResources.ContainsKey(trader.getName())) { return -1; } int cost = 0; List<int> traderResources = baseResources[trader.getName()]; int[] requiredResources = new int[c.getCost().Length]; for (int i = 0; i < c.getCost().Length; i++) { requiredResources[i] = c.getCost()[i]; requiredResources[i] -= baseResources[p.getName()][i];//p.getResources()[i]; if (requiredResources[i] < 0) { requiredResources[i] = 0; } if (traderResources[i] < requiredResources[i]) { return -1; } if (i < 4) { cost += requiredResources[i] * recCost; } else { cost += requiredResources[i] * comCost; } Console.WriteLine("cost " + cost + " cur rec " + requiredResources[i]); } return cost; }
/* * Input: A Player, a Card and a direction(0 = right, 1 = left) * * * Output: number of coins required to trade for resources for card with the player * at the given direction. negitive number if impossible */ public int validateTrade(PlayerState p, Card c, int direction) { int recCost = 2; int comCost = 2; //checkes to see if a player can play card with thier own resources if (ValidateCard(p, c)) { return(0); } PlayerState trader; if ((p.getBoard().getName().Equals("WB10") && (p.getBoard().getCurrentWonderLevel() >= 1))) { recCost = 1; } if (direction == 0) { trader = gameState.getRightPlayer(p); for (int i = 0; i < p.getPlayedCards().Count; i++) { if ((p.getPlayedCards()[i].getNumber() == 31) || (p.getPlayedCards()[i].getNumber() == 32)) { recCost = 1; break; } } } else { trader = gameState.getLeftPlayer(p); for (int i = 0; i < p.getPlayedCards().Count; i++) { if ((p.getPlayedCards()[i].getNumber() == 33) || (p.getPlayedCards()[i].getNumber() == 34)) { recCost = 1; break; } } } for (int i = 0; i < p.getPlayedCards().Count; i++) { if ((p.getPlayedCards()[i].getNumber() == 35) || (p.getPlayedCards()[i].getNumber() == 36)) { comCost = 1; } } if (!baseResources.ContainsKey(trader.getName())) { return(-1); } int cost = 0; List <int> traderResources = baseResources[trader.getName()]; int[] requiredResources = new int[c.getCost().Length]; for (int i = 0; i < c.getCost().Length; i++) { requiredResources[i] = c.getCost()[i]; requiredResources[i] -= baseResources[p.getName()][i];//p.getResources()[i]; if (requiredResources[i] < 0) { requiredResources[i] = 0; } if (traderResources[i] < requiredResources[i]) { return(-1); } if (i < 4) { cost += requiredResources[i] * recCost; } else { cost += requiredResources[i] * comCost; } //Console.WriteLine("cost " + cost + " cur rec " + requiredResources[i]); } return(cost); }
// This button click handler finds which button you pressed and then modifies the appropriate // Player resources as well calling methods for removing and adding money // B[1,7] = YOU, B[8,14] = LEFT, B[15-21] = RIGHT private void buyButton_Click(object sender, RoutedEventArgs e) { Button b = (Button)sender; string name = b.Name;//have button name will travel int index; if (name.Length > 2) { index = ((int)Char.GetNumericValue(name[1]) * 10) + (int)Char.GetNumericValue(name[2]); } else { index = (int)Char.GetNumericValue(name[1]);//know which number } if (index > 0 && index < 8)//Player clicked on YOU { manager.usingSpecialResource(you, (index - 1)); resources = manager.GetCombinedResources(you); if (manager.ValidateWonder(you)) //ok check if you can play the card now. { you.getHand().Remove(card); //remove from cards in hand of player you.setPlayedACard(); //set true you.setWonderCards(card); you.getBoard().incrementWonderLevel(you); manager.getGameState().incrementTurn(); this.Close(); PlayerGameBoard play = new PlayerGameBoard(board.getGrid(), you, manager.getGameState()); } else { this.Close(); WonderBuyingWindow window = new WonderBuyingWindow(resources, card, board, game); window.Show(); } } if (index > 7 && index < 15)//Player clicked on LEFT { int i = (index - 8); if (manager.canAfford(you)) { //PlayerGameBoard play = new PlayerGameBoard(board.getGrid(), you, manager.getGameState()); Canvas c = (Canvas)board.getGrid().Children[1]; Label l = (Label)c.Children[90]; l.Content = " " + manager.getTempCoins(you); manager.tradeTo(you, i, 0); resources = manager.GetCombinedResources(you); if (manager.ValidateWonder(you)) //ok check if you can play the card now. { you.getHand().Remove(card); //remove from cards in hand of player you.setPlayedACard(); //set true you.setWonderCards(card); you.getBoard().incrementWonderLevel(you); manager.getGameState().incrementTurn(); this.Close(); PlayerGameBoard play = new PlayerGameBoard(board.getGrid(), you, manager.getGameState()); } else { this.Close(); WonderBuyingWindow window = new WonderBuyingWindow(resources, card, board, game); window.Show(); } } } if (index > 14 && index < 22) //Player clicked on RIGHT { int i = (index - 15); //0-6 the resource traded if (manager.canAfford(you)) { Canvas c = (Canvas)board.getGrid().Children[1]; Label l = (Label)c.Children[90]; l.Content = " " + manager.getTempCoins(you); manager.tradeTo(you, i, 1); resources = manager.GetCombinedResources(you); if (manager.ValidateWonder(you)) //ok check if you can play the card now. { you.getHand().Remove(card); //remove from cards in hand of player you.setPlayedACard(); //set true you.setWonderCards(card); you.getBoard().incrementWonderLevel(you); manager.getGameState().incrementTurn(); this.Close(); PlayerGameBoard play = new PlayerGameBoard(board.getGrid(), you, manager.getGameState()); } else { this.Close(); WonderBuyingWindow window = new WonderBuyingWindow(resources, card, board, game); window.Show(); } } } }
private int comScore(PlayerState p) { int score = 0; List<CommerceCard> comlist; //Commercial Structure comlist = new List<CommerceCard>(); //Cycle through played cards //Add all Commerce cards to list for (int i = 0; i < p.getPlayedCards().Count; i++) { if ((p.getPlayedCards()[i].getType() == 4) && (p.getPlayedCards()[i].getAct() == 3)) { comlist.Add((CommerceCard)p.getPlayedCards()[i]); } } for (int i = 0; i < comlist.Count; i++){ //Victorypoints per wonder if (comlist[i].getPerWonder() == 2) { score = score + p.getBoard().getCurrentWonderLevel(); } //Victorypoint per card if((comlist[i].getCollect()[2] > 0)){ //crawl through all played cards of player for (int j = 0; j < p.getPlayedCards().Count; j++) { //if card type matches victorypoint condition of commercial card if (p.getPlayedCards()[j].getType() == comlist[i].getCollect()[0]) { //add points appropriate to commercial card parameters score = score + comlist[i].getCollect()[2]; } } } } return score; //Guilds }
public int[] tradableArray(PlayerState p, int lr) { PlayerState player = null; int[] tradeTable = new int[7] { 0, 0, 0, 0, 0, 0, 0 }; switch (lr) { case 0: player = p; break; case 1: player = gameState.getLeftPlayer(p); break; case 2: player = gameState.getLeftPlayer(p); break; } int[] boardResources = p.getBoard().getResources(); for (int i = 0; i < 7; i++) { tradeTable[i] = SpecialResourceArray(player.getName())[i] + baseResources[player.getName()][i] + TempResources[player.getName()][i] + boardResources[i]; } return tradeTable; }
public Card getNextCard(PlayerState p, List<Card> hand) { Random random = new Random(); int randomNumber; Card c = null; if (ResourceManager.GetInstance().ValidateWonder(p)) { randomNumber = random.Next(0, 2); Console.WriteLine("attempting to play wonder " + randomNumber); if (randomNumber == 1) { Console.WriteLine("playing wonder " + randomNumber); randomNumber = random.Next(0, hand.Count - 1); c = hand[randomNumber]; p.setWonderCards(c); p.getBoard().incrementWonderLevel(p); } } List<int> availCards = new List<int>(); for (int i = 0; i < hand.Count; i++) { availCards.Add(i); } int trade; //selects a card to play for (int i = 0; i < hand.Count; i++) { randomNumber = random.Next(0, availCards.Count - 1); c = hand[availCards[randomNumber]]; if (ResourceManager.GetInstance().ValidateCard(p, c)) { p.addPlayedCards(c); return c; //Console.WriteLine("===================== CHECKED CARD ==========================="); } trade = ResourceManager.GetInstance().validateTrade(p, c, 0); if ((trade > 0) && (p.getCoins() >= trade)) { //.WriteLine(p.getName() + " trading for " + trade); p.updateCoins(-trade); ResourceManager.GetInstance().getGameState().getRightPlayer(p).updateCoins(trade); p.addPlayedCards(c); return c; } trade = ResourceManager.GetInstance().validateTrade(p, c, 1); if ((trade > 0) && (p.getCoins() >= trade)) { //Console.WriteLine(p.getName() + " trading for " + trade); p.updateCoins(-trade); p.addPlayedCards(c); ResourceManager.GetInstance().getGameState().getLeftPlayer(p).updateCoins(trade); return c; } availCards.Remove(randomNumber); //Console.Write("RANDOM STRATEGY:: AGE :: "); //Console.WriteLine(ResourceManager.GetInstance().getGameState().getAge()); } return null; }
//attempts to build a wonder public Card buildWonder(PlayerState p, List<Card> hand) { if (ResourceManager.GetInstance().ValidateWonder(p)) { for (int i = 0; i < hand.Count; i++) { if (hand[i].getType() == strategy) { p.setWonderCards(hand[i]); p.getBoard().incrementWonderLevel(p); return hand[i]; } } return hand[0]; } return null; }
public Card getNextCard(PlayerState p, List <Card> hand) { Random random = new Random(); int randomNumber; Card c = null; if (ResourceManager.GetInstance().ValidateWonder(p)) { randomNumber = random.Next(0, 2); Console.WriteLine("attempting to play wonder " + randomNumber); if (randomNumber == 1) { Console.WriteLine("playing wonder " + randomNumber); randomNumber = random.Next(0, hand.Count - 1); c = hand[randomNumber]; p.setWonderCards(c); p.getBoard().incrementWonderLevel(p); } } List <int> availCards = new List <int>(); for (int i = 0; i < hand.Count; i++) { availCards.Add(i); } int trade; //selects a card to play for (int i = 0; i < hand.Count; i++) { randomNumber = random.Next(0, availCards.Count - 1); c = hand[availCards[randomNumber]]; if (ResourceManager.GetInstance().ValidateCard(p, c)) { p.addPlayedCards(c); return(c); //Console.WriteLine("===================== CHECKED CARD ==========================="); } trade = ResourceManager.GetInstance().validateTrade(p, c, 0); if ((trade > 0) && (p.getCoins() >= trade)) { //.WriteLine(p.getName() + " trading for " + trade); p.updateCoins(-trade); ResourceManager.GetInstance().getGameState().getRightPlayer(p).updateCoins(trade); p.addPlayedCards(c); return(c); } trade = ResourceManager.GetInstance().validateTrade(p, c, 1); if ((trade > 0) && (p.getCoins() >= trade)) { //Console.WriteLine(p.getName() + " trading for " + trade); p.updateCoins(-trade); p.addPlayedCards(c); ResourceManager.GetInstance().getGameState().getLeftPlayer(p).updateCoins(trade); return(c); } availCards.Remove(randomNumber); //Console.Write("RANDOM STRATEGY:: AGE :: "); //Console.WriteLine(ResourceManager.GetInstance().getGameState().getAge()); } return(null); }