I was designing the strategy for Tic Tac Toe:
CHOOSE THE MOVE WITH THE HIGHEST PRIORITY -
if you have 2 in a row, get 3 in a row;
if the opponent has 2 in a row, get 3 to block him;
play the center;
if the opponent is in the corner, get the opposite corner;
get an empty corner;
get an empty side.
Sure, there are a lot of repetitive tasks.
After coding the first 3 conditions for COPUTER moves I've notice it never executes:
if (opponentHuman == false && i % 2 != 0 )
{
if (array2[0] == 'X' && array2[1] == 'X' && array2[2] == 3)
{
Console.SetCursorPosition(11, 2);
Console.WriteLine("O");
array2[2] = 'O';
}
}
if (opponentHuman == false && i % 2 != 0)
{
if (array2[0] == 'X' && array2[2] == 'X' && array2[1] == 2)
{
Console.SetCursorPosition(7, 2);
Console.WriteLine("O");
array2[1] = 'O';
}
}
if (opponentHuman == false && i % 2 != 0)
{
if (array2[1] == 'X' && array2[2] == 'X' && array2[0] == 1 )
{
Console.SetCursorPosition(3, 2);
Console.WriteLine("O");
array2[i] = 'O';
}
}
The program written so far :
using System;
using System.Collections.Generic;
using System.Text;
namespace TTT
{
class Program
{
static void Main(string[] args)
{
int i = 0;
int n = 0;
bool opponentHuman = false;
ConsoleKeyInfo opponent = new ConsoleKeyInfo();
string input = "";
bool validInput = false;
bool exitGame = false;
const int ARRAY1_LENGHT = 10;
int[] array1 = new int[ARRAY1_LENGHT];
array1[n] = 0;
char[] array2 = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
Console.SetCursorPosition(2, 3);
Console.WriteLine(" NOUGHTS & CROSSES ");
Console.WriteLine();
Console.WriteLine(" Human v Human(h) or v Computer(c) ? h/c ");
opponent = Console.ReadKey();
if ((opponent.KeyChar == 'h') || (opponent.KeyChar == 'H'))
opponentHuman = true;
else if ((opponent.KeyChar == 'c') || (opponent.KeyChar == 'C'))
opponentHuman = false;
int[,] board = new int[3, 3];
Console.SetCursorPosition(0, 0);
Console.WriteLine();
Console.WriteLine(" | | ");
Console.WriteLine(" | | ");
Console.WriteLine(" 1| 2| 3 ");
Console.WriteLine("------------ ");
Console.WriteLine(" | | ");
Console.WriteLine(" | | ");
Console.WriteLine(" 4| 5| 6 ");
Console.WriteLine("------------ ");
Console.WriteLine(" | | ");
Console.WriteLine(" | | ");
Console.WriteLine(" 7| 8| 9 ");
Console.WriteLine();
Console.WriteLine();
while (!exitGame)
{
for (i = 0; i < 9; i++)
{
if (opponentHuman == false)
{
Console.SetCursorPosition(7, 6);
Console.WriteLine("O");
array2[i] = 'O';
}
Console.SetCursorPosition(0, 13);
Console.WriteLine(" Please enter a number from 1 to 9 : ");
while (!validInput)
{
input = Console.ReadLine();
if (!int.TryParse(input, out n) || n < 0 || n > 10)
{
Console.WriteLine("Please enter a valid number(number from 1 to 9)");
}
else
{
if (array1[n] == n)
{
Console.WriteLine(" Please enter only number what hasn't been entered before : ");
}
else
{
validInput = true;
}
}
}
array1[n] = n;
validInput = false;
if (n == 1)
{
Console.SetCursorPosition(3, 2);
}
if (n == 2)
{
Console.SetCursorPosition(7, 2);
}
if (n == 3)
{
Console.SetCursorPosition(11, 2);
}
if (n == 4)
{
Console.SetCursorPosition(3, 6);
}
if (n == 5)
{
Console.SetCursorPosition(7, 6);
}
if (n == 6)
{
Console.SetCursorPosition(11, 6);
}
if (n == 7)
{
Console.SetCursorPosition(3, 10);
}
if (n == 8)
{
Console.SetCursorPosition(7, 10);
}
if (n == 9)
{
Console.SetCursorPosition(11, 10);
}
if (i % 2 == 0)
{
Console.WriteLine("X");
array2[n - 1] = 'X';
}
else
{
Console.WriteLine("0");
array2[n - 1] = '0';
}
if (opponentHuman == false && i % 2 != 0)
{
if (array2[0] == 'X' && array2[1] == 'X' && array2[2] == 3)
{
Console.SetCursorPosition(11, 2);
Console.WriteLine("O");
array2[2] = 'O';
}
}
if (opponentHuman == false && i % 2 != 0)
{
if (array2[0] == 'X' && array2[2] == 'X' && array2[1] == 2)
{
Console.SetCursorPosition(7, 2);
Console.WriteLine("O");
array2[1] = 'O';
}
}
if (opponentHuman == false && i % 2 != 0)
{
if (array2[1] == 'X' && array2[2] == 'X' && array2[0] == 1)
{
Console.SetCursorPosition(3, 2);
Console.WriteLine("O");
array2[i] = 'O';
}
}
if (
(array2[0] == array2[2] && array2[0] == array2[1]) ||
(array2[0] == array2[4] && array2[0] == array2[8]) ||
(array2[0] == array2[3] && array2[0] == array2[6]) ||
(array2[3] == array2[4] && array2[3] == array2[5]) ||
(array2[6] == array2[7] && array2[6] == array2[8]) ||
(array2[2] == array2[4] && array2[2] == array2[6]) ||
(array2[2] == array2[5] && array2[2] == array2[8]) ||
(array2[1] == array2[4] && array2[1] == array2[7])
)
{
exitGame = true;
}
if (exitGame == true)
{
Console.SetCursorPosition(0, 20);
Console.WriteLine("WINNER IS {0}", i % 2 == 0 ? "CROSS X" : "NOUGHT O");
break;
}
}
}
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
}
What is the way to combat my problem ?