Esempio n. 1
0
        public static void playSimple(Game game)
        {
            int nrOfPlayers = game.GetNrPlayers();
            var players     = game.getPlayers();
            //var map = new Dictionary<Card, int>();
            var tableCards = new Dictionary <Card, Player>();

            bool GameOver = false;

            while (!GameOver)
            {
                foreach (Player player in players)
                {
                    /// 1. Jucatorul pune carte jos
                    /// 2. Din mana jucatorului se 'scoate' acea carte
                    /// 3. Cartile se adauga in map-ul cartiMasa<Carte, ID>

                    for (int i = 0; i < tableCards.Count; i++)
                    {
                        tableCards.Add(player.getPlayerHand().putCard(0), player);
                    }
                }

                /// 4. Se lucreaza cu map-ul
                /// 5. Se gaseste val max si nr de jucatori  cu val max

                int valMax = 0, nrPlayers = 0;
                foreach (var card in tableCards)
                {
                    if (card.Key.getNumber() == valMax)  //daca se gaseste val max, creste nr playeri
                    {
                        nrOfPlayers++;
                    }

                    if (card.Key.getNumber() > valMax)  //daca se gaseste val max, se initializeaza val max
                    {
                        valMax      = card.Key.getNumber();
                        nrOfPlayers = 1;
                    }
                }

                if (nrOfPlayers == 1)  //daca avem un singur jucator cu carte maxima
                {
                    foreach (var card in tableCards)
                    {
                        if (card.Key.getNumber() == valMax)  //gasim jucatorul si il afisam
                        {
                            Console.WriteLine("Jucatorul " + card.Value.getId());
                            //treb sa i dam si cartile
                            break;
                        }
                    }
                }

                else   //intra in razboi nr playeri
                {
                    var warCards = new Dictionary <Stack <Card>, Player>();

                    foreach (var card in tableCards)
                    {  //pentru fiecare jucator care intra in war, construim un stack
                       // sa stim care e ultima carte pusa jos de el
                        if (card.Key.getNumber() == valMax)
                        {
                            Stack <Card> cardsStack = new Stack <Card>();
                            cardsStack.Push(card.Key); //adaugam ultima carte intr-ul stack

                            warCards.Add(cardsStack, card.Value);
                        }

                        else  //pt jucatorii din afara war-ului
                        {
                            if (card.Value.getPlayerHand().getNrCards() == 0) //daca jucatorii care n-au intrat in war
                                                                              //raman cu 0 carti, atunci AFARA
                            {
                                players.Remove(card.Value);
                            }
                        }
                    }
                    DefaultDeck winnerDeck = new DefaultDeck(); //vom salva toate cartile de pe masa intr-un deck

                    foreach (var card in tableCards)            //aceste carti vor fi atribuite castigatorului
                    {
                        winnerDeck.addCard(card.Key);
                    }

                    tableCards.Clear(); //golim memoria la tableCards, sa nu apara erori

                    war(warCards, winnerDeck);
                }
            }
        }