Classe Velha. Crie uma classe Velha que lhe permitirá escrever um programa completo para jogar o jogo da velha. A classe contém como dados private um array bidimensional de 3 por 3 com inteiros. O construtor deverá inicializar o tabuleiro vazio com zeros. Permita que duas pessoas joguem. Sempre que o primeiro jogador fizer sua jogada, coloque um 1 no quadrado especificado. Coloque um 2 para a jogada do segundo jogador. Cada movimento deverá estar em um quadrado vazio. Depois de cada movimento, determine se o jogo foi ganho ou se está empatado. Se você for ambicioso, modifique seu programa de modo que o computador jogue no lugar de um dos jogadores. Além disso, permita que o jogador especifique se ele ou ela deseja ser o primeiro ou o segundo. Se você for excepcionalmente ambicioso, desenvolva um programa para um jogo da velha tridimensional em um tabuleiro de 4 por 4 por 4. [Cuidado: este é um projeto extremamente desafiador, que poderá exigir muitas semanas de esforço!]
Passo 1
Fala Galera!!! Tudo certo? Espero que sim!! Bora para mais um exercício.
Vamos criar um programa com uma classe chamada TicTacToe que terá funções membros repoisáveis por imitar o famoso jogo da velha. Nosso programa irá permitir que dois jogadores consigam participar, um tabuleiro de tamanho 3x3 será mostrado na tela para indicar a posição que cada jogador escolheu para jogar.
Passo 2
Vamos iniciar incluindo os arquivos de cabeçalho e definir a classe com as funções membros:
//cabeçalhos
#include
#include
using std::setw;
using namespace std;
class TicTacToe {
private:
//variaveis status
enum Status { WIN, DRAW, CONTINUE };
int board[ 3 ][ 3 ];
public:
//construtor
TicTacToe();
//funçõesmembri
void makeMove( void );
void printBoard( void );
bool validMove( int, int );
bool xoMove( int );
Status gameStatus( void );
};
Passo 3
Após definir a classe, vamos criar as funções responsáveis pelo funcionamento do jogo e também para exibir o resultado na tela e o tabuleiro
// definindo construtuor
TicTacToe::TicTacToe()
{
for ( int j = 0; j
for ( int k = 0; k
board[ j ][ k ] = ' ';
}
bool TicTacToe::validMove( int r, int c )
{
return r >= 0 && r = 0 && c
}
// deve especificar que o tipo Status faz parte da classe TicTacToe.
TicTacToe::Status TicTacToe::gameStatus( void )
{
int a;
// verifica se há uma vitória nas diagonais
if ( board[ 0 ][ 0 ] != ' ' && board[ 0 ][ 0 ] == board[ 1 ][ 1 ] &&
board[ 0 ][ 0 ] == board[ 2 ][ 2 ] )
return WIN;
else if ( board[ 2 ][ 0 ] != ' ' && board[ 2 ][ 0 ] ==
board[ 1 ][ 1 ] && board[ 2 ][ 0 ] == board[ 0 ][ 2 ] )
return WIN;
// verifica a vitória nas linhas
for ( a = 0; a
if ( board[ a ][ 0 ] != ' ' && board[ a ][ 0 ] ==
board[ a ][ 1 ] && board[ a ][ 0 ] == board[ a ][ 2 ] )
return WIN;
// verifica a vitória nas colunas
for ( a = 0; a
if ( board[ 0 ][ a ] != ' ' && board[ 0 ][ a ] ==
board[ 1 ][ a ] && board[ 0 ][ a ] == board[ 2 ][ a ] )
return WIN;
// verifica se há um jogo completo
for ( int r = 0; r
for ( int c = 0; c
if ( board[ r ][ c ] == ' ' )
return CONTINUE;
// o jogo não terminou
return DRAW;
// o jogo está empatado
}
//exibe a desenho
void TicTacToe::printBoard( void )
{
cout
for ( int r = 0; r
cout
for ( int c = 0; c
cout ( board[ r ][ c ] );
if ( c != 2 )
cout
}
if ( r != 2 )
cout
}
cout
}
//define os movimentos
void TicTacToe::makeMove( void )
{
printBoard();
while ( true ) {
if ( xoMove( 'X' ) )
break;
else if ( xoMove( 'O' ) )
break;
}
}
bool TicTacToe::xoMove( int symbol )
{
int x, y;
do {
cout ( symbol )
cin >> x >> y;
cout
} while ( !validMove( x, y ) );
board[ x ][ y ] = symbol;
printBoard();
Status xoStatus = gameStatus();
if ( xoStatus == WIN ) {
cout ( symbol )
return true;
}
else if ( xoStatus == DRAW ) {
cout
return true;
}
else // CONTINUE
return false;
}
Passo 4
Para finalizar só precisamos definir o objeto da classe e chamar a função responsável por iniciar o jogo dentro da função principal main().
int main()
{
TicTacToe g;
g.makeMove();
return 0;
}
Desta forma o jogo já estará funcionando. E assim finalizamos o exercício galera!!! Até o próximo.
Resposta
Código:
//cabeçalhos
#include
#include
using std::setw;
using namespace std;
class TicTacToe {
private:
//variaveis status
enum Status { WIN, DRAW, CONTINUE };
int board[ 3 ][ 3 ];
public:
//construtor
TicTacToe();
//funçõesmembri
void makeMove( void );
void printBoard( void );
bool validMove( int, int );
bool xoMove( int );
Status gameStatus( void );
};
// definindo construtuor
TicTacToe::TicTacToe()
{
for ( int j = 0; j
for ( int k = 0; k
board[ j ][ k ] = ' ';
}
bool TicTacToe::validMove( int r, int c )
{
return r >= 0 && r = 0 && c
}
// deve especificar que o tipo Status faz parte da classe TicTacToe.
TicTacToe::Status TicTacToe::gameStatus( void )
{
int a;
// verifica se há uma vitória nas diagonais
if ( board[ 0 ][ 0 ] != ' ' && board[ 0 ][ 0 ] == board[ 1 ][ 1 ] &&
board[ 0 ][ 0 ] == board[ 2 ][ 2 ] )
return WIN;
else if ( board[ 2 ][ 0 ] != ' ' && board[ 2 ][ 0 ] ==
board[ 1 ][ 1 ] && board[ 2 ][ 0 ] == board[ 0 ][ 2 ] )
return WIN;
// verifica a vitória nas linhas
for ( a = 0; a
if ( board[ a ][ 0 ] != ' ' && board[ a ][ 0 ] ==
board[ a ][ 1 ] && board[ a ][ 0 ] == board[ a ][ 2 ] )
return WIN;
// verifica a vitória nas colunas
for ( a = 0; a
if ( board[ 0 ][ a ] != ' ' && board[ 0 ][ a ] ==
board[ 1 ][ a ] && board[ 0 ][ a ] == board[ 2 ][ a ] )
return WIN;
// verifica se há um jogo completo
for ( int r = 0; r
for ( int c = 0; c
if ( board[ r ][ c ] == ' ' )
return CONTINUE;
// o jogo não terminou
return DRAW;
// o jogo está empatado
}
//exibe a desenho
void TicTacToe::printBoard( void )
{
cout
for ( int r = 0; r
cout
for ( int c = 0; c
cout ( board[ r ][ c ] );
if ( c != 2 )
cout
}
if ( r != 2 )
cout
}
cout
}
//define os movimentos
void TicTacToe::makeMove( void )
{
printBoard();
while ( true ) {
if ( xoMove( 'X' ) )
break;
else if ( xoMove( 'O' ) )
break;
}
}
bool TicTacToe::xoMove( int symbol )
{
int x, y;
do {
cout ( symbol )
cin >> x >> y;
cout
} while ( !validMove( x, y ) );
board[ x ][ y ] = symbol;
printBoard();
Status xoStatus = gameStatus();
if ( xoStatus == WIN ) {
cout ( symbol )
return true;
}
else if ( xoStatus == DRAW ) {
cout
return true;
}
else // CONTINUE
return false;
}
int main()
{
TicTacToe g;
g.makeMove();
return 0;
}