public void DoGame(GameBoard.Player player, Func <GameBoard, GameBoard.Player, GameHistory.GameMove> player1Move, Func <GameBoard, GameBoard.Player, GameHistory.GameMove> player2Move) { currentBoard = GameBoard.StartGame; ConsoleWriteLine("Start New Game"); currentBoard.DisplayBoard(); while (!currentBoard.Winner(player) && !currentBoard.IsTie()) { //reverse player player = (player == GameBoard.Player.O) ? GameBoard.Player.X : GameBoard.Player.O; GameHistory.GameMove move = player1Move(currentBoard, player); ConsoleWriteLine(String.Format("The First player places {0}.", move)); gameHistory.MakeMove(currentBoard, move); currentBoard.DoMove(move); currentBoard.DisplayBoard(); if (currentBoard.Winner(player)) { break; } player = (player == GameBoard.Player.O) ? GameBoard.Player.X : GameBoard.Player.O; //query game stats to get next move move = player2Move(currentBoard, player); ConsoleWriteLine(String.Format("The Second player places {0}.", move)); //register move in game hidtory gameHistory.MakeMove(currentBoard, move); //update current board currentBoard.DoMove(move); currentBoard.DisplayBoard(); } //by default all games start with X. Game win is relative to player X gameHistory.RegisterGameResults(currentBoard.Winner(GameBoard.Player.X)); }
private GameHistory.GameMove GetRandomComputerMove(GameBoard board, GameBoard.Player player) { //return gameHistory.MoveTree.GetMove(board, player, best); int move = currentBoard.RandomMove(); return(new GameHistory.GameMove(MoveFromPlayer(player), move)); }
//Return Game Winner or if tie return Player.None public GameBoard.Player PlayGame() { //play starts with X so set player to O to force first move to X GameBoard.Player player = GameBoard.Player.O; try { DoGame(player, GetHumanPlayerMove, GetComputerPlayerMove); } catch (QuitGameException q) { ConsoleWriteLine(q.Message); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; ConsoleWriteLine("Error in game" + ex.Message); Console.ForegroundColor = ConsoleColor.White; } //return winner if (currentBoard.IsTie()) { player = GameBoard.Player.None; } return(player); }
internal static GameBoard.Player Other(this GameBoard.Player pl) { if (pl == GameBoard.Player.Circle) { return(GameBoard.Player.Cross); } return(GameBoard.Player.Circle); }
private void checkForBuzzes_Tick(object sender, EventArgs e) { if (GameBoard.buzzes != null && GameBoard.buzzes.buzzes != null && GameBoard.buzzes != lastList && GameBoard.buzzes.buzzes.Length > 0) { listOfBuzzes.Items.Clear(); double timestampOne = double.Parse(GameBoard.buzzes.buzzes[0].timestamp); foreach (GameBoard.Buzz b in GameBoard.buzzes.buzzes) { listOfBuzzes.Items.Add(Board.IDtoName(int.Parse(b.playerID)) + " - " + (int)(double.Parse(b.timestamp) - timestampOne)); } lastList = GameBoard.buzzes; } try { List <GameBoard.Player> players = GameBoard.gamePlayers; foreach (GameBoard.Player player in players) { if (player.Admitted == 0 && !toBeAdmitted.Contains(player)) { if (!checkBox1.Checked) { player.Admitted = 1; } else { toBeAdmitted.Add(player); } } } } catch { return; } if (!playerDisplayed && toBeAdmitted.Count > 0) { noPlayersMsg.Visible = false; nameBox.Visible = true; admit.Visible = true; deny.Visible = true; nameBox.Text = toBeAdmitted[0].Name; currentPlayer = toBeAdmitted[0]; playerDisplayed = true; } else if (toBeAdmitted.Count == 0) { noPlayersMsg.Visible = true; nameBox.Visible = false; admit.Visible = false; deny.Visible = false; } }
//Functor to get a move for a human player public GameHistory.GameMove GetHumanPlayerMove(GameBoard brd, GameBoard.Player player) { GameHistory.GameMove move; string prompt; while (!GetNextMove(player, out move, out prompt)) { ConsoleWriteLine(prompt); } return(move); }
public void Start(GameBoard.Player id1, GameBoard.Player id2) { // CLEAR PREVIOUS STATE EndStatus = null; Current = null; WinningPositions = Array.Empty <Position>(); // START NEW ONE p1 = new WebPlayer(id1); p2 = new WebPlayer(id2); game = GameFactory.Create1v1Game(p1, p2, this); game.Start(); }
private IPlayer this[GameBoard.Player player] { get { if (p1.Id == player) { return(p1); } if (p2.Id == player) { return(p2); } throw new InvalidOperationException($"There is no player with Id {player}"); } }
public void TrainingGame(int i) { GameBoard.Player player = GameBoard.Player.O; try { DoGame(player, GetComputerPlayerMove, GetComputerPlayerMove); if (i % 50 == 0) { gameHistory.viewStatistics(); } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; ConsoleWriteLine("Error in game" + ex.Message); Console.ForegroundColor = ConsoleColor.White; } }
//Functor to get a move for the computer player public GameHistory.GameMove GetComputerPlayerMove(GameBoard brd, GameBoard.Player player) { GameHistory.GameMove mv; int tries = 0; do { tries++; var dbl = GameBoard.rng.NextDouble(); if (dbl > threshold) { mv = gameHistory.MoveTree.GetMove(brd, player, best); } else { threshold *= 1.001; mv = GetRandomComputerMove(brd, player); } } while (!brd.ValidMove(mv) && tries < 20); return(mv); }
public GameMove GetMove(GameBoard board, GameBoard.Player player, bool best) { //Get stored moves for this board position with their associated worthiness values var moves = tree.ContainsKey(board.Key) ? tree[board.Key] : new Dictionary <int, Tuple <GameMove, MoveStats> >(); var possibleMoves = moves.Select(kvp => Tuple.Create(kvp.Key, kvp.Value.Item1, kvp.Value.Item2.Worth())).OrderByDescending(pr => pr.Item3); if (possibleMoves.Count() == 0) { return(GameMove.Random(board, Game.MoveFromPlayer(player))); } if (best) { //Get Best Move return(possibleMoves.First().Item2); } else { // get nth move in order of decreasing worth int pos = rng.Next(possibleMoves.Count()); return(possibleMoves.ElementAt(pos).Item2); } //return GameMove.Random(board, Game.MoveFromPlayer(player)); }
public TestPlayer(GameBoard.Player playerId) : base(playerId) { }
public PlayerMovedEventArgs(GameBoard.Player player) { Player = player; }
public bool GetNextMove(GameBoard.Player player, out GameHistory.GameMove mv, out string prompt) { prompt = String.Empty; //keep trying until the user quits or enters a valid input //while (true) //{ //prompt user for imnput ConsoleWriteLine("Enter row and column for your move: row , column. \nor enter 'Q' to quit the game: ", false); string input = Console.ReadLine(); //if player is quiting throw quit exception if (input.Trim().ToUpper() == "Q") { throw new QuitGameException("Quiting TicTacToe Game"); } //split inputs into row and col numbers var inputs = input.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); int digit = -1; List <int> move = new List <int>(); foreach (string i in inputs) { if (Int32.TryParse(i, out digit)) { move.Add(digit); } } //check move input for valid input if (move.Count == 2) { if (currentBoard.ValidMove(move[0] - 1, move[1] - 1, player == GameBoard.Player.O ? GameBoard.Move.O : GameBoard.Move.X)) { var row = move[0] - 1; var col = move[1] - 1; mv = new GameHistory.GameMove(MoveFromPlayer(player), GameBoard.IndexFromRowCol(row, col)); return(true); } prompt = "\nInvalid Input read. Must enter an integer between 1 and 3 a comma and an integer between 1 and 3\n"; } else if (move.Count > 2) { prompt = "\nToo many inputs entered" + "\nUser input was " + input + "\nMust enter an integer between 0 and 2 a comma and an integer between 0 and 2\n"; } else if (move.Count < 2) { prompt = "\nToo few inputs entered" + "\nUser input was " + input + "Must enter an integer between 0 and 2 a comma and an integer between 0 and 2\n"; } mv = null; return(false); //} }
public Player(GameBoard.Player playerId) { this.playerId = playerId; }
public static GameBoard.Move MoveFromPlayer(GameBoard.Player player) { return(player == GameBoard.Player.O ? GameBoard.Move.O : GameBoard.Move.X); }
public AdvancedBot(GameBoard.Player playerId) : base(playerId) { }
public UserPlayer(GameBoard.Player playerId) : base(playerId) { }
public GameWonEventArgs(GameBoard.Player player, int[] winning) { Player = player; WinningIndexes = winning; }
public ConsolePlayer(GameBoard.Player playerId, ManualResetEvent mre) : base(playerId) { this.mre = mre; }
public WebPlayer(GameBoard.Player playerId) : base(playerId) { }
public SimpleBot(GameBoard.Player playerId) : base(playerId) { }