using System.Diagnostics; using Connect4; using MinMaxAB; const int depth = 9; var board = new GameBoard(new(7, 6)); while (true) { AiMove(board); HumanMove(board); } static void AiMove(GameBoard board) { Console.WriteLine("Thinking..."); var sw = new Stopwatch(); sw.Start(); var move = Connect4Minimax.GetBestMove(board, depth); sw.Stop(); Console.WriteLine($"Decision made in {sw.Elapsed}"); board.PlaceCoin(Player.Computer, move); Console.WriteLine($"AI Moves {move + 1}"); if (board.GetWinner() == Player.Computer) { Console.Clear(); Console.WriteLine(board); Console.WriteLine("AI Wins"); Environment.Exit(0); } if (!board.HasEmptyColumns()) { Console.Clear(); Console.WriteLine(board); Console.WriteLine("TIE"); Environment.Exit(0); } } static void HumanMove(GameBoard board) { 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); } }