示例#1
0
        //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()));
        }
示例#2
0
        //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);
        }
示例#3
0
        //returns base+temp+special resources
        public int[] InflatedResourceArray(PlayerState p)
        {
            int[]      totalResources   = { 0, 0, 0, 0, 0, 0, 0 };
            List <int> playersResources = baseResources[p.getName()];
            List <int> tempR            = TempResources[p.getName()];

            for (int i = 0; i < playersResources.Count(); i++)
            {
                totalResources[i] = (playersResources[i] + SpecialResourceArray(p)[i] + tempR[i]);
            }
            return(totalResources);
        }
示例#4
0
        public void DisplayPlayersResources(PlayerState p, Dictionary <string, List <int> > hashtable)
        {
            if (Log(p))
            {
                List <int> playersResources = hashtable[p.getName()];

                Console.Write("[{0}] Player  [{1}] Has  : ", _class.GetType().Name, p.getName());
                for (int index = 0; index < playersResources.Count; index++)
                {
                    Console.Write("[{0} : {1}] ", ((Resource)index).ToString(), playersResources[index]);
                }
                Console.WriteLine();
            }
        }
示例#5
0
        /*
         * Input: A Player
         *
         * Output: void -> Given a player, This is the helper function to resetResources.
         * This clears the temp resource of a player.
         */
        public void resetTempResources(PlayerState p)
        {
            List <int> temp = new List <int>();

            for (int i = 0; i < 7; i++)
            {
                temp.Add(0);
            }
            TempResources[p.getName()] = temp;
        }
示例#6
0
        /*
         * Input: A Player and a Card
         *
         *
         * Output: True or False -> Does the player have enough resources to play given card already?
         */
        public bool ValidateCard(PlayerState p, Card c)
        {
            //_logger.ValidatingCard(p, c);
            //_logger.CheckDictionary(p,hashtable);
            //c.toString();
            //Check for duplicity
            for (int i = 0; i < p.getPlayedCards().Count; i++)
            {
                if (c.getCardName() == p.getPlayedCards()[i].getCardName())
                {
                    if (p.getName().Equals("P0"))
                    {
                        System.Console.WriteLine("!Can't play card with the same name!");
                    }
                    return(false);
                }
            }

            //Check for precards
            if (preCardCheck(p, c))
            {
                return(true);
            }

            // First check what the coin costs and total resource cost are
            if (c.getCoinCost() == 0 && c.getTotalResourceCost() == 0)
            {
                //_logger.print(p,"Card dosn't cost anything");
                UpdateResources(p, c);
                return(true);
            }

            // If the coin cost is not equal to 0 then does the player have enoguh coins ?
            if (c.getCoinCost() != 0 && c.getTotalResourceCost() == 0)
            {
                //_logger.CheckingCoins(p, c);
                if (c.getCoinCost() <= p.getCoins())
                {
                    UpdateResources(p, c);
                    p.updateCoins(-c.getCoinCost());
                    //  _logger.CheckingPlayersCoins(p);
                    return(true);
                }
                return(false);
            }

            if (c.getTotalResourceCost() != 0)
            {
                //_logger.print(p,"Now we are working on the players Resources");
                return(CheckResourceCost(p, c.getCost()));
            }

            return(false);
        }
示例#7
0
        //Returns true if the player can afford the cost
        public bool CheckResourceCost(PlayerState p, int[] cost)
        {
            int[] totalResources = { 0, 0, 0, 0, 0, 0, 0 };
            if (!canAfford(p))
            {
                return(false);
            }
            List <int> playersResources = baseResources[p.getName()];
            List <int> tempR            = TempResources[p.getName()];

            for (int i = 0; i < playersResources.Count(); i++)
            {
                totalResources[i] = playersResources[i] + tempR[i];
            }
            if (p.getName().Equals("P0"))
            {
                System.Console.WriteLine(p.getName() + ":CheckResourceCost:COST:{" + cost[0] + "," + cost[1] + "," + cost[2] + "," + cost[3] + "," + cost[4] + "," + cost[5] + "," + cost[6] + "}");
                System.Console.WriteLine(p.getName() + ":CheckResourceCost:AVAI:{" + totalResources[0] + "," + totalResources[1] + "," + totalResources[2] + "," + totalResources[3] + "," + totalResources[4] + "," + totalResources[5] + "," + totalResources[6] + "}");
            }
            for (int i = 0; i < playersResources.Count(); i++)
            {
                if (totalResources[i] < cost[i])
                {
                    return(false);
                }
            }



            /*var resources = Enum.GetValues(typeof(Resource));
             * foreach (var type in resources)
             * {
             *  int resource = (int)type;
             *
             *  if (cost[resource] > totalResources[resource])
             *      return false;
             * }*/
            coinExchange(p);
            resetResources(p);
            return(true);
        }
示例#8
0
 public void ValidatingCard(PlayerState p, Card c)
 {
     if (Log(p))
     {
         System.Console.WriteLine("\n\n=============================================================================================================");
         System.Console.WriteLine("{0}:: \nValidateCard( Player [{1}] Card [{2}] Coin Cost [{3}] Resource Cost [{4}])"
                                  , _class.GetType().Name
                                  , p.getName()
                                  , c.getName()
                                  , c.getCoinCost()
                                  , c.getTotalResourceCost());
         System.Console.WriteLine("=============================================================================================================");
     }
 }
示例#9
0
        //Missing Code in this Function
        public void resetCommerceCards(PlayerState p)
        {
            List <CommerceCard> tempList = new List <CommerceCard>();

            for (int i = 0; i < p.getPlayedCards().Count; i++)
            {
                if (p.getPlayedCards()[i].getType() == 4)
                {
                    CommerceCard c = (CommerceCard)p.getPlayedCards()[i];

                    if (((c.getNumber() > 30) && (c.getNumber() < 37)) || ((c.getNumber() > 70) && (c.getNumber() < 77)))
                    {
                        tempList.Add(c);
                    }
                }
            }
            ComCards[p.getName()] = tempList;
        }
示例#10
0
        /*
         * 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;
        }
示例#11
0
        private void addPlayers(Grid g)
        {
            for (int i = 0; i < game.getPlayers().Count; i++)
            {
                Label       l      = new Label();
                PlayerState player = game.getPlayers()[i];
                List <int>  scores = player.getScores(game);

                l.FontSize = 24;
                l.Content  = player.getName();//"P" + (i+1);//TODO change so name shows AI geoffry

                Grid.SetColumn(l, (i + 2));
                Grid.SetRow(l, 1);
                g.Children.Add(l);

                int sum = 0;
                for (int j = 0; j < 7; j++)
                {
                    sum += scores[j];
                    Label v = new Label();

                    v.FontSize = 24;
                    v.Content  = scores[j];

                    Grid.SetRow(v, (j + 2));
                    Grid.SetColumn(v, (i + 2));
                    g.Children.Add(v);
                }

                Label s = new Label();

                s.FontSize = 24;
                s.Content  = sum;

                Grid.SetRow(s, (9));
                Grid.SetColumn(s, (i + 2));
                g.Children.Add(s);
            }
        }
示例#12
0
文件: Logger.cs 项目: sunneh/7Wonders
 public void ValidatingCard(PlayerState p, Card c)
 {
     if (Log(p))
     {
         System.Console.WriteLine("\n\n=============================================================================================================");
         System.Console.WriteLine("{0}:: \nValidateCard( Player [{1}] Card [{2}] Coin Cost [{3}] Resource Cost [{4}])"
                                  , _class.GetType().Name
                                  , p.getName()
                                  , c.getName()
                                  , c.getCoinCost()
                                  , c.getTotalResourceCost());
         System.Console.WriteLine("=============================================================================================================");
     }
 }
示例#13
0
文件: Logger.cs 项目: sunneh/7Wonders
 public void LogPlayer(int index)
 {            
     player = _gameState.getPlayers()[index];
    _playerName = player.getName();
 }
示例#14
0
        public void handleSpecialCase()
        {
            if (player.getBoard().getName().Equals("WB11"))
            {
                WB11 b = (WB11)player.getBoard();

                if (b.getCurrentWonderLevel() == 2 && b.getFreeBuild())
                {
                    DiscardsWindow window = new DiscardsWindow(player, parent);
                    window.Show();
                    b.setFreeBuild();//put back to false
                }
            }

            if (player.getBoard().getName().Equals("WB12"))
            {
                WB12 b = (WB12)player.getBoard();

                if (b.getFreeBuild() == true && game.getDiscards().Count > 0)
                {
                    b.setFreeBuild(false);
                    DiscardsWindow window = new DiscardsWindow(player, parent);
                    window.Show();

                    /*if (b.getCurrentWonderLevel() == 1)
                     * {
                     *
                     *  b.setFreeBuild();//put back to false
                     * }
                     * if (b.getCurrentWonderLevel() == 2)
                     * {
                     *  DiscardsWindow window = new DiscardsWindow(player, parent);
                     *  window.Show();
                     * }
                     * if (b.getCurrentWonderLevel() == 3)
                     * {
                     *  DiscardsWindow window = new DiscardsWindow(player, parent);
                     *  window.Show();
                     * }*/
                }
            }

            if (player.getBoard().getName().Equals("WB4"))
            {
                WB4 b = (WB4)player.getBoard();

                Console.WriteLine("Current Wonder Level " + b.getCurrentWonderLevel() + " doubleCard: " + b.getDoubleCard() + " how many cards: " + player.getHand().Count);


                if (b.getCurrentWonderLevel() >= 2 && player.getHand().Count == 1)//on their last card
                {
                    Console.WriteLine("Ok inside extra card " + " player name " + player.getName() + " how many cards: " + player.getHand().Count);

                    PlayExtraCardWindow window = new PlayExtraCardWindow(player, parent, this, player.getHand()[0]);
                    window.Show();
                    b.setDoubleCard();//put back to false
                }
            }
            if (player.getBoard().getName().Equals("WB9"))
            {
                WB9 b = (WB9)player.getBoard();

                if (b.getCurrentWonderLevel() >= 2 && b.getFreeBuild())
                {
                    this.showSpecialMoveButton();//show it so the player can play a card for free.
                }
            }
        }
示例#15
0
文件: Logger.cs 项目: sunneh/7Wonders
 public void DisplayAllPlayersResources(PlayerState p, Dictionary<string, List<int>> hashtable)
 {
     if (Log(p))
     {
         foreach (KeyValuePair<string, List<int>> entry in hashtable)
         {
             string player = entry.Key;
             List<int> resources = entry.Value;
             Console.Write ("[{0}] Player  [{1}] Has  : ", _class.GetType().Name, p.getName());
             for (int index = 0; index < resources.Count; index++)
             {
                 Console.Write("[{0} : {1}] ", ((Resource)index).ToString(), resources[index]);
             }
             Console.WriteLine();
         }
     }
 }
        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());       
        }
示例#17
0
        //Returns true if the player can afford the cost
        public bool CheckResourceCost(PlayerState p, int[] cost)
        {
            int[] totalResources = { 0, 0, 0, 0, 0, 0, 0 };
            if (!canAfford(p)) { return false; }
            List<int> playersResources = baseResources[p.getName()];
            List<int> tempR = TempResources[p.getName()];
            
            for (int i = 0; i < playersResources.Count(); i++)
            {
                totalResources[i] = playersResources[i] + tempR[i];
            }
            if(p.getName().Equals("P0")){
            System.Console.WriteLine(p.getName() + ":CheckResourceCost:COST:{" + cost[0] + "," + cost[1] + "," + cost[2] + "," + cost[3] + "," + cost[4] + "," + cost[5] + "," + cost[6] + "}");
            System.Console.WriteLine(p.getName() + ":CheckResourceCost:AVAI:{" + totalResources[0] + "," + totalResources[1] + "," + totalResources[2] + "," + totalResources[3] + "," + totalResources[4] + "," + totalResources[5] + "," + totalResources[6] + "}");
            }
            for (int i = 0; i < playersResources.Count(); i++)
            {
                if (totalResources[i] < cost[i]) 
                {
                    return false; 
                }
            }
            


            /*var resources = Enum.GetValues(typeof(Resource));
            foreach (var type in resources)
            {
                int resource = (int)type;

                if (cost[resource] > totalResources[resource])
                    return false;
            }*/
            coinExchange(p);
            resetResources(p);
            return true;
        }
示例#18
0
        /*
        * Input: A Player, index of resource used
        * 
        * Output: void -> Given a player, 
        */
        public void usingSpecialResource(PlayerState p, int resourceIndex) {
            int count = SResources[p.getName()].Count;

            //Can't allocate resource values higher then type 7
            if (resourceIndex > 6 || resourceIndex < 0) { return; }

            if (ComCards[p.getName()].Count > 0)
            {
                for (int i = 0; i < ComCards[p.getName()].Count; i++)
                {
                    //Resource
                    if ((resourceIndex < 4) && (ComCards[p.getName()][i].getResources() == 1 )) 
                    {
                        TempResources[p.getName()][resourceIndex]++;
                        
                        System.Console.WriteLine("REMOVING :" + ComCards[p.getName()][i].getName() + " FROM " + p.getName());
                        int[] resources = trArray(p);
                        System.Console.WriteLine("ResourceArray for " + p.getName() + " {" + resources[0] + "," + resources[1] + "," + resources[2] + "," + resources[3] + "," + resources[4] + "," + resources[5] + "," + resources[6] + "}");
                    
                        ComCards[p.getName()].RemoveAt(i);
                        return;
                    }
                    //Man. goods
                    else if ((resourceIndex > 3) && (ComCards[p.getName()][i].getResources() == 2))
                    {
                        TempResources[p.getName()][resourceIndex]++;
                        
                        System.Console.WriteLine("REMOVING :" + ComCards[p.getName()][i].getName() + " FROM " + p.getName());
                        int[] resources = trArray(p);
                        System.Console.WriteLine("ResourceArray for " + p.getName() + " {" + resources[0] + "," + resources[1] + "," + resources[2] + "," + resources[3] + "," + resources[4] + "," + resources[5] + "," + resources[6] + "}");
                    
                        ComCards[p.getName()].RemoveAt(i);
                        return;
                    }
                }
            }


            //Cycle through list of special resource cards and look for cards with said resources
            for (int i = 0; i < count ; i++)
            {                
                if (SResources[p.getName()][i].getResources()[resourceIndex] > 0)
                {
                    TempResources[p.getName()][resourceIndex]++;

                    System.Console.WriteLine("REMOVING :" + SResources[p.getName()][i].getName() + " FROM " + p.getName());
                    int[] resources = trArray(p);
                    System.Console.WriteLine("ResourceArray for " + p.getName() + " {" + resources[0] + "," + resources[1] + "," + resources[2] + "," + resources[3] + "," + resources[4] + "," + resources[5] + "," + resources[6] + "}");
                    

                    SResources[p.getName()].RemoveAt(i);
                    return;
                }

            }
        }
        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); 
                    }

                }

            }
            SResources[p.getName()] = tempList;
        }
示例#20
0
        //Missing Code in this Function
        public void resetCommerceCards(PlayerState p) {
            List<CommerceCard> tempList = new List<CommerceCard>();

            for (int i = 0; i < p.getPlayedCards().Count; i++)
            {
                if (p.getPlayedCards()[i].getType() == 4)
                {
                    CommerceCard c = (CommerceCard)p.getPlayedCards()[i];

                    if (((c.getNumber() > 30) && (c.getNumber() < 37)) || ((c.getNumber() > 70) && (c.getNumber() < 77)))
                    {
                        tempList.Add(c);
                    }
                }
            }
            ComCards[p.getName()] = tempList;
        }
示例#21
0
 /*
 * Input: A Player
 * 
 * Output: void -> Given a player, This is the helper function to resetResources.
 * This clears the temp resource of a player.
 */
 public void resetTempResources(PlayerState p) { 
     List<int> temp = new List<int>();
     for(int i = 0; i<7 ; i++) {temp.Add(0);}
     TempResources[p.getName()] = temp;
 }
示例#22
0
        /*
        * 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;
        }
        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;
        }
        private void UpdateResources(PlayerState p, Card c)
        {
           //_logger.UpdatingPlayersResources(p,c);
           //_logger.DisplayResourceCost(p,c);

            if (c is CommerceCard)
            {
                //KensUtilityfunctions k = new KensUtilityfunctions();
                //int income = k.calcCommerceIncome(c, gameState, p.getSeatNumber());
                //p.updateCoins(income); 
                if (((CommerceCard)c).hasTradableResources())
                {
                   //_logger.DisplayPlayersResources(p, hashtable);
                   //_logger.CheckCommerceCard(p,c);
                    List<int> current = hashtable[p.getName()]; 
                    int[] tradableResources = ((CommerceCard)c).getResourceTradable();
                    for (int index = 0; index < tradableResources.Count(); index++)
                    {
                        switch (index)
                        {
                            case (int)Resource.Wood:
                                current[(int)Resource.Wood] += tradableResources[index];
                                break;
                            case (int)Resource.Stone:
                                current[(int)Resource.Stone] += tradableResources[index];
                                break;
                            case (int)Resource.Clay:
                                current[(int)Resource.Clay] += tradableResources[index];
                                break;
                            case (int)Resource.Ore:
                                current[(int)Resource.Ore] += tradableResources[index];
                                break;
                        }
                    }
                    hashtable[p.getName()] = current;

                   //_logger.DisplayPlayersResources(p, hashtable);
                }                               
                return;
            }

            if (c is ResourceCard)
            {
               //_logger.CheckResourceCard(p,c);
               //_logger.DisplayPlayersResources(p, hashtable);
                
                List<int> current = hashtable[p.getName()];

                if (((ResourceCard)c).hasTradableResources())
                {
                    int[] tradableResources = ((ResourceCard)c).getResources();
                    for (int index = 0; index < tradableResources.Count(); index++)
                    {
                        switch (index)
                        {
                            case (int)Resource.Wood:
                                current[(int)Resource.Wood]  += tradableResources[index];
                                break;
                            case (int)Resource.Stone:
                                current[(int)Resource.Stone] += tradableResources[index];
                                break;
                            case (int)Resource.Clay:
                                current[(int)Resource.Clay]  += tradableResources[index];
                                break;
                            case (int)Resource.Ore:
                                current[(int)Resource.Ore]   += tradableResources[index];
                                break;
                            case (int)Resource.Glass:
                                current[(int)Resource.Glass] += tradableResources[index];
                                break;
                            case (int)Resource.Loom:
                                current[(int)Resource.Loom] += tradableResources[index];
                                break;
                            case (int)Resource.Paper:
                                current[(int)Resource.Paper] += tradableResources[index];
                                break;
                        }
                    }
                    hashtable[p.getName()] = current;
                   //_logger.DisplayPlayersResources(p, hashtable);
                }
                return;
            }
           //_logger.CheckDictionary(p,hashtable);
           //_logger.DisplayPlayersResources(p, hashtable);
        }
        //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());
        }
示例#26
0
        public void tradeTo(PlayerState p, int resourceIndex, int player){
            int tempIntToBeReplacedByFunction = 0;
            
            //player = 0, left, player = 1, right
            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); }
            else { TradeTo = gameState.getRightPlayer(p); }

            //1. Check for resource in base
            if (baseResources[TradeTo.getName()][resourceIndex] > 0) {
                coinTransactions[player] += tempIntToBeReplacedByFunction;
                TempResources[p.getName()][resourceIndex]++;
                TempResources[TradeTo.getName()][resourceIndex]--;
            }
            //2. Then check resource in SR
            else if(SpecialResourceArray(TradeTo.getName())[resourceIndex] > 0){
                coinTransactions[player] += tempIntToBeReplacedByFunction;
                TempResources[p.getName()][resourceIndex]++;
                usingSpecialResource(TradeTo, resourceIndex);
            }
            //3. Profit
            else { System.Console.WriteLine("Error, no such resource available."); }
        }
        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;
        }
示例#28
0
        public int[] trArray(PlayerState p)
        {
            int[] totalResources = { 0, 0, 0, 0, 0, 0, 0 };
            List<int> playersResources = baseResources[p.getName()];
            List<int> tempR = TempResources[p.getName()];

            for (int i = 0; i < playersResources.Count(); i++)
            {
                totalResources[i] = (playersResources[i] + tempR[i]);
            }
            return totalResources;
        }
        private void UpdateResources(PlayerState p, Card c)
        {
           //_logger.UpdatingPlayersResources(p,c);
           //_logger.DisplayResourceCost(p,c);

            if (c is CommerceCard)
            {
                KensUtilityfunctions k = new KensUtilityfunctions();
                int income = k.calcCommerceIncome(c, gameState, p.getSeatNumber());
                p.updateCoins(income);                               
                return;
            }

            if (c is ResourceCard)
            {
               //_logger.CheckResourceCard(p,c);
               //_logger.DisplayPlayersResources(p, hashtable);
                
                List<int> current = baseResources[p.getName()];

                if (((ResourceCard)c).hasTradableResources())
                {
                    if ((((ResourceCard)c).getNumber() > 7) && (((ResourceCard)c).getNumber() < 14))
                    {
                        //populate Special Resource Hashmap if the Card is a special resource
                        List<ResourceCard> srlst = SResources[p.getName()];
                        srlst.Add((ResourceCard)c);
                        SResources[p.getName()] = srlst;
                        System.Console.WriteLine(p.getName() + " is adding Special Resource Card: {" + ((ResourceCard)c).getResources()[0] + "," + ((ResourceCard)c).getResources()[1] + "," + ((ResourceCard)c).getResources()[2] + "," + ((ResourceCard)c).getResources()[3] + "," + ((ResourceCard)c).getResources()[4] + "," + ((ResourceCard)c).getResources()[5] + "," + ((ResourceCard)c).getResources()[6] + "}");
                    }
                    else
                    {
                        int[] tradableResources = ((ResourceCard)c).getResources();
                        for (int index = 0; index < tradableResources.Count(); index++)
                        {
                            switch (index)
                            {
                                case (int)Resource.Wood:
                                    current[(int)Resource.Wood] += tradableResources[index];
                                    break;
                                case (int)Resource.Stone:
                                    current[(int)Resource.Stone] += tradableResources[index];
                                    break;
                                case (int)Resource.Clay:
                                    current[(int)Resource.Clay] += tradableResources[index];
                                    break;
                                case (int)Resource.Ore:
                                    current[(int)Resource.Ore] += tradableResources[index];
                                    break;
                                case (int)Resource.Glass:
                                    current[(int)Resource.Glass] += tradableResources[index];
                                    break;
                                case (int)Resource.Loom:
                                    current[(int)Resource.Loom] += tradableResources[index];
                                    break;
                                case (int)Resource.Paper:
                                    current[(int)Resource.Paper] += tradableResources[index];
                                    break;
                            }
                        }
                        System.Console.WriteLine(p.getName() +" is adding: {" + tradableResources[0] + "," + tradableResources[1] + "," + tradableResources[2] + "," + tradableResources[3] + "," + tradableResources[4] + "," + tradableResources[5] + "," + tradableResources[6] + "}");
                        baseResources[p.getName()] = current;
                        
                        //_logger.DisplayPlayersResources(p, hashtable);
                    }
                }
                return;
            }
           //_logger.CheckDictionary(p,hashtable);
           //_logger.DisplayPlayersResources(p, hashtable);
        }
示例#30
0
 public void LogPlayer(int index)
 {
     player      = _gameState.getPlayers()[index];
     _playerName = player.getName();
 }
示例#31
0
        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");
            }
        }
示例#32
0
        /*
         * 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);
        }
示例#33
0
        //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++)
            {
                //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.getName())[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."); }
        }
示例#34
0
 public bool Log()
 {
     return(_log ? (_playerName == null || player.getName() == _playerName) : false);
 }
示例#35
0
文件: Logger.cs 项目: sunneh/7Wonders
        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");
            }
        }
示例#36
0
 public bool Log(PlayerState p)
 {
     return(_log ? (_playerName == null || p.getName() == _playerName) : false);
 }
示例#37
0
文件: Logger.cs 项目: sunneh/7Wonders
        public void DisplayPlayersResources(PlayerState p, Dictionary<string, List<int>> hashtable)
        {
            if (Log(p))
            {
                List<int> playersResources = hashtable[p.getName()];

                Console.Write ("[{0}] Player  [{1}] Has  : ", _class.GetType().Name, p.getName());
                for (int index = 0; index < playersResources.Count; index++)
                {
                    Console.Write("[{0} : {1}] ", ((Resource)index).ToString(), playersResources[index]);
                }
                Console.WriteLine();
            }
        }
示例#38
0
        /*
        * Input: A Player and a Card
        *
        * 
        * Output: True or False -> Does the player have enough resources to play given card already? 
        */
        public bool ValidateCard (PlayerState p, Card c)
        {
            //_logger.ValidatingCard(p, c);
            //_logger.CheckDictionary(p,hashtable);
            //c.toString();
            //Check for duplicity
            for (int i = 0; i < p.getPlayedCards().Count; i++)
            {
                if (c.getCardName() == p.getPlayedCards()[i].getCardName())
                {
                    if (p.getName().Equals("P0"))
                    {
                        System.Console.WriteLine("!Can't play card with the same name!");
                    }
                    return false; 
                }
            }

            //Check for precards
            if (preCardCheck(p, c)) { return true; }

            // First check what the coin costs and total resource cost are            
            if (c.getCoinCost() == 0 && c.getTotalResourceCost() == 0)
            {
               //_logger.print(p,"Card dosn't cost anything");
                UpdateResources(p, c);
                return true;
            }

            // If the coin cost is not equal to 0 then does the player have enoguh coins ?
            if (c.getCoinCost() != 0 && c.getTotalResourceCost() == 0)
            {
               //_logger.CheckingCoins(p, c);                
                if (c.getCoinCost() <= p.getCoins())
                {
                    UpdateResources(p, c);
                    p.updateCoins(-c.getCoinCost());
                 //  _logger.CheckingPlayersCoins(p);                    
                    return true;
                }
                return false;
            }

            if (c.getTotalResourceCost() != 0)
            {
               //_logger.print(p,"Now we are working on the players Resources");
                return CheckResourceCost(p,c.getCost());
            }

            return false;
        }
示例#39
0
文件: Logger.cs 项目: sunneh/7Wonders
 public bool Log(PlayerState p)
 {
     return _log ? (_playerName == null || p.getName() == _playerName) : false;
 }
示例#40
0
 public void DisplayAllPlayersResources(PlayerState p, Dictionary <string, List <int> > hashtable)
 {
     if (Log(p))
     {
         foreach (KeyValuePair <string, List <int> > entry in hashtable)
         {
             string     player    = entry.Key;
             List <int> resources = entry.Value;
             Console.Write("[{0}] Player  [{1}] Has  : ", _class.GetType().Name, p.getName());
             for (int index = 0; index < resources.Count; index++)
             {
                 Console.Write("[{0} : {1}] ", ((Resource)index).ToString(), resources[index]);
             }
             Console.WriteLine();
         }
     }
 }
示例#41
0
文件: Logger.cs 项目: sunneh/7Wonders
 public void LogPlayer (PlayerState p)
 {
    _playerName = p.getName();
     player = p;
 }
示例#42
0
        /*
         * Input: A Player, index of resource used
         *
         * Output: void -> Given a player,
         */
        public void usingSpecialResource(PlayerState p, int resourceIndex)
        {
            int count = SResources[p.getName()].Count;

            //Can't allocate resource values higher then type 7
            if (resourceIndex > 6 || resourceIndex < 0)
            {
                return;
            }

            if ((resourceIndex < 4) && (wonderBoardExceptionResource == true))
            {
                TempResources[p.getName()][resourceIndex]++;
                wonderBoardExceptionResource = false;
            }

            if ((resourceIndex > 3) && (wonderBoardExceptionManGood == true))
            {
                TempResources[p.getName()][resourceIndex]++;
                wonderBoardExceptionManGood = false;
            }


            if (ComCards[p.getName()].Count > 0)
            {
                for (int i = 0; i < ComCards[p.getName()].Count; i++)
                {
                    //Resource
                    if ((resourceIndex < 4) && (ComCards[p.getName()][i].getResources() == 1))
                    {
                        TempResources[p.getName()][resourceIndex]++;

                        //System.Console.WriteLine("REMOVING :" + ComCards[p.getName()][i].getName() + " FROM " + p.getName());
                        int[] resources = trArray(p);
                        //System.Console.WriteLine("ResourceArray for " + p.getName() + " {" + resources[0] + "," + resources[1] + "," + resources[2] + "," + resources[3] + "," + resources[4] + "," + resources[5] + "," + resources[6] + "}");

                        ComCards[p.getName()].RemoveAt(i);
                        return;
                    }
                    //Man. goods
                    else if ((resourceIndex > 3) && (ComCards[p.getName()][i].getResources() == 2))
                    {
                        TempResources[p.getName()][resourceIndex]++;

                        //System.Console.WriteLine("REMOVING :" + ComCards[p.getName()][i].getName() + " FROM " + p.getName());
                        int[] resources = trArray(p);
                        //System.Console.WriteLine("ResourceArray for " + p.getName() + " {" + resources[0] + "," + resources[1] + "," + resources[2] + "," + resources[3] + "," + resources[4] + "," + resources[5] + "," + resources[6] + "}");

                        ComCards[p.getName()].RemoveAt(i);
                        return;
                    }
                }
            }


            //Cycle through list of special resource cards and look for cards with said resources
            for (int i = 0; i < count; i++)
            {
                if (SResources[p.getName()][i].getResources()[resourceIndex] > 0)
                {
                    TempResources[p.getName()][resourceIndex]++;

                    System.Console.WriteLine("REMOVING :" + SResources[p.getName()][i].getName() + " FROM " + p.getName());
                    int[] resources = trArray(p);
                    System.Console.WriteLine("ResourceArray for " + p.getName() + " {" + resources[0] + "," + resources[1] + "," + resources[2] + "," + resources[3] + "," + resources[4] + "," + resources[5] + "," + resources[6] + "}");


                    SResources[p.getName()].RemoveAt(i);
                    return;
                }
            }
        }
        public void usingSpecialResource(PlayerState p, int resourceIndex) {
            //Can't allocate resource values higher then type 7
            if (resourceIndex > 6) { return; }

            int count = SResources[p.getName()].Count;

            //Cycle through list of special resource cards and look for cards with said resources
            for (int i = 0; i < count ; i++)
            {                

                if (SResources[p.getName()][i].getResources()[resourceIndex] > 0)
                {
                    TempResources[p.getName()][resourceIndex]++;
                    System.Console.WriteLine("REMOVING " + SResources[p.getName()][i].getName() + " FROM " + p.getName());
                    SResources[p.getName()].RemoveAt(i);
                }

            }
        }
示例#44
0
        private void UpdateResources(PlayerState p, Card c)
        {
            //_logger.UpdatingPlayersResources(p,c);
            //_logger.DisplayResourceCost(p,c);

            if (c is CommerceCard)
            {
                //Coin Transaction from playing a commerce Card
                KensUtilityfunctions k = new KensUtilityfunctions();
                int income             = k.calcCommerceIncome(c, gameState, p.getSeatNumber());
                p.updateCoins(income);

                //Adding commerce card if it affects trade/resources
                if (((c.getNumber() > 30) && (c.getNumber() < 37)) || ((c.getNumber() > 70) && (c.getNumber() < 77)))
                {
                    ComCards[p.getName()].Add((CommerceCard)c);
                }
                return;
            }

            if (c is ResourceCard)
            {
                //_logger.CheckResourceCard(p,c);
                //_logger.DisplayPlayersResources(p, hashtable);

                List <int> current = baseResources[p.getName()];

                if (((ResourceCard)c).hasTradableResources())
                {
                    if ((((ResourceCard)c).getNumber() > 7) && (((ResourceCard)c).getNumber() < 14))
                    {
                        //populate Special Resource Hashmap if the Card is a special resource
                        List <ResourceCard> srlst = SResources[p.getName()];
                        srlst.Add((ResourceCard)c);
                        SResources[p.getName()] = srlst;
                        //System.Console.WriteLine(p.getName() + " is adding Special Resource Card: {" + ((ResourceCard)c).getResources()[0] + "," + ((ResourceCard)c).getResources()[1] + "," + ((ResourceCard)c).getResources()[2] + "," + ((ResourceCard)c).getResources()[3] + "," + ((ResourceCard)c).getResources()[4] + "," + ((ResourceCard)c).getResources()[5] + "," + ((ResourceCard)c).getResources()[6] + "}");
                    }
                    else
                    {
                        int[] tradableResources = ((ResourceCard)c).getResources();
                        for (int index = 0; index < tradableResources.Count(); index++)
                        {
                            switch (index)
                            {
                            case (int)Resource.Wood:
                                current[(int)Resource.Wood] += tradableResources[index];
                                break;

                            case (int)Resource.Stone:
                                current[(int)Resource.Stone] += tradableResources[index];
                                break;

                            case (int)Resource.Clay:
                                current[(int)Resource.Clay] += tradableResources[index];
                                break;

                            case (int)Resource.Ore:
                                current[(int)Resource.Ore] += tradableResources[index];
                                break;

                            case (int)Resource.Glass:
                                current[(int)Resource.Glass] += tradableResources[index];
                                break;

                            case (int)Resource.Loom:
                                current[(int)Resource.Loom] += tradableResources[index];
                                break;

                            case (int)Resource.Paper:
                                current[(int)Resource.Paper] += tradableResources[index];
                                break;
                            }
                        }
                        //System.Console.WriteLine(p.getName() +" is adding: {" + tradableResources[0] + "," + tradableResources[1] + "," + tradableResources[2] + "," + tradableResources[3] + "," + tradableResources[4] + "," + tradableResources[5] + "," + tradableResources[6] + "}");
                        baseResources[p.getName()] = current;

                        //_logger.DisplayPlayersResources(p, hashtable);
                    }
                }
                return;
            }
            //_logger.CheckDictionary(p,hashtable);
            //_logger.DisplayPlayersResources(p, hashtable);
        }
        //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());       
        }*/

        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]);
            }
            return new Resources(l.ToArray(), r.ToArray(), c.ToArray(), p.getName());
        }
示例#46
0
        //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 void usingSpecialResource(PlayerState p, int resourceIndex) {
            //Can't allocate resource values higher then type 7
            if (resourceIndex > 6) { return; }

            int count = SResources[p.getName()].Count;
            List<int> playersResources = baseResources[p.getName()];
            //Cycle through list of special resource cards and look for cards with said resources
            for (int i = 0; i < count ; i++)
            {                
                if (SResources[p.getName()][i].getResources()[resourceIndex] > 0)
                {
                    TempResources[p.getName()][resourceIndex]++;
                    System.Console.WriteLine("REMOVING " + SResources[p.getName()][i].getName() + " FROM " + p.getName());
                    ResourceCard rc = SResources[p.getName()][i];
                    int[] resources = rc.getResources();

                    for (int index = 0; index < resources.Count(); index++)
                    {
                        playersResources[index] = playersResources[index] + resources[index];
                    }
                    SResources[p.getName()].RemoveAt(i);
                }
            }
            baseResources[p.getName()] = playersResources;
        }
示例#48
0
        //Creates an int[7] of special resources from player name
        public int[] SpecialResourceArray(PlayerState p)
        {
            int[] specialResourceTable = new int[7] {
                0, 0, 0, 0, 0, 0, 0
            };

            //Special Resource Cards
            for (int i = 0; i < SResources[p.getName()].Count; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    specialResourceTable[j] += SResources[p.getName()][i].getResources()[j];
                }
            }

            //Special Commerce Cards
            for (int i = 0; i < ComCards[p.getName()].Count; i++)
            {
                if (ComCards[p.getName()][i].getResources() == 1)
                {
                    for (int j = 0; j < 7; j++)
                    {
                        if (j < 4)
                        {
                            specialResourceTable[j]++;
                        }
                    }
                }
                if (ComCards[p.getName()][i].getResources() == 2)
                {
                    for (int j = 0; j < 7; j++)
                    {
                        if (j > 3)
                        {
                            specialResourceTable[j]++;
                        }
                    }
                }
            }

            if (wonderBoardExceptionManGood == true)
            {
                for (int j = 0; j < 7; j++)
                {
                    if (j > 3)
                    {
                        specialResourceTable[j]++;
                    }
                }
            }

            if (wonderBoardExceptionResource == true)
            {
                for (int j = 0; j < 7; j++)
                {
                    if (j < 4)
                    {
                        specialResourceTable[j]++;
                    }
                }
            }


            return(specialResourceTable);
        }
        //Returns true if the player can afford the cost
        public bool CheckResourceCost(PlayerState p, int[] cost)
        {
            int[] totalResources = { 0, 0, 0, 0, 0, 0, 0 };
            List<int> playersResources = baseResources[p.getName()];
            List<int> tempR = TempResources[p.getName()];

            for (int i = 0; i < playersResources.Count(); i++)
            {
                totalResources[i] = (playersResources[i] + tempR[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;
        }
示例#50
0
 public void LogPlayer(PlayerState p)
 {
     _playerName = p.getName();
     player      = p;
 }