Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        //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);
 }
Exemplo n.º 5
0
        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;
            }
        }
Exemplo n.º 6
0
        //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);
        }
Exemplo n.º 7
0
        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();
        }
Exemplo n.º 8
0
 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}");
     }
 }
Exemplo n.º 9
0
        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;
            }
        }
Exemplo n.º 10
0
        //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);
        }
Exemplo n.º 11
0
            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));
            }
Exemplo n.º 12
0
 public TestPlayer(GameBoard.Player playerId) : base(playerId)
 {
 }
 public PlayerMovedEventArgs(GameBoard.Player player)
 {
     Player = player;
 }
Exemplo n.º 14
0
        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);
            //}
        }
Exemplo n.º 15
0
 public Player(GameBoard.Player playerId)
 {
     this.playerId = playerId;
 }
Exemplo n.º 16
0
 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)
 {
 }
Exemplo n.º 18
0
 public UserPlayer(GameBoard.Player playerId) : base(playerId)
 {
 }
Exemplo n.º 19
0
 public GameWonEventArgs(GameBoard.Player player, int[] winning)
 {
     Player         = player;
     WinningIndexes = winning;
 }
Exemplo n.º 20
0
 public ConsolePlayer(GameBoard.Player playerId, ManualResetEvent mre) : base(playerId)
 {
     this.mre = mre;
 }
Exemplo n.º 21
0
 public WebPlayer(GameBoard.Player playerId) : base(playerId)
 {
 }
Exemplo n.º 22
0
 public SimpleBot(GameBoard.Player playerId) : base(playerId)
 {
 }