static void Main(string[] args) { var game = new ReversiGame(new GameFieldFactory().PrepareField()); var movesFinder = new PossibleMovesFinder(); DrawField(game.Field, game.CurrentColor, movesFinder.GetPossibleMoves(game.Field).ToList()); while (!game.IsOver) { var move = ReadMove(); ValueOrError <bool> result; if (move == "rnd" || move == "r") { result = game.MakeMove(movesFinder.GetPossibleMoves(game.Field) .First(possibleMove => possibleMove.Color == game.CurrentColor).Position.ToCode()); } else { result = game.MakeMove(move); } if (result.HasValue) { DrawField(game.Field, game.CurrentColor, movesFinder.GetPossibleMoves(game.Field).ToList()); } else { Console.WriteLine($"Error occured during move: {result.Error}"); } } }
private static void MakeMove(ReversiGame reversiGame, Color myColor) { var moves = new PossibleMovesFinder().GetPossibleMoves(reversiGame.Field).Where(move => move.Color == myColor).ToList(); // Console.WriteLine($"//{string.Join(",", moves)}, {reversiGame.Field.GetCell("B4").Piece?.Color}"); if (!moves.Any()) { Console.WriteLine("pass"); reversiGame.MakeMove("pass"); return; } var move = moves[random.Next(moves.Count)]; var code = move.Position.ToCode(); reversiGame.MakeMove(code); Console.WriteLine(code); }
private static void GetOpponentsMove(ReversiGame game) { string nextMove = null; while (nextMove == null) { nextMove = Console.ReadLine(); } game.MakeMove(nextMove); }