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); } } 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); Console.Clear(); if (board.GetWinner() == Player.Human) { Console.WriteLine("Human Wins"); Environment.Exit(0); } if (!board.HasEmptyColumns()) { Console.WriteLine("TIE"); Environment.Exit(0); } } }