1answer.
Ask question
Login Signup
Ask question
All categories
  • English
  • Mathematics
  • Social Studies
  • Business
  • History
  • Health
  • Geography
  • Biology
  • Physics
  • Chemistry
  • Computers and Technology
  • Arts
  • World Languages
  • Spanish
  • French
  • German
  • Advanced Placement (AP)
  • SAT
  • Medicine
  • Law
  • Engineering
Otrada [13]
3 years ago
14

Programming assignment (100 pts): In the C++ programming language write a program capable of playing Tic-Tac-Toe against the use

r. Your program should use OOP concepts in its design. You can use ASCII art to generate and display the 3x3 playing board. The program should randomly decide who goes first computer or user. Your program should know and inform the user if an illegal move was made (cell already occupied). The program should also announce if one of the players wins or if a draw is achieved. While it is desirable for your program to play a strong game, this is not an Artificial Intelligence course so if your program does not play at a world champion level you will not be penalized for it.
Computers and Technology
1 answer:
STALIN [3.7K]3 years ago
8 0

Answer:

#include <iostream>

#include <ctime>

#include <string> // for string methods

using namespace std;

class Board

{

private:

char squares[3][3]; //two-dimensional arrays

public:

Board() {}

void PrintBoard();

void BeginGame();

void playerTurn (char num, char Player);

bool CheckWin (char Player, bool gameOver);

bool CheckDraw(bool gameOver);

 

};

//Organize board for the game

void Board::BeginGame()

{

int n = 1;

int i = 0;

int j = 0;

for ( i = 0; i < 3; i++ )

{

for ( j = 0; j < 3; j++ )

{

squares[i][j] = '0' + n; //Casting n value to a character

n++;

}

}

} //End SetGameBoard

 

 

//printing board

void Board::PrintBoard()

{

int i = 0;

int j = 0;

for ( i = 0; i < 3; i++ )

{

for ( j = 0; j < 3; j++ )

{

if ( j < 2 )

{

cout << squares[i][j] << " | ";

}

else

{

cout << squares[i][j] << endl;

}

}

}

} //End

 

void Board:: playerTurn (char num, char Player)

{

int i = 0;

int j = 0;

bool WrongMove = true; //If the value is true then the player has made a wrong move

for( i = 0; i < 3; i++ )

{

for( j = 0; j < 3; j++ )

{

if(squares[i][j] == num)

{

//Assigns the space with the X or O,

squares[i][j] = Player;

WrongMove = false;

}

}

}

if(WrongMove == true) { cout << "You can only mark the open sets!\n"; }

} //End Player Move

 

//checking for the winner. If not, cotinue or a draw

bool Board:: CheckWin (char Player, bool GameOver)

{

for(int i = 0; i < 3; i++) //To check rows

{

if(squares[i][0] == squares[i][1] && squares[i][1] ==

squares[i][2]) GameOver = true;

}

for(int i = 0; i < 3; i++) //To check columns

{

if(squares[0][i] == squares[1][i] && squares[1][i] ==

squares[2][i]) GameOver = true;

}

 

if(squares[0][0] == squares[1][1] && squares[1][1] == squares[2][2]) //To check the Diagonals

{

GameOver = true;

}

if(squares[0][2] == squares[1][1] && squares[1][1] == squares[2][0])

{

GameOver = true;

}

if(GameOver == true)

{

cout << "Player " << Player << " wins!\n\n";

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

cout << "| CONGRATULATIONS " << Player << " |\n";

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

}

return GameOver;

}

 

bool Board:: CheckDraw(bool GameOver)

{

int n = 1;

int i = 0;

int j = 0;

int counter = 0;

for( i = 0; i < 3; i++ )

{

for( j = 0; j < 3; j++ )

{

//Check to see if the board if full

if(squares[i][j] == '0' + n)

{

counter++;

}

n++;

}

}

if( counter < 1 )

{

cout << "Game Draw\n\n";

GameOver = true;

}

return GameOver;

}

// Main method starts here

int main()

{

bool finish = false, GameOver = false,isValid;

char Player = 'O', num;

int number;

srand(time(NULL)); //seed random from time

number = rand()%2; //Randomly choose a player to start game

if(number == 0)

Player = 'X';

else

Player = 'O';

cout << "" << endl;

 

cout << "-=Tic-Tac-Toe=-\n";

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

Board TicTac;

TicTac.BeginGame();

TicTac.PrintBoard(); //Initialize and output board

do

{

if( Player == 'X' )

{

Player = 'O';

}

else

{

Player = 'X';

}

TicTac.PrintBoard();

cout << "\nPlayer \"" << Player << "\", it's your turn: ";

cin >> num;

cout << "\n";

TicTac.playerTurn (num, Player);

 

GameOver = TicTac.CheckWin (Player, GameOver);

GameOver = TicTac.CheckDraw(GameOver);

if(GameOver == true)

{

cout << "Thank you for playing!";

finish = true;

}

} while(!finish);

return 0;

}

You might be interested in
A file is to be shared among different processes, each of which has a unique number. The file can beaccessed simultaneously by s
Finger [1]

Answer:

int sumid=0;    /* Shared var that contains the sum of the process ids currently accessing the file */

int waiting=0;   /* Number of process waiting on the semaphore OkToAccess */

semaphore mutex=1;   /* Our good old Semaphore variable ;) */

semaphore OKToAccess=0;    /* The synchronization semaphore */

get_access(int id)

{

    sem_wait(mutex);

    while(sumid+id > n) {

        waiting++;

        sem_signal(mutex);

        sem_wait(OKToAccess);

        sem_wait(mutex);

    }

    sumid += id;

    sem_signal(mutex);

}

release_access(int id)

{

    int i;

    sem_wait(mutex);

    sumid -= id;

    for (i=0; i < waiting;++i) {

        sem_signal(OKToAccess);

    }

    waiting = 0;

    sem_signal(mutex);

}

main()

{

    get_access(id);

    do_stuff();

    release_access(id);

}

Some points to note about the solution:

release_access wakes up all waiting processes. It is NOT ok to wake up the first waiting process in this problem --- that process may have too large a value of id. Also, more than one process may be eligible to go in (if those processes have small ids) when one process releases access.

woken up processes try to see if they can get in. If not, they go back to sleep.

waiting is set to 0 in release_access after the for loop. That avoids unnecessary signals from subsequent release_accesses. Those signals would not make the solution wrong, just less efficient as processes will be woken up unnecessarily.

5 0
3 years ago
Which of the following is a file on the host computer used for temporary memory storage when a sudden surge in memory requiremen
o-na [289]

Answer:

The answer is memory buffer.

Explanation:

Which of the following is a file on the host computer used for temporary memory storage when a sudden surge in memory requirements exceeds the physical amount of memory available?

The answer is memory buffer.

A buffer, also called buffer memory, is a portion of a computer's memory that is set aside as a temporary holding place for data that is being sent to or received from an external device, such as a hard disk drive (HDD), keyboard or printer.

4 0
3 years ago
The ___________________ Act makes it illegal to deactivate or otherwise disable any antipiracy technologies including DRM techno
arsen [322]

Answer:

Digital Millennium Copyright Act

Explanation:

Digital Millennium Copyright Act (DMCA) is a protection placed on creative works online and gave content owners the authority to have their contents removed from websites who use it without permission, the act prohibits the reselling and giving away of commercial programs, contents or devices, violating the act is criminal

5 0
4 years ago
Communication mode which supports data in both directions at the same time is called
xeze [42]

Answer:

duplex mode

Explanation:

It is the duplex mode. In this mode, communication is in both directions at the same time. And it is different from the simplex or the semi duplex types in which the communication is one way only or one way at a time only. Thus, duplex mode seems to be requiring more bandwidth certainly but it can be advantageous definitely, and in situations like real tine communication, when we don't have the time and want to send as well receive the message at the same time.

7 0
3 years ago
A<br> is an list of steps to complete a task. *
nlexa [21]

Explanation:

hope it helps

pls mark me brainliest thanks

4 0
3 years ago
Other questions:
  • If Mark is developing a website to be optimized for mobile devices, what would be the top-level domain?
    10·1 answer
  • Driving is expensive. Write a program with a car's miles/gallon and gas dollars/gallon (both floats) as input, and output the ga
    12·2 answers
  • What is added to the &lt; meta &gt;tag to describe the encoding type?
    15·1 answer
  • 2 inventions revolutionized photography, what are they?
    10·1 answer
  • When would you use a template when working with word 2013?
    15·1 answer
  • What does a production possibilities curve represent?Which of the following statements are true? Economic stability means fair d
    9·1 answer
  • What is the purpose of networking with other businesses?
    10·1 answer
  • Certain high-performance vehicles use a dry sump system because it allows for A. more power. B. longer periods of cornering and
    10·2 answers
  • I need help converting this to python but i have no idea how to.
    12·1 answer
  • Which of the expressions is false? when a = 10 and b = 4
    8·1 answer
Add answer
Login
Not registered? Fast signup
Signup
Login Signup
Ask question!