Пример #1
0
        static SixNimmtGameState CreateNewGame(Random random, double[] scores, bool proMode)
        {
            SixNimmtDeck      deck  = SixNimmtDeck.Create(random);
            SixNimmtGameState state = SixNimmtGameState.Create(random, deck, PlayerCount, proMode);

            if (scores != null)
            {
                state.SetInitialScores(scores);
            }

            for (int player = 0; player < PlayerCount; player++)
            {
                for (int i = 0; i < 10; i++)
                {
                    state.DealCard(player, deck.DealCard());
                }
            }

            state.SetCurrentPlayer(0);

            // Give each row a starting card
            for (int i = 0; i < SixNimmtGameState.BoardRowCount; i++)
            {
                state.AddStartingCard(i, deck.DealCard());
            }

            return(state);
        }
Пример #2
0
        static SixNimmtGameState CreateNewGame(Random random, double[] scores, bool proMode)
        {
            SixNimmtDeck      deck  = SixNimmtDeck.Create(random);
            SixNimmtGameState state = SixNimmtGameState.Create(random, deck, PlayerCount, proMode);

            if (scores != null)
            {
                state.SetInitialScores(scores);
            }

            // Get pov player's hand
            while (true)
            {
                Console.WriteLine("Enter hand (ie, '1 3 43 104')");
                string   handInput  = Console.ReadLine();
                string[] handInputs = handInput.Split(" ");
                if (handInputs.Length != 10)
                {
                    Console.WriteLine($"Enter 10 cards. I counted {handInputs.Length}");
                    continue;
                }

                for (int i = 0; i < handInputs.Length; i++)
                {
                    state.DealCard(0, int.Parse(handInputs[i]));
                }
                break;
            }

            state.SetCurrentPlayer(0);

            while (true)
            {
                Console.WriteLine("Enter starting row cards top to bottom (ie, '43 32 45 98')");
                string   rowsInput  = Console.ReadLine();
                string[] rowsInputs = rowsInput.Split(" ");
                if (rowsInputs.Length != SixNimmtGameState.BoardRowCount)
                {
                    Console.WriteLine($"Enter {SixNimmtGameState.BoardRowCount} cards. I counted {rowsInputs.Length}");
                    continue;
                }

                for (int i = 0; i < SixNimmtGameState.BoardRowCount; i++)
                {
                    state.AddStartingCard(i, int.Parse(rowsInputs[i]));
                }
                break;
            }

            return(state);
        }
Пример #3
0
        // Human player input
        public int FindPlay(IGameState <int> iGameState)
        {
            SixNimmtGameState gameState = iGameState as SixNimmtGameState;

            while (true)
            {
                Console.WriteLine(gameState.ToString());
                List <int> playsList = new List <int>(gameState.GetPlays());
                playsList.Sort();
                string plays = string.Join(", ", playsList.ToArray());
                if (gameState.PlayInputState == SixNimmtInputState.SelectCard)
                {
                    // string cards = string.Join(", ", gameState.PlayerCards[gameState.CurrentPlayerTurn].ToArray());
                    Console.WriteLine($"[{playerName}] Enter a play. Cards: {plays}");
                }
                else
                {
                    // string plays = string.Join(", ", gameState.GetPlays().ToArray());
                    Console.WriteLine($"[{playerName}] Choose a row to take: {plays}");
                }

                string playInput = Console.ReadLine();
                if (string.IsNullOrEmpty(playInput))
                {
                    Console.WriteLine($"[{playerName}] Invalid play. Try again.");
                    continue;
                }

                if (!int.TryParse(playInput, out int attemptedPlay))
                {
                    Console.WriteLine($"[{playerName}] Invalid play. Input must be a number.");
                    continue;
                }

                if (!gameState.GetPlays().Contains(attemptedPlay))
                {
                    Console.WriteLine($"[{playerName}] Chosen play '{attemptedPlay}' is not valid.");
                    continue;
                }
                return(attemptedPlay);
            }
        }
Пример #4
0
        public IGameState <int> Clone()
        {
            SixNimmtGameState clonedState = new SixNimmtGameState();

            clonedState._sharedState       = _sharedState;
            clonedState.CurrentPlayerTurn  = CurrentPlayerTurn;
            clonedState._pointOfViewPlayer = _pointOfViewPlayer;
            clonedState._board             = _board.Select(s => s.ToArray()).ToArray();
            clonedState._boardRowCounts    = _boardRowCounts.ToArray();
            clonedState._scores            = new int[PlayerCount];
            Array.Copy(_scores, clonedState._scores, _scores.Length);
            clonedState.PlayerCards = new List <int> [PlayerCount];
            for (int i = 0; i < PlayerCount; i++)
            {
                clonedState.PlayerCards[i] = new List <int>(PlayerCards[i]);
            }
            clonedState.PlayInputState                    = PlayInputState;
            clonedState._currentRoundCards                = new List <int>(_currentRoundCards);
            clonedState._remainingCards                   = new HashSet <int>(_remainingCards);
            clonedState._remainingPlayoutCards            = new HashSet <int>(_remainingPlayoutCards);
            clonedState._currentRoundCardsProcessingIndex = _currentRoundCardsProcessingIndex;
            clonedState.CardToPlayerDictionary            = new Dictionary <int, int>(CardToPlayerDictionary);
            return(clonedState);
        }