//Constructor
 public Game()
 {
     //Load data if exists
     if (!LoadData())
     {
         SetNewGame();
     }
     else
     {
         //Opcion de cargar juego previo
         Visualization.ClearConsole();
         //Mostar opciones, cargar o juego nuevo
         Visualization.ShowListOptions(new List <string>()
         {
             "No, I was losing", "Load previous game"
         }, "You have a previous game, continue?");
         if (Visualization.GetUserInput(1) == 1)
         {
             decks             = actualData["decks"] as List <Deck>;
             captains          = actualData["captains"] as List <SpecialCard>;
             players           = actualData["players"] as Player[];
             ActivePlayer      = actualData["activePlayer"] as Player;
             boardGame         = actualData["board"] as Board;
             turn              = (int)actualData["turn"];
             bothPlayersPlayed = (bool)actualData["bothPlayersPlayed"];
         }
         else
         {
             SetNewGame();
         }
     }
 }
Exemple #2
0
        public void Play()
        {
            int userInput         = 0;
            int firstOrSecondUser = ActivePlayer.Id == 0 ? 0 : 1;


            //turno 0 o configuracion
            if (turn == 0)
            {
                for (int _ = 0; _ < Players.Length; _++)
                {
                    ActivePlayer = Players[firstOrSecondUser];
                    Visualization.ClearConsole();
                    //Mostrar mensaje de inicio
                    Visualization.ShowProgramMessage($"Player {ActivePlayer.Id+1} select Deck and Captain:");
                    //Preguntar por deck
                    Visualization.ShowDecks(this.Decks);
                    userInput = Visualization.GetUserInput(this.Decks.Count - 1);
                    Deck deck = new Deck();
                    deck.Cards        = new List <Card>(Decks[userInput].Cards);
                    ActivePlayer.Deck = deck;
                    //Preguntar por capitan
                    Visualization.ShowCaptains(Captains);
                    userInput = Visualization.GetUserInput(this.Captains.Count - 1);
                    ActivePlayer.ChooseCaptainCard(new SpecialCard(Captains[userInput].Name, Captains[userInput].Type, Captains[userInput].Effect));
                    //Asignar mano
                    ActivePlayer.FirstHand();
                    //Mostrar mano
                    Visualization.ShowHand(ActivePlayer.Hand);
                    //Mostar opciones, cambiar carta o pasar
                    Visualization.ShowListOptions(new List <string>()
                    {
                        "Change Card", "Pass"
                    }, "Change 3 cards or ready to play:");
                    userInput = Visualization.GetUserInput(1);
                    if (userInput == 0)
                    {
                        Visualization.ClearConsole();
                        Visualization.ShowProgramMessage($"Player {ActivePlayer.Id+1} change cards:");
                        Visualization.ShowHand(ActivePlayer.Hand);
                        for (int i = 0; i < DEFAULT_CHANGE_CARDS_NUMBER; i++)
                        {
                            Visualization.ShowProgramMessage($"Input the numbers of the cards to change (max {DEFAULT_CHANGE_CARDS_NUMBER}). To stop enter -1");
                            userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count, true);
                            if (userInput == -1)
                            {
                                break;
                            }
                            ActivePlayer.ChangeCard(userInput);
                            Visualization.ShowHand(ActivePlayer.Hand);
                        }
                    }
                    firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                }
                turn += 1;
            }
        }
        public void Play()
        {
            int userInput         = 0;
            int firstOrSecondUser = ActivePlayer.Id == 0 ? 0 : 1;


            //turno 0 o configuracion
            if (turn == 0)
            {
                for (int _ = 0; _ < Players.Length; _++)
                {
                    ActivePlayer = Players[firstOrSecondUser];
                    Visualization.ClearConsole();
                    //Mostrar mensaje de inicio
                    Visualization.ShowProgramMessage($"Player {ActivePlayer.Id+1} select Deck and Captain:");
                    //Preguntar por deck
                    Visualization.ShowDecks(this.Decks);
                    userInput = Visualization.GetUserInput(this.Decks.Count - 1);
                    Deck deck = new Deck();
                    deck.Cards        = new List <Card>(Decks[userInput].Cards);
                    ActivePlayer.Deck = deck;
                    //Preguntar por capitan
                    Visualization.ShowCaptains(Captains);
                    userInput = Visualization.GetUserInput(this.Captains.Count - 1);
                    ActivePlayer.ChooseCaptainCard(new SpecialCard(Captains[userInput].Name, Captains[userInput].Type, Captains[userInput].Effect));
                    //Asignar mano
                    ActivePlayer.FirstHand();
                    //Mostrar mano
                    Visualization.ShowHand(ActivePlayer.Hand);
                    //Mostar opciones, cambiar carta o pasar
                    Visualization.ShowListOptions(new List <string>()
                    {
                        "Change Card", "Pass"
                    }, "Change 3 cards or ready to play:");
                    userInput = Visualization.GetUserInput(1);
                    if (userInput == 0)
                    {
                        Visualization.ClearConsole();
                        Visualization.ShowProgramMessage($"Player {ActivePlayer.Id+1} change cards:");
                        Visualization.ShowHand(ActivePlayer.Hand);
                        for (int i = 0; i < DEFAULT_CHANGE_CARDS_NUMBER; i++)
                        {
                            Visualization.ShowProgramMessage($"Input the numbers of the cards to change (max {DEFAULT_CHANGE_CARDS_NUMBER}). To stop enter -1");
                            userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count, true);
                            if (userInput == -1)
                            {
                                break;
                            }
                            ActivePlayer.ChangeCard(userInput);
                            Visualization.ShowHand(ActivePlayer.Hand);
                        }
                    }
                    firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                    Visualization.ClearConsole();
                }
                turn += 1;
            }
            while (CheckIfEndGame() == false)
            {
                int[] lifePoints = new int[2] {
                    players[0].LifePoints, players[1].LifePoints
                };
                int[] attackPoints = new int[2] {
                    players[0].GetAttackPoints()[1], players[1].GetAttackPoints()[1]
                };

                Visualization.ShowBoard(boardGame, firstOrSecondUser, lifePoints, attackPoints);

                Console.WriteLine("\nPress any key to continue");
                Console.ReadKey();
                Visualization.ClearConsole();

                Console.WriteLine($"PLayer [{firstOrSecondUser}], press any key to draw a card");
                Console.ReadKey();

                ActivePlayer.Deck.Shuffle();
                players[firstOrSecondUser].DrawCard(0);
                Visualization.ShowHand(ActivePlayer.Hand);
                Visualization.ShowListOptions(new List <string>()
                {
                    "Play Card", "Pass"
                }, "Make your move player: " + firstOrSecondUser);
                userInput = Visualization.GetUserInput(1);


                int rw = GetRoundWinner();
                if (rw == 0)
                {
                    Console.WriteLine("Its a tie");
                }
                else
                {
                    Console.WriteLine(rw + " wins the round.");
                }
            }

            Visualization.ClearConsole();
            int win = GetWinner();

            if (win == 0)
            {
                Console.WriteLine("Its a tie!");
            }
            else
            {
                Console.WriteLine(win + " wins the round.");
            }
        }
        public void Play()
        {
            int userInput         = 0;
            int firstOrSecondUser = ActivePlayer.Id == 0 ? 0 : 1;
            int winner            = -1;


            while (turn < 4 && !CheckIfEndGame())
            {
                bool drawCard = false;
                //turno 0 o configuracion
                if (turn == 0)
                {
                    activePlayer.CardPlayed += .OnCardPlayed;
                    for (int _ = 0; _ < Players.Length; _++)
                    {
                        ActivePlayer = Players[firstOrSecondUser];
                        Visualization.ClearConsole();
                        //Mostrar mensaje de inicio
                        Visualization.ShowProgramMessage($"Player {ActivePlayer.Id+1} select Deck and Captain:");
                        //Preguntar por deck
                        Visualization.ShowDecks(this.Decks);
                        userInput = Visualization.GetUserInput(this.Decks.Count - 1);
                        Deck deck = new Deck();
                        deck.Cards        = new List <Card>(Decks[userInput].Cards);
                        ActivePlayer.Deck = deck;
                        //Preguntar por capitan
                        Visualization.ShowCaptains(Captains);
                        userInput = Visualization.GetUserInput(this.Captains.Count - 1);
                        ActivePlayer.ChooseCaptainCard(new SpecialCard(Captains[userInput].Name, Captains[userInput].Type, Captains[userInput].CardEffect));
                        //Asignar mano
                        ActivePlayer.FirstHand();
                        //Mostrar mano
                        Visualization.ShowHand(ActivePlayer.Hand);
                        //Mostar opciones, cambiar carta o pasar
                        userInput = -1;
                        int changedCards = 0;
                        while (userInput != 2 && changedCards < DEFAULT_CHANGE_CARDS_NUMBER)
                        {
                            Visualization.ShowListOptions(new List <string>()
                            {
                                "Change Card", "See card", "Pass"
                            }, "Change 3 cards or ready to play:");
                            userInput = Visualization.GetUserInput(2);
                            switch (userInput)
                            {
                            case 0:
                                Visualization.ClearConsole();
                                Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} change cards:");
                                Visualization.ShowHand(ActivePlayer.Hand);
                                Visualization.ShowProgramMessage($"Input the number of the card to change (max {DEFAULT_CHANGE_CARDS_NUMBER}). To stop enter -1");
                                userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count - 1, true);
                                if (userInput == -1)
                                {
                                    continue;
                                }
                                ActivePlayer.ChangeCard(userInput);
                                Visualization.ShowHand(ActivePlayer.Hand);
                                changedCards += 1;
                                userInput     = -1;
                                break;

                            case 1:
                                Visualization.ClearConsole();
                                Visualization.ShowHand(ActivePlayer.Hand);
                                Visualization.ShowProgramMessage($"Input the number of the card to see. To stop enter -1");
                                userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count - 1, true);
                                if (userInput == -1)
                                {
                                    continue;
                                }
                                Visualization.ShowCard(ActivePlayer.Hand.Cards[userInput]);
                                userInput = -1;
                                break;

                            default:
                                break;
                            }
                        }

                        firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                    }
                    turn += 1;
                }
                //turnos siguientes
                else
                {
                    Boolean cycle = true;
                    while (cycle)
                    {
                        ActivePlayer = Players[firstOrSecondUser];
                        //Obtener lifePoints
                        int[] lifePoints = new int[2] {
                            Players[0].LifePoints, Players[1].LifePoints
                        };
                        //Obtener total de ataque:
                        int[] attackPoints = new int[2] {
                            Players[0].GetAttackPoints()[0], Players[1].GetAttackPoints()[0]
                        };
                        //Mostrar tablero, mano y solicitar jugada
                        Visualization.ClearConsole();
                        Visualization.ShowBoard(boardGame, ActivePlayer.Id, lifePoints, attackPoints);
                        //Robar carta
                        if (!drawCard)
                        {
                            ActivePlayer.DrawCard();
                            drawCard = true;
                        }
                        Visualization.ShowHand(ActivePlayer.Hand);
                        Visualization.ShowListOptions(new List <string> {
                            "Play Card", "See card", "Pass"
                        }, $"Make your move player {ActivePlayer.Id+1}:");
                        userInput = Visualization.GetUserInput(2);
                        switch (userInput)
                        {
                        case 0:
                            //Si la carta es un buff solicitar a la fila que va.
                            Visualization.ShowProgramMessage($"Input the number of the card to play. To cancel enter -1");
                            userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count - 1, true);
                            if (userInput != -1)
                            {
                                if (ActivePlayer.Hand.Cards[userInput].Type == EnumType.buff)
                                {
                                    Visualization.ShowListOptions(new List <string> {
                                        "Melee", "Range", "LongRange"
                                    }, $"Choose row to buff {ActivePlayer.Id}:");
                                    int cardId = userInput;
                                    userInput = Visualization.GetUserInput(2);
                                    if (userInput == 0)
                                    {
                                        ActivePlayer.PlayCard(cardId, EnumType.buffmelee);
                                    }
                                    else if (userInput == 1)
                                    {
                                        ActivePlayer.PlayCard(cardId, EnumType.buffrange);
                                    }
                                    else
                                    {
                                        ActivePlayer.PlayCard(cardId, EnumType.bufflongRange);
                                    }
                                }
                                else
                                {
                                    ActivePlayer.PlayCard(userInput);
                                }
                            }
                            //Revisar si le quedan cartas, si no le quedan obligar a pasar.
                            if (ActivePlayer.Hand.Cards.Count == 0)
                            {
                                firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                                break;
                            }
                            break;

                        case 1:
                            Visualization.ClearConsole();
                            Visualization.ShowHand(ActivePlayer.Hand);
                            Visualization.ShowProgramMessage($"Input the number of the card to see. To stop enter -1");
                            userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count - 1, true);
                            if (userInput == -1)
                            {
                                continue;
                            }
                            Visualization.ShowCard(ActivePlayer.Hand.Cards[userInput]);
                            Visualization.ShowListOptions(new List <string> {
                                "Continue"
                            });
                            userInput = Visualization.GetUserInput(0);
                            break;

                        default:
                            firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                            cycle             = false;
                            break;
                        }
                    }
                    //Cambiar al oponente si no ha jugado
                    if (!bothPlayersPlayed)
                    {
                        bothPlayersPlayed = true;
                        drawCard          = false;
                    }
                    //Si ambos jugaron obtener el ganador de la ronda, reiniciar el tablero y pasar de turno.
                    else
                    {
                        winner = GetRoundWinner();
                        if (winner == 0)
                        {
                            Players[1].LifePoints -= 1;
                        }
                        else if (winner == 1)
                        {
                            Players[0].LifePoints -= 1;
                        }
                        else
                        {
                            Players[0].LifePoints -= 1;
                            Players[1].LifePoints -= 1;
                        }
                        bothPlayersPlayed = false;
                        turn += 1;
                        //Destruir Cartas
                        BoardGame.DestroyCards();
                    }
                }
                actualData["decks"]             = Decks;
                actualData["captains"]          = Captains;
                actualData["players"]           = Players;
                actualData["activePlayer"]      = Players[ActivePlayer.Id == 0 ? 1 : 0];
                actualData["board"]             = BoardGame;
                actualData["turn"]              = turn;
                actualData["bothPlayersPlayed"] = bothPlayersPlayed;
                SaveData();
            }
            //Definir cual es el ganador.
            winner = GetWinner();
            if (winner == 0)
            {
                Visualization.ShowProgramMessage($"Player 1 is the winner!");
            }
            else if (winner == 1)
            {
                Visualization.ShowProgramMessage($"Player 2 is the winner!");
            }
            else
            {
                Visualization.ShowProgramMessage($"Draw!");
            }
        }
Exemple #5
0
        public void Play()
        {
            int  userInput         = 0;
            int  firstOrSecondUser = ActivePlayer.Id == 0 ? 0 : 1;
            int  winner            = -1;
            bool bothPlayersPlayed = false;


            while (turn < 4 && !CheckIfEndGame())
            {
                bool drawCard = false;
                //turno 0 o configuracion
                if (turn == 0)
                {
                    for (int _ = 0; _ < Players.Length; _++)
                    {
                        ActivePlayer = Players[firstOrSecondUser];
                        Visualization.ClearConsole();
                        //Mostrar mensaje de inicio
                        Visualization.ShowProgramMessage($"Player {ActivePlayer.Id+1} select Deck and Captain:");
                        //Preguntar por deck
                        Visualization.ShowDecks(this.Decks);
                        userInput = Visualization.GetUserInput(this.Decks.Count - 1);
                        Deck deck = new Deck();
                        deck.Cards        = new List <Card>(Decks[userInput].Cards);
                        ActivePlayer.Deck = deck;
                        // mostrar cartas del mazo

                        List <string> ab1 = deck.GetCharacteristics();
                        // no coloco los console write ya que ya estan en la funcion

                        //Preguntar por capitan
                        Visualization.ShowCaptains(Captains);
                        userInput = Visualization.GetUserInput(this.Captains.Count - 1);
                        ActivePlayer.ChooseCaptainCard(new SpecialCard(Captains[userInput].Name, Captains[userInput].Type, Captains[userInput].Effect));

                        // mostrar info del capi

                        List <string> ab2 = ActivePlayer.Captain.GetCharacteristics();
                        //  no coloco los console write ya que ya estan en la funcion

                        //Asignar mano
                        ActivePlayer.FirstHand();
                        //Mostrar mano
                        Visualization.ShowHand(ActivePlayer.Hand);
                        //Mostar opciones, cambiar carta o pasar
                        Visualization.ShowListOptions(new List <string>()
                        {
                            "Change Card", "Pass"
                        }, "Change 3 cards or ready to play:");
                        userInput = Visualization.GetUserInput(1);
                        if (userInput == 0)
                        {
                            Visualization.ClearConsole();
                            Visualization.ShowProgramMessage($"Player {ActivePlayer.Id+1} change cards:");
                            Visualization.ShowHand(ActivePlayer.Hand);
                            for (int i = 0; i < DEFAULT_CHANGE_CARDS_NUMBER; i++)
                            {
                                Visualization.ShowProgramMessage($"Input the numbers of the cards to change (max {DEFAULT_CHANGE_CARDS_NUMBER}). To stop enter -1");
                                userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count, true);
                                if (userInput == -1)
                                {
                                    break;
                                }
                                ActivePlayer.ChangeCard(userInput);
                                Visualization.ShowHand(ActivePlayer.Hand);
                            }
                        }
                        firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                    }
                    // guardar turno 0
                    SaveData();

                    turn += 1;
                }
                //turnos siguientes
                else
                {
                    while (true)
                    {
                        ActivePlayer = Players[firstOrSecondUser];
                        //Obtener lifePoints
                        int[] lifePoints = new int[2] {
                            Players[0].LifePoints, Players[1].LifePoints
                        };
                        //Obtener total de ataque:
                        int[] attackPoints = new int[2] {
                            Players[0].GetAttackPoints()[0], Players[1].GetAttackPoints()[0]
                        };
                        //Mostrar tablero, mano y solicitar jugada
                        Visualization.ClearConsole();
                        Visualization.ShowBoard(boardGame, ActivePlayer.Id, lifePoints, attackPoints);
                        //Robar carta
                        if (!drawCard)
                        {
                            ActivePlayer.DrawCard();
                            drawCard = true;
                        }
                        Visualization.ShowHand(ActivePlayer.Hand);
                        Visualization.ShowListOptions(new List <string> {
                            "Play Card", "Pass"
                        }, $"Make your move player {ActivePlayer.Id+1}:");
                        userInput = Visualization.GetUserInput(1);
                        if (userInput == 0)
                        {
                            //Si la carta es un buff solicitar a la fila que va.
                            Visualization.ShowProgramMessage($"Input the number of the card to play. To cancel enter -1");
                            userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count, true);
                            if (userInput != -1)
                            {
                                if (ActivePlayer.Hand.Cards[userInput].Type == EnumType.buff)
                                {
                                    Visualization.ShowListOptions(new List <string> {
                                        "Melee", "Range", "LongRange"
                                    }, $"Choose row to buff {ActivePlayer.Id}:");
                                    int cardId = userInput;
                                    userInput = Visualization.GetUserInput(2);
                                    if (userInput == 0)
                                    {
                                        ActivePlayer.PlayCard(cardId, EnumType.buffmelee);
                                    }
                                    else if (userInput == 1)
                                    {
                                        ActivePlayer.PlayCard(cardId, EnumType.buffrange);
                                    }
                                    else
                                    {
                                        ActivePlayer.PlayCard(cardId, EnumType.bufflongRange);
                                    }
                                }
                                else
                                {
                                    ActivePlayer.PlayCard(userInput);
                                }
                            }
                            //Revisar si le quedan cartas, si no le quedan obligar a pasar.
                            if (ActivePlayer.Hand.Cards.Count == 0)
                            {
                                firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                                // guardar antes de pasar
                                SaveData();
                                break;
                            }
                        }
                        else
                        {
                            firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                            // guardar antes de pasar
                            SaveData();

                            break;
                        }
                    }
                    //Cambiar al oponente si no ha jugado
                    if (!bothPlayersPlayed)
                    {
                        bothPlayersPlayed = true;
                        drawCard          = false;
                    }
                    //Si ambos jugaron obtener el ganador de la ronda, reiniciar el tablero y pasar de turno.
                    else
                    {
                        winner = GetRoundWinner();
                        if (winner == 0)
                        {
                            Players[1].LifePoints -= 1;
                        }
                        else if (winner == 1)
                        {
                            Players[0].LifePoints -= 1;
                        }
                        else
                        {
                            Players[0].LifePoints -= 1;
                            Players[1].LifePoints -= 1;
                        }
                        bothPlayersPlayed = false;
                        turn += 1;
                        //Destruir Cartas
                        BoardGame.DestroyCards();
                    }
                }
            }
            //Definir cual es el ganador.
            winner = GetWinner();
            if (winner == 0)
            {
                Visualization.ShowProgramMessage($"Player 1 is the winner!");
            }
            else if (winner == 1)
            {
                Visualization.ShowProgramMessage($"Player 2 is the winner!");
            }
            else
            {
                Visualization.ShowProgramMessage($"Draw!");
            }
        }
        public void Play()
        {
            int  userInput         = 0;
            int  firstOrSecondUser = ActivePlayer.Id == 0 ? 0 : 1;
            int  winner            = -1;
            bool bothPlayersPlayed = false;
            int  contadorDeCambios = 0;


            while (turn < 4 && !CheckIfEndGame())
            {
                bool verificar = Visualization.ShowMenuCarga();
                if (verificar == false)
                {
                    bool drawCard = false;
                    //turno 0 o configuracion
                    if (turn == 0)
                    {
                        for (int _ = 0; _ < Players.Length; _++)
                        {
                            ActivePlayer = Players[firstOrSecondUser];
                            Visualization.ClearConsole();
                            //Mostrar mensaje de inicio
                            Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} select Deck and Captain:");
                            //Preguntar por deck
                            Visualization.ShowDecks(this.Decks);
                            userInput = Visualization.GetUserInput(this.Decks.Count - 1);
                            Deck deck = new Deck();
                            deck.Cards        = new List <Card>(Decks[userInput].Cards);
                            ActivePlayer.Deck = deck;
                            //Preguntar por capitan
                            Visualization.ShowCaptains(Captains);
                            userInput = Visualization.GetUserInput(this.Captains.Count - 1);
                            ActivePlayer.ChooseCaptainCard(new SpecialCard(Captains[userInput].Name, Captains[userInput].Type, Captains[userInput].Effect));
                            //Asignar mano
                            ActivePlayer.FirstHand();
                            //Mostrar mano
                            Visualization.ShowHand(ActivePlayer.Hand);
                            //Mostar opciones, cambiar carta o pasar
                            Visualization.ShowListOptions(new List <string>()
                            {
                                "Change Card", "Pass"
                            }, "Change 3 cards or ready to play:");
                            userInput = Visualization.GetUserInput(1);
                            if (userInput == 0)
                            {
                                if (contadorDeCambios < 3)
                                {
                                    Visualization.ClearConsole();
                                    Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} change cards:");
                                    Visualization.ShowHand(ActivePlayer.Hand);
                                    for (int i = 0; i < DEFAULT_CHANGE_CARDS_NUMBER; i++)
                                    {
                                        Visualization.ShowProgramMessage($"Input the numbers of the cards to change (max {DEFAULT_CHANGE_CARDS_NUMBER}). To stop enter -1");
                                        userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count, true);
                                        if (userInput == -1)
                                        {
                                            break;
                                        }
                                        ActivePlayer.ChangeCard(userInput);
                                        Visualization.ShowHand(ActivePlayer.Hand);
                                    }
                                }
                                else
                                {
                                    Visualization.ShowProgramMessage("Ya no puedes hacer mas cambios");
                                    Visualization.ShowProgramMessage("Presiona una tecla para continuar");
                                    Console.ReadKey();
                                    Visualization.ClearConsole();
                                }
                            }
                            else if (userInput == 1)
                            {
                                Visualization.ClearConsole();
                                Visualization.ShowHand(activePlayer.Hand);
                                Visualization.ShowProgramMessage("Ingrese el id de la carta para ver la informacion de esta");
                                userInput = Visualization.GetUserInput(activePlayer.Hand.Cards.Count, true);
                                if (userInput != -1)
                                {
                                    if (activePlayer.Hand.Cards[userInput] is CombatCard)
                                    {
                                        CombatCard    card       = activePlayer.Hand.Cards[userInput] as CombatCard;
                                        List <string> componente = new List <string>()
                                        {
                                            "Name: ", "Type: ", "Effect: ", "Attack Points: ", "Hero: "
                                        };
                                        int i = 0;
                                        foreach (string com in componente)
                                        {
                                            Visualization.ShowProgramMessage(com + card.GetCharacteristics()[i]);
                                            i++;
                                        }
                                    }
                                    else
                                    {
                                        SpecialCard   card       = activePlayer.Hand.Cards[userInput] as SpecialCard;
                                        List <string> componente = new List <string>()
                                        {
                                            "Name: ", "Type: ", "Effect: ", "Buff: "
                                        };
                                        int i = 0;
                                        foreach (string co in componente)
                                        {
                                            Visualization.ShowProgramMessage(co + card.GetCharacteristics()[i]);
                                            i++;
                                        }
                                    }
                                }
                            }
                            else if (userInput == 2)
                            {
                                firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                            }
                            contadorDeCambios = 0;
                        }
                        turn += 1;
                        Save();
                    }


                    //turnos siguientes
                    else
                    {
                        while (true)
                        {
                            ActivePlayer = Players[firstOrSecondUser];
                            //Obtener lifePoints
                            int[] lifePoints = new int[2] {
                                Players[0].LifePoints, Players[1].LifePoints
                            };
                            //Obtener total de ataque:
                            int[] attackPoints = new int[2] {
                                Players[0].GetAttackPoints()[0], Players[1].GetAttackPoints()[0]
                            };
                            //Mostrar tablero, mano y solicitar jugada
                            Visualization.ClearConsole();
                            Visualization.ShowBoard(boardGame, ActivePlayer.Id, lifePoints, attackPoints);
                            //Robar carta
                            if (!drawCard)
                            {
                                ActivePlayer.DrawCard();
                                drawCard = true;
                            }
                            Visualization.ShowHand(ActivePlayer.Hand);
                            Visualization.ShowListOptions(new List <string> {
                                "Play Card", "Pass"
                            }, $"Make your move player {ActivePlayer.Id + 1}:");
                            userInput = Visualization.GetUserInput(1);
                            if (userInput == 0)
                            {
                                //Si la carta es un buff solicitar a la fila que va.
                                Visualization.ShowProgramMessage($"Input the number of the card to play. To cancel enter -1");
                                userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count, true);
                                if (userInput != -1)
                                {
                                    if (ActivePlayer.Hand.Cards[userInput].Type == EnumType.buff)
                                    {
                                        Visualization.ShowListOptions(new List <string> {
                                            "Melee", "Range", "LongRange"
                                        }, $"Choose row to buff {ActivePlayer.Id}:");
                                        int cardId = userInput;
                                        userInput = Visualization.GetUserInput(2);
                                        if (userInput == 0)
                                        {
                                            ActivePlayer.PlayCard(cardId, EnumType.buffmelee);
                                        }
                                        else if (userInput == 1)
                                        {
                                            ActivePlayer.PlayCard(cardId, EnumType.buffrange);
                                        }
                                        else
                                        {
                                            ActivePlayer.PlayCard(cardId, EnumType.bufflongRange);
                                        }
                                    }
                                    else
                                    {
                                        ActivePlayer.PlayCard(userInput);
                                    }
                                }
                                //Revisar si le quedan cartas, si no le quedan obligar a pasar.
                                if (ActivePlayer.Hand.Cards.Count == 0)
                                {
                                    firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                                    Save();
                                    break;
                                }
                            }
                            else if (userInput == 1)
                            {
                                Visualization.ClearConsole();
                                Visualization.ShowHand(activePlayer.Hand);
                                Visualization.ShowProgramMessage("Ingrese el id de la carta para ver la informacion de esta");
                                userInput = Visualization.GetUserInput(activePlayer.Hand.Cards.Count, true);
                                if (userInput != -1)
                                {
                                    if (activePlayer.Hand.Cards[userInput] is CombatCard)
                                    {
                                        CombatCard    card       = activePlayer.Hand.Cards[userInput] as CombatCard;
                                        List <string> componente = new List <string>()
                                        {
                                            "Name: ", "Type: ", "Effect: ", "Attack Points: ", "Hero: "
                                        };
                                        int i = 0;
                                        foreach (string com in componente)
                                        {
                                            Visualization.ShowProgramMessage(com + card.GetCharacteristics()[i]);
                                            i++;
                                        }
                                    }
                                    else
                                    {
                                        SpecialCard   card       = activePlayer.Hand.Cards[userInput] as SpecialCard;
                                        List <string> componente = new List <string>()
                                        {
                                            "Name: ", "Type: ", "Effect: ", "Buff: "
                                        };
                                        int i = 0;
                                        foreach (string co in componente)
                                        {
                                            Visualization.ShowProgramMessage(co + card.GetCharacteristics()[i]);
                                            i++;
                                        }
                                    }
                                }
                            }
                            else if (userInput == 2)
                            {
                                firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                                Save();
                                break;
                            }
                        }
                    }
                    //Cambiar al oponente si no ha jugado
                    if (!bothPlayersPlayed)
                    {
                        bothPlayersPlayed = true;
                        drawCard          = false;
                    }
                    //Si ambos jugaron obtener el ganador de la ronda, reiniciar el tablero y pasar de turno.
                    else
                    {
                        winner = GetRoundWinner();
                        if (winner == 0)
                        {
                            Players[1].LifePoints -= 1;
                        }
                        else if (winner == 1)
                        {
                            Players[0].LifePoints -= 1;
                        }
                        else
                        {
                            Players[0].LifePoints -= 1;
                            Players[1].LifePoints -= 1;
                        }
                        bothPlayersPlayed = false;
                        turn += 1;
                        //Destruir Cartas
                        BoardGame.DestroyCards();
                    }
                }
            }
            //Definir cual es el ganador.
            winner = GetWinner();
            if (winner == 0)
            {
                Visualization.ShowProgramMessage($"Player 1 is the winner!");
            }
            else if (winner == 1)
            {
                Visualization.ShowProgramMessage($"Player 2 is the winner!");
            }
            else
            {
                Visualization.ShowProgramMessage($"Draw!");
            }
            Save();
        }
Exemple #7
0
        public void Play()
        {
            int  userInput         = 0;
            int  useInputB         = 0;
            int  firstOrSecondUser = ActivePlayer.Id == 0 ? 0 : 1;
            bool GameSwitch        = false;

            //int count1=  0;//
            //int count2 = 0;//

            /*IAttackPoints playa1 = players[0];
             * IAttackPoints playa2 = players[1];
             * LifeP[0] = players[0].LifePoints;
             * LifeP[1] = players[1].LifePoints;
             * for(int m = 0; m < playa1.GetAttackPoints(EnumType.None).Length; m++)
             * {
             *  count1 += playa1.GetAttackPoints(EnumType.None)[m];
             * }
             * for (int n = 0; n < playa2.GetAttackPoints(EnumType.None).Length; n++)
             * {
             *  count2 += playa2.GetAttackPoints(EnumType.None)[n];
             * }
             * AttackP[0] = playa1.GetAttackPoints(EnumType.None)[0];
             * AttackP[1] = playa2.GetAttackPoints(EnumType.None)[0];*/



            //turno 0 o configuracion
            if (turn == 0)
            {
                for (int _ = 0; _ < Players.Length; _++)
                {
                    ActivePlayer = Players[firstOrSecondUser];
                    Visualization.ClearConsole();
                    //Mostrar mensaje de inicio
                    Visualization.ShowProgramMessage($"Player {ActivePlayer.Id+1} select Deck and Captain:");
                    //Preguntar por deck
                    Visualization.ShowDecks(this.Decks);
                    userInput = Visualization.GetUserInput(this.Decks.Count - 1);
                    Deck deck = new Deck();
                    deck.Cards        = new List <Card>(Decks[userInput].Cards);
                    ActivePlayer.Deck = deck;
                    //Preguntar por capitan
                    Visualization.ShowCaptains(Captains);
                    userInput = Visualization.GetUserInput(this.Captains.Count - 1);
                    ActivePlayer.ChooseCaptainCard(new SpecialCard(Captains[userInput].Name, Captains[userInput].Type, Captains[userInput].Effect));
                    //Asignar mano
                    ActivePlayer.FirstHand();
                    //Mostrar mano
                    Visualization.ShowHand(ActivePlayer.Hand);
                    //Mostar opciones, cambiar carta o pasar
                    Visualization.ShowListOptions(new List <string>()
                    {
                        "Change Card", "Pass"
                    }, "Change 3 cards or ready to play:");
                    userInput = Visualization.GetUserInput(1);
                    if (userInput == 0)
                    {
                        Visualization.ClearConsole();
                        Visualization.ShowProgramMessage($"Player {ActivePlayer.Id+1} change cards:");
                        Visualization.ShowHand(ActivePlayer.Hand);
                        for (int i = 0; i < DEFAULT_CHANGE_CARDS_NUMBER; i++)
                        {
                            Visualization.ShowProgramMessage($"Input the numbers of the cards to change (max {DEFAULT_CHANGE_CARDS_NUMBER}). To stop enter -1");
                            userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count, true);
                            if (userInput == -1)
                            {
                                break;
                            }
                            ActivePlayer.ChangeCard(userInput);
                            Visualization.ShowHand(ActivePlayer.Hand);
                        }
                    }
                    firstOrSecondUser = ActivePlayer.Id == 0 ? 1 : 0;
                }
                turn += 1;
            }

            IAttackPoints playa1 = players[0];
            IAttackPoints playa2 = players[1];

            LifeP[0] = players[0].LifePoints;
            LifeP[1] = players[1].LifePoints;

            /*for(int y = 0; y < players[0].Hand.Cards.Count; y++)
             * {
             *  if (players[0].Hand.Cards[y] is CombatCard)
             *  {
             *      BoardGame.AddCard(players[0].Hand.Cards[y], 0, players[0].Hand.Cards[y].Type);
             *  }
             * }
             *
             * for (int w = 0; w < players[1].Hand.Cards.Count; w++)
             * {
             *  if (players[1].Hand.Cards[w] is CombatCard)
             *  {
             *      BoardGame.AddCard(players[1].Hand.Cards[w], 1, players[1].Hand.Cards[w].Type);
             *  }
             *
             * }*/



            while (GameSwitch != true)
            {
                if (ActivePlayer.Id == 0)
                {
                    Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                    Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} will draw a card");
                    ActivePlayer.DrawCard();
                    Visualization.ShowHand(ActivePlayer.Hand);
                    Visualization.ShowListOptions(new List <string>()
                    {
                        "Play Card", "Pass"
                    });
                    userInput = Visualization.GetUserInput(1);
                    if (userInput == 0)
                    {
                        Visualization.ClearConsole();
                        Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                        Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} play cards:");
                        Visualization.ShowHand(ActivePlayer.Hand);
                        Visualization.ShowProgramMessage($"Input the number of the cards you'd like to  play (max {ActivePlayer.Hand.Cards.Count}). To stop enter -1");
                        userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count);

                        Visualization.ClearConsole();
                        if (ActivePlayer.Hand.Cards[userInput].Type == EnumType.buff)
                        {
                            Visualization.ShowProgramMessage("Please Select which type you'd like to buff:");
                            Visualization.ShowProgramMessage("(0): LongRange (1): Range (2): Melee");
                            useInputB = Visualization.GetUserInput(2);

                            switch (useInputB)
                            {
                            case 0:
                                ActivePlayer.PlayCard(userInput, EnumType.bufflongRange);
                                break;

                            case 1:
                                ActivePlayer.PlayCard(userInput, EnumType.buffrange);
                                break;

                            case 2:
                                ActivePlayer.PlayCard(userInput, EnumType.buffmelee);
                                break;
                            }
                        }
                        else
                        {
                            ActivePlayer.PlayCard(userInput, ActivePlayer.Hand.Cards[userInput].Type);
                        }

                        AttackP[ActivePlayer.Id] = playa1.GetAttackPoints(EnumType.None)[0];
                        //Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} has played{ActivePlayer.Hand.Cards[userInput].Name} ");//
                        Visualization.ShowHand(ActivePlayer.Hand);
                        Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                    }
                    Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} Turn has ended please press anykey to continue to the next player turn");
                    Console.ReadKey();
                    Visualization.ClearConsole();
                    ActivePlayer.Id += 1;
                    Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                    Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} will draw a card");
                    ActivePlayer.DrawCard();
                    Visualization.ShowHand(ActivePlayer.Hand);
                    Visualization.ShowListOptions(new List <string>()
                    {
                        "Play Card", "Pass"
                    });
                    userInput = Visualization.GetUserInput(1);
                    if (userInput == 0)
                    {
                        Visualization.ClearConsole();
                        Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                        Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} play cards:");
                        Visualization.ShowHand(ActivePlayer.Hand);
                        Visualization.ShowProgramMessage($"Input the number of the cards you'd like to  play (max {ActivePlayer.Hand.Cards.Count}). To stop enter -1");
                        userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count);

                        Visualization.ClearConsole();
                        if (ActivePlayer.Hand.Cards[userInput].Type == EnumType.buff)
                        {
                            Visualization.ShowProgramMessage("Please Select which type you'd like to buff:");
                            Visualization.ShowProgramMessage("(0): LongRange (1): Range (2): Melee");
                            useInputB = Visualization.GetUserInput(2);

                            switch (useInputB)
                            {
                            case 0:
                                ActivePlayer.PlayCard(userInput, EnumType.bufflongRange);
                                break;

                            case 1:
                                ActivePlayer.PlayCard(userInput, EnumType.buffrange);
                                break;

                            case 2:
                                ActivePlayer.PlayCard(userInput, EnumType.buffmelee);
                                break;
                            }
                        }
                        else
                        {
                            ActivePlayer.PlayCard(userInput, ActivePlayer.Hand.Cards[userInput].Type);
                        }
                        AttackP[ActivePlayer.Id] = playa2.GetAttackPoints(EnumType.None)[0];
                        //Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} has played{ActivePlayer.Hand.Cards[userInput].Name} ");//
                        Visualization.ShowHand(ActivePlayer.Hand);
                        Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                    }
                    Visualization.ClearConsole();
                    Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                    if (AttackP[0] < AttackP[1])
                    {
                        Visualization.ShowProgramMessage("Player 2 has won this round, Player 1 has lost one lifepoint  ");
                        LifeP[0] -= 1;
                        players[0].LifePoints -= 1;
                    }
                    if (AttackP[1] < AttackP[0])
                    {
                        Visualization.ShowProgramMessage("Player 1 has won this round, Player 2 has lost one lifepoint  ");
                        LifeP[1] -= 1;
                        players[1].LifePoints -= 1;
                    }
                    if (AttackP[0] == AttackP[1])
                    {
                        Visualization.ShowProgramMessage("Player 2 has tied this round with Player 1,  both Players  have lost one lifepoint  ");
                        LifeP[0] -= 1;
                        LifeP[1] -= 1;
                        players[0].LifePoints -= 1;
                        players[1].LifePoints -= 1;
                    }
                    GameSwitch = this.CheckIfEndGame();
                }
                else
                {
                    Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                    Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} will draw a card");
                    ActivePlayer.DrawCard();
                    Visualization.ShowHand(ActivePlayer.Hand);
                    Visualization.ShowListOptions(new List <string>()
                    {
                        "Play Card", "Pass"
                    });
                    userInput = Visualization.GetUserInput(1);
                    if (userInput == 0)
                    {
                        Visualization.ClearConsole();
                        Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                        Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} play cards:");
                        Visualization.ShowHand(ActivePlayer.Hand);
                        Visualization.ShowProgramMessage($"Input the number of the cards you'd like to  play (max {ActivePlayer.Hand.Cards.Count}). To stop enter -1");
                        userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count);

                        Visualization.ClearConsole();
                        if (ActivePlayer.Hand.Cards[userInput].Type == EnumType.buff)
                        {
                            Visualization.ShowProgramMessage("Please Select which type you'd like to buff:");
                            Visualization.ShowProgramMessage("(0): LongRange (1): Range (2): Melee");
                            useInputB = Visualization.GetUserInput(2);

                            switch (useInputB)
                            {
                            case 0:
                                ActivePlayer.PlayCard(userInput, EnumType.bufflongRange);
                                break;

                            case 1:
                                ActivePlayer.PlayCard(userInput, EnumType.buffrange);
                                break;

                            case 2:
                                ActivePlayer.PlayCard(userInput, EnumType.buffmelee);
                                break;
                            }
                        }
                        else
                        {
                            ActivePlayer.PlayCard(userInput, ActivePlayer.Hand.Cards[userInput].Type);
                        }
                        AttackP[ActivePlayer.Id] = playa2.GetAttackPoints(EnumType.None)[0];
                        //Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} has played{ActivePlayer.Hand.Cards[userInput].Name} ");//
                        Visualization.ShowHand(ActivePlayer.Hand);
                        Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                    }
                    Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} Turn has ended please press anykey to continue to the next player turn");
                    Console.ReadKey();
                    Visualization.ClearConsole();
                    ActivePlayer.Id -= 1;
                    Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                    Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} will draw a card");
                    ActivePlayer.DrawCard();
                    Visualization.ShowHand(ActivePlayer.Hand);
                    Visualization.ShowListOptions(new List <string>()
                    {
                        "Play Card", "Pass"
                    });
                    userInput = Visualization.GetUserInput(1);
                    if (userInput == 0)
                    {
                        Visualization.ClearConsole();
                        Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                        Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} play cards:");
                        Visualization.ShowHand(ActivePlayer.Hand);
                        Visualization.ShowProgramMessage($"Input the number of the cards you'd like to  play (max {ActivePlayer.Hand.Cards.Count}). To stop enter -1");
                        userInput = Visualization.GetUserInput(ActivePlayer.Hand.Cards.Count);

                        Visualization.ClearConsole();

                        if (ActivePlayer.Hand.Cards[userInput].Type == EnumType.buff)
                        {
                            Visualization.ShowProgramMessage("Please Select which type you'd like to buff:");
                            Visualization.ShowProgramMessage("(0): LongRange (1): Range (2): Melee");
                            useInputB = Visualization.GetUserInput(2);

                            switch (useInputB)
                            {
                            case 0:
                                ActivePlayer.PlayCard(userInput, EnumType.bufflongRange);
                                break;

                            case 1:
                                ActivePlayer.PlayCard(userInput, EnumType.buffrange);
                                break;

                            case 2:
                                ActivePlayer.PlayCard(userInput, EnumType.buffmelee);
                                break;
                            }
                        }
                        else
                        {
                            ActivePlayer.PlayCard(userInput, ActivePlayer.Hand.Cards[userInput].Type);
                        }
                        AttackP[ActivePlayer.Id] = playa1.GetAttackPoints(EnumType.None)[0];
                        //Visualization.ShowProgramMessage($"Player {ActivePlayer.Id + 1} has played{ActivePlayer.Hand.Cards[userInput].Name} ");//

                        Visualization.ShowHand(ActivePlayer.Hand);
                        Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                    }
                    Visualization.ClearConsole();
                    Visualization.ShowBoard(BoardGame, ActivePlayer.Id, LifeP, AttackP);
                    if (AttackP[0] < AttackP[1])
                    {
                        Visualization.ShowProgramMessage("Player 2 has won this round, Player 1 has lost one lifepoint  ");
                        LifeP[0] -= 1;
                        players[0].LifePoints -= 1;
                    }
                    if (AttackP[1] < AttackP[0])
                    {
                        Visualization.ShowProgramMessage("Player 1 has won this round, Player 2 has lost one lifepoint  ");
                        LifeP[1] -= 1;
                        players[1].LifePoints -= 1;
                    }
                    if (AttackP[0] == AttackP[1])
                    {
                        Visualization.ShowProgramMessage("Player 2 has tied this round with Player 1,  both Players  have lost one lifepoint  ");
                        LifeP[0] -= 1;
                        LifeP[1] -= 1;
                        players[0].LifePoints -= 1;
                        players[1].LifePoints -= 1;
                    }
                    GameSwitch = this.CheckIfEndGame();
                }
            }



            int gk = this.GetWinner();

            switch (gk)
            {
            case 0:
                Visualization.ShowProgramMessage("Player 1 has won this game");
                break;

            case 1:
                Visualization.ShowProgramMessage("Player 2 has won this game");
                break;

            case -1:
                Visualization.ShowProgramMessage("the game was tied");
                break;
            }
            Console.ReadKey();
        }