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