0

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 ?

4
Contributors
5
Replies
6
Views
8 Years
Discussion Span
Last Post by UsSy
0

It's a much simpler and better solution just to have a lookup table of all the nonobvious board positions modulo rotation and reflection.

0

Can you tell me more about this idea ? What do you mean by saying " a lookup table" ? How can I implement it ? Should I use classes ?

0

Can you tell me more about this idea ? What do you mean by saying " a lookup table" ? How can I implement it ? Should I use classes ?

A lookup table as in something that contains a small set of standard board positions and tells you what to do in those cases.

You can implement it by programming.

You can define your own datatypes if that's appropriate.

0

Wow - This is extremely clever stuff! Could you add me on skype or msn and teach me some of this?

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.