public static void war(Dictionary <Stack <Card>, Player> warCards, DefaultDeck winnerDeck) { /// 1. hotaram cate carti pune fiecare jucator ( /// -daca are 0 carti-aia e; /// -daca are nr carti '<=' nr carti de pus jos -nr carti; /// -daca are nr carti '>' nr carti de pus jos -nr carti de pus jos; /// 2. pargurgem stack urile, gasim val max, aflam cati au carte max /// -> ori intram iar in war cu jucatorii ramasi /// -> ori alegem castigatorul/castigatorii(in caz de este egalitate si au 0 carti in mana) /// }
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); } } }
static void Main(string[] args) { Console.WriteLine(); Deck deck = new DefaultDeck(52); //deck.printDeck(); deck.shuffleDeck(); // Card carte4 = new Card(4, CardColor.club); //construim cartile // Card carte5 = new Card(8, CardColor.club); /* var map = new Dictionary<Card, int>(); //facem un map pentru carte si Id jucator * map.Add(carte4, 13); //adaugam in map cartea * map.Add(carte5, 12); * WarRules.compareCards(map); //o trimitem la razboi */ deck.printDeck(); List <Card> returned = deck.extractNCards(5); foreach (Card c in returned) { Console.WriteLine(c); } deck.printDeck(); //teste pt rules Card carte4 = new Card(4, CardColor.club); Card carte5 = new Card(8, CardColor.club); WarRules.compareCards(carte4, carte5); int x = WarRules.getHandWinner(); int y = WarRules.getMaxCard(); int z = WarRules.getNrPlayers(); int t = WarRules.getWarParties(); Console.WriteLine("au jucat " + z + " playeri"); Console.WriteLine("cea mai mare carte a fost " + y); Console.WriteLine("a castigat sigur playerul cu indicele " + x); Console.WriteLine("au intrat in razboi " + t); Console.WriteLine(); Card carte1 = new Card(9, CardColor.spade); Card carte2 = new Card(9, CardColor.club); Card carte3 = new Card(9, CardColor.heart); WarRules.compareCards(carte1, carte2, carte5, carte3); x = WarRules.getHandWinner(); y = WarRules.getMaxCard(); z = WarRules.getNrPlayers(); t = WarRules.getWarParties(); Console.WriteLine("au jucat " + z + " playeri"); Console.WriteLine("cea mai mare carte a fost " + y); Console.WriteLine("a castigat sigur playerul cu indicele " + x); Console.WriteLine("au intrat in razboi " + t); }