Aiyan Tufail
Aiyan Tufail

Reputation: 29

Restarting a program in c++

Take a look at this code, it's a game of Tic Tac Toe After the game has finished, the program asks the user whether they want to play again and if yes, the function runs again. However, the array values remain updated as it has been declared globally. The array has to be declared globally as it's being used in multiple functions. Is there a way to reset the values of the array to their original values when the user selects the option to play again?

 #include <iostream>
    #include <string>
    using namespace std;


    void contents(); //function to draw the tic tac toe board
    char letters[9] = {'a','b','c','d','e','f','g','h','i'}; //array containing 
    the default characters of the board
    string check(); //function to check whether the game is ongoing or has ended 
    in a win or draw
    string result; // string telling us whether the game is ongoing or has ended 
    in a win or draw





    void contents()
    {

    cout <<endl<<endl<<endl<<"   Tic Tac Toe"<<endl<<endl<<endl;


    cout << endl;

    cout << "     |     |     " << endl;
    cout << "  " << letters[0] << "  |  " << letters[1] << "  |  " << letters[2] 
    << endl;

    cout << "     |     |     " << endl;
    cout << "----- ----- -----" << endl;
    cout << "     |     |     " << endl;

    cout << "  " << letters[3] << "  |  " << letters[4] << "  |  " << letters[5] 
    << endl;

    cout << "     |     |     " << endl;
    cout << "----- ----- -----" << endl;
    cout << "     |     |     " << endl;

    cout << "  " << letters[6] << "  |  " << letters[7] << "  |  " << letters[8] 
    << endl;

    cout << "     |     |     " << endl << endl;
    }




    int main()
    {
    char selection1; //selection of the mark chosen by player 1 (X or O)
    int player = 1;
    char mark;//X or O
    char selection2; //selection of the character to replace in the array chosen 
    by the players
    char invalid; //character to enter if the user selects a character that 
    isn't present in the array
    string choice;



    while(selection1!='X' || selection1!='Y')
    {
     cout<<"Make your selection player 1 (X or O): ";
     cin>>selection1;
     if (selection1=='X' || selection1=='O')
        break;
       else
        cout<<"Make a valid selection, press enter to select again"<<endl;
        cin.ignore();
        cin.get();
    }

    do
    {
     player=(player%2)?1:2;

    if(selection1 =='X')
    mark = (player == 1) ? 'X' : 'O';

    else if (selection1=='O')
    mark = (player == 1) ? 'O' : 'X';


        contents();


        cout << "Player " << player << ", enter a letter:  ";
        cin >> selection2;


        if (selection2 == 'a' && letters[0] == 'a')

            letters[0] = mark;
        else if (selection2 == 'b' && letters[1] == 'b')

            letters[1] = mark;
        else if (selection2 == 'c' && letters[2] == 'c')

            letters[2] = mark;
        else if (selection2 == 'd' && letters[3] == 'd')

            letters[3] = mark;
        else if (selection2 == 'e' && letters[4] == 'e')

            letters[4] = mark;
        else if (selection2 == 'f' && letters[5] == 'f')

            letters[5] = mark;
        else if (selection2 == 'g' && letters[6] == 'g')

            letters[6] = mark;
        else if (selection2 == 'h' && letters[7] == 'h')

            letters[7] = mark;
        else if (selection2 == 'i' && letters[8] == 'i')

            letters[8] = mark;
        else
        {
            cout<<"Invalid move, press enter to continue: ";
            cin.ignore();
            cin.get();
            player--;


        }
        result=check();

        player++;
    }while(result=="Ongoing");
    contents();
    if(result=="Over")
{

        cout<<"Player "<<--player<<" wins ";
        cin.ignore();
        cin.get();
        cout<<"Do you want to play again?";
        cin>>choice;
        if (choice =="Yes")
        main();

}
    else
    {

        cout<<"Draw";
        cin.ignore();
        cin.get();
        cout<<"Do you want to play again?";
        cin>>choice;
        if (choice =="Yes")
        main();

    }


    return 0;
}


string check()
{
    if (letters[0] == letters[1] && letters[1] == letters[2])

    return "Over";


    else if (letters[3] == letters[4] && letters[4] == letters[5])

    return "Over";


    else if (letters[6] == letters[7] && letters[7] == letters[8])

    return "Over";


    else if (letters[0] == letters[3] && letters[3] == letters[6])

    return "Over";


    else if (letters[1] == letters[4] && letters[4] == letters[7])

    return "Over";


    else if (letters[2] == letters[5] && letters[5] == letters[8])

    return "Over";


    else if (letters[0] == letters[4] && letters[4] == letters[8])

    return "Over";


    else if (letters[2] == letters[4] && letters[4] == letters[6])

    return "Over";



    else if (letters[0] != 'a' && letters[1] != 'b' && letters[2] != 'c'
             && letters[3] != 'd' && letters[4] != 'e' && letters[5] != 'f'
             && letters[6] != 'g' && letters[7] != 'h' && letters[8] != 'i')

        return "Draw";


    else

    return "Ongoing";
}

Upvotes: 2

Views: 208

Answers (1)

MSalters
MSalters

Reputation: 180155

The obvious way would be to write a new function which does exactly what you want, i.e. set letters[0] to 'a' etc.

You will probably learn about classes later. A class holds multiple functions, and also multiple data members. Each instance of such a class is called an object, and you'd implement each round of the game as a new object.

Upvotes: 2

Related Questions