Knocks the error <Process is terminated due to StackOverflowException> in the console when the game supposedly comes to an end.
class X_O { static char One, Two, Three, Four, Five, Six, Seven, Eight, Nine; static int Enter; static int PCEnter; static void Main() { Console.Clear(); Monitor(); Enters(); } static void Monitor() { Console.OutputEncoding = Encoding.UTF8; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(); Console.WriteLine(" --- --- --- "); Console.WriteLine(" ┆ {0} ┆ {1} ┆ {2} ┆", One, Two, Three); Console.WriteLine(" --- --- --- "); Console.WriteLine(" ┆ {0} ┆ {1} ┆ {2} ┆", Four, Five, Six); Console.WriteLine(" --- --- --- "); Console.WriteLine(" ┆ {0} ┆ {1} ┆ {2} ┆", Seven, Eight, Nine); Console.WriteLine(" --- --- --- "); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.White; } static void PC() { Random Num = new Random(); PCEnter = Num.Next(1,9); switch (PCEnter) { case 1: { if (One == 'X' || One == 'O') PC(); else One = 'O'; Main(); break; } case 2: { if (Two == 'X' || Two == 'O') PC(); else Two = 'O'; Main(); break; } case 3: { if (Three == 'X' || Three == 'O') PC(); else Three = 'O'; Main(); break; } case 4: { if (Four == 'X' || Four == 'O') PC(); else Four = 'O'; Main(); break; } case 5: { if (Five == 'X' || Five == 'O') PC(); else Five = 'O'; Main(); break; } case 6: { if (Six == 'X' || Six == 'O') PC(); else Six = 'O'; Main(); break; } case 7: { if (Seven == 'X' || Seven == 'O') PC(); else Seven = 'O'; Main(); break; } case 8: { if (Eight == 'X' || Eight == 'O') PC(); else Eight = 'O'; Main(); break; } case 9: { if (Nine == 'X' || Nine == 'O') PC(); else Nine = 'O'; Main(); break; } } Main(); } static void Enters() { Console.Write(" X_O ВАШ ХОД : "); try { Enter = Convert.ToInt32(Console.ReadLine()); switch (Enter) { case 1: { if (One == 'X' || One == 'O') Console.Beep(); else One = 'X'; PC(); break; } case 2: { if (Two == 'X' || Two == 'O') Console.Beep(); else Two = 'X'; PC(); break; } case 3: { if (Three == 'X' || Three == 'O') Console.Beep(); else Three = 'X'; PC(); break; } case 4: { if (Four == 'X' || Four == 'O') Console.Beep(); else Four = 'X'; PC(); break; } case 5: { if (Five == 'X' || Five == 'O') Console.Beep(); else Five = 'X'; PC(); break; } case 6: { if (Six == 'X' || Six == 'O') Console.Beep(); else Six = 'X'; PC(); break; } case 7: { if (Seven == 'X' || Seven == 'O') Console.Beep(); else Seven = 'X'; PC(); break; } case 8: { if (Eight == 'X' || Eight == 'O') Console.Beep(); else Eight = 'X'; PC(); break; } case 9: { if (Nine == 'X' || Nine == 'O') Console.Beep(); else Nine = 'X'; PC(); break; } default: Console.Beep(); Main(); break; } Main(); } catch { Console.Beep(); Main(); } } } 
EntersfromMain, and callMainfromEnters. The recursion however ...... And by the way it is impossible to cause Main from something. This is the entry point. - Alexey Shimansky