public override GameMove MakeMove(GameState gs) { PlayerSymbol = gs.CurrentSymbol; var move = MaxValue(gs, Int32.MinValue, Int32.MaxValue); return(new GameMove(move.GameMove.Location, move.GameMove.GameSymbol)); }
public static TerminalState GetTerminalState(GameState gs, GameSymbol gameSymbol) { foreach (var Row in NaughtsAndCrossesGame.ThreeInARow) { if (gs.GameBoard[Row.Item1] != GameSymbol.Blank && gs.GameBoard[Row.Item1] == gs.GameBoard[Row.Item2] && gs.GameBoard[Row.Item2] == gs.GameBoard[Row.Item3]) { if (gs.GameBoard[Row.Item1] == gameSymbol) { return(TerminalState.Win); } else { return(TerminalState.Lose); } } } Boolean complete = true; foreach (GameSymbol s in gs.GameBoard) { if (s == GameSymbol.Blank) { complete = false; } } if (complete) { return(TerminalState.Draw); } return(TerminalState.Incomplete); }
/// <summary> /// Diese Methode konveriert ein GameSymbol Enum zu einem benutzbaren Zeichen /// </summary> /// <param name="gameSymbole">Das Game Symbol</param> /// <returns></returns> public static String ToFriendlyString(GameSymbol gameSymbole) { switch (gameSymbole) { case GameSymbol.Circle: return "o"; case GameSymbol.Cross: return "x"; } return ""; }
public void SwitchSymbol() { if (CurrentSymbol == GameSymbol.Naught) { CurrentSymbol = GameSymbol.Cross; } else { CurrentSymbol = GameSymbol.Naught; } }
protected int searchForTwoTogether(GameState gs, GameSymbol symbol) { foreach (var row in NaughtsAndCrossesGame.ThreeInARow) { var result = twoOutOfThreeSame(gs, symbol, row.Item1, row.Item2, row.Item3); if (result != -1) { return(result); } } return(-1); }
public GameState() { GameBoard = new GameSymbol[] { GameSymbol.Blank, GameSymbol.Blank, GameSymbol.Blank, GameSymbol.Blank, GameSymbol.Blank, GameSymbol.Blank, GameSymbol.Blank, GameSymbol.Blank, GameSymbol.Blank }; CurrentSymbol = GameSymbol.Naught; }
private int twoOutOfThreeSame(GameState gs, GameSymbol symbol, int first, int second, int third) { if (gs.GameBoard[first] == gs.GameBoard[second] && gs.GameBoard[first] == symbol && gs.GameBoard[third] == GameSymbol.Blank) { return(third); } if (gs.GameBoard[first] == gs.GameBoard[third] && gs.GameBoard[first] == symbol && gs.GameBoard[second] == GameSymbol.Blank) { return(second); } if (gs.GameBoard[second] == gs.GameBoard[third] && gs.GameBoard[second] == symbol && gs.GameBoard[first] == GameSymbol.Blank) { return(first); } return(-1); }
public override GameMove MakeMove(GameState gameState) { PlayerSymbol = gameState.CurrentSymbol; var moves = gameState.GetMoves(); var mostWins = 0.0; var bestMove = moves.First(); foreach (var move in moves) { var gs = gameState.Clone() as GameState; gs.ApplyMove(move); var wins = GetWins(gs, 3000); if (wins > mostWins) { mostWins = wins; bestMove = move; } } return(bestMove); }
public GameMove(int location, GameSymbol gameSymbol) { Location = location; GameSymbol = gameSymbol; }
public Player(String name, GameSymbol symbole) { this.Name = name; this.Symbol = symbole; this.Score = new GameScore(); }
public UtilityGameMove(int location, GameSymbol gameSymbol, int utility) { Utility = utility; GameMove = new GameMove(location, gameSymbol); }
public Player(ControlType type, GameSymbol symbol) { Type = type; Symbol = symbol; }