123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- using System.Diagnostics;
- using FourInARow;
- using MinMaxAB;
- internal class Program
- {
- const int depth = 9;
- const bool maxPlayer = false;
- const int alpha = int.MinValue;
- const int beta = int.MaxValue;
- private static void Main()
- {
- var board = new GameBoard(new(7, 6));
- var minmax = new MinMaxABFourInARowBoard();
- while (true)
- {
- AiMove(board, minmax);
- HumanMove(board, minmax);
- Console.Clear();
- }
- }
- private static void AiMove(GameBoard board, MinMaxABFourInARowBoard minmax)
- {
- //Console.WriteLine(board);
- Console.WriteLine("Thinking...");
- var sw = new Stopwatch();
- sw.Start();
- var move = minmax.GetBestMove(board, depth);
- sw.Stop();
- Console.WriteLine($"Decision made in {sw.Elapsed}");
- //Console.Clear();
- board.PlaceCoin(Player.Computer, move);
- Console.WriteLine($"AI Moves {move + 1}");
- //Console.WriteLine(board);
- if (board.GetWinner() == Player.Computer)
- {
- Console.WriteLine("AI Wins");
- Environment.Exit(0);
- }
- if (!board.HasEmptyColumns())
- {
- Console.WriteLine("TIE");
- Environment.Exit(0);
- }
- }
- private static void HumanMove(GameBoard board, MinMaxABFourInARowBoard minmax)
- {
- Console.WriteLine(board);
- Console.Write("Your move: ");
- GC.Collect(2, GCCollectionMode.Aggressive);
- GC.WaitForFullGCComplete();
- board.PlaceCoin(Player.Human, int.Parse(Console.ReadLine()!) - 1);
- if (board.GetWinner() == Player.Human)
- {
- Console.WriteLine("Human Wins");
- Environment.Exit(0);
- }
- if (!board.HasEmptyColumns())
- {
- Console.WriteLine("TIE");
- Environment.Exit(0);
- }
- }
- }
|