Você está na página 1de 5

#include <stdio.

h>
#define PRG 3
#include <iostream>
using namespace std;
int vez;
int menu(void);
void clear(void);
void zeraTabuleiro(int tabuleiro[][PRG]);
void exibeTabuleiro(int tabuleiro[][PRG]);
void jogar(int tabuleiro[][PRG]);
int checaLocal(int tabuleiro[][PRG], int linha, int coluna);
int checaLinha(int tabuleiro[][PRG]);
int checaColuna(int tabuleiro[][PRG]);
int checaDiagonal(int tabuleiro[][PRG]);
int checaEmpate(int tabuleiro[][PRG]);
int checaTermino(int tabuleiro[][PRG], int vez);
void jogada(int tabuleiro[][PRG]);
int main(void)
{
int tabuleiro[PRG][PRG],
continuar;
do
{
vez=1;
continuar = menu();
if(continuar == 1)
jogar(tabuleiro);
}while(continuar);
return 0;
}
int menu(void)
{
int opcao;
cout<<"\n1.Jogar\n";
cout<<"0.Sair\n";
cout<<"\nOpcao: ";
cin>>opcao;
switch(opcao)
{
case 1:
case 0:
break;
default:
clear();
cout<<"Opcao invalida. Tente de novo!\n";
}
return opcao;

}
void clear(void)
{
int count=0;
while(count != 100)
{
putchar('\n');
count++;
}
}
void zeraTabuleiro(int tabuleiro[][PRG])
{
int linha, coluna;
for(linha = 0 ; linha < PRG ; linha++)
for(coluna = 0 ; coluna < PRG ; coluna++)
tabuleiro[linha][coluna] = 0;
}
void exibeTabuleiro(int tabuleiro[][PRG])
{
int linha, coluna;
putchar('\n');
for(linha = 0 ; linha < PRG ; linha++)
{
for(coluna = 0 ; coluna < PRG ; coluna++)
{
if(tabuleiro[linha][coluna] == 0)
cout<<"
";
else
if(tabuleiro[linha][coluna] == 1)
cout<<" X ";
else
cout<<" O ";
if(coluna != (PRG-1))
cout<<"|";
}
putchar('\n');
}
putchar('\n');
}
void jogar(int tabuleiro[][PRG])
{
int continua;
zeraTabuleiro(tabuleiro);
do
{
clear();
exibeTabuleiro(tabuleiro);
jogada(tabuleiro);
}while(checaTermino(tabuleiro, vez) != 1);
}

int checaLocal(int tabuleiro[][PRG], int linha, int coluna)


{
if(linha < 0 || linha > (PRG-1) || coluna < 0 || coluna > (PRG-1) || tabulei
ro[linha][coluna] != 0)
return 0;
else
return 1;
}
int checaLinha(int tabuleiro[][PRG])
{
int linha, coluna,
soma;
for(linha = 0 ; linha < PRG ; linha++)
{
soma=0;
for(coluna = 0 ; coluna < PRG ; coluna++)
soma += tabuleiro[linha][coluna];
if(soma==PRG || soma == (-1)*PRG)
return 1;
}
return 0;
}
int checaColuna(int tabuleiro[][PRG])
{
int linha, coluna,
soma;
for(coluna = 0 ; coluna < PRG ; coluna++)
{
soma=0;
for(linha = 0 ; linha < PRG ; linha++)
soma += tabuleiro[linha][coluna];
if(soma==PRG || soma == (-1)*PRG)
return 1;
}
return 0;
}
int checaDiagonal(int tabuleiro[][PRG])
{
int linha,
diagonal_principal=0,
diagonal_secundaria=0;
for(linha = 0 ; linha < PRG ; linha++)
{
diagonal_principal += tabuleiro[linha][linha];
diagonal_secundaria += tabuleiro[linha][PRG-linha-1];
}

if(diagonal_principal==PRG || diagonal_principal==(-1)*PRG ||
diagonal_secundaria==PRG || diagonal_secundaria==(-1)*PRG)
return 1;
return 0;
}
int checaEmpate(int tabuleiro[][PRG])
{
int linha, coluna;
for(linha = 0 ; linha < PRG ; linha++)
for(coluna = 0 ; coluna < PRG ; coluna++)
if(tabuleiro[linha][coluna] == 0)
return 0;
return 1;
}
int checaTermino(int tabuleiro[][PRG], int vez)
{
if(checaLinha(tabuleiro))
{
cout<<"Jogo encerrado. Jogador venceu !\n\n", (vez%2)+1;
exibeTabuleiro(tabuleiro);
return 1;
}
if(checaColuna(tabuleiro))
{
cout<<"Jogo encerrado. Jogador venceu !\n\n", (vez%2)+1;
exibeTabuleiro(tabuleiro);
return 1;
}
if(checaDiagonal(tabuleiro))
{
cout<<"Jogo encerrado. Jogador venceu !\n\n", (vez%2)+1;
exibeTabuleiro(tabuleiro);
return 1;
}
if(checaEmpate(tabuleiro))
{
cout<<"Jogo encerrado. Ocorreu um empate! !\n\n";
exibeTabuleiro(tabuleiro);
return 1;
}
return 0;
}
void jogada(int tabuleiro[][PRG])
{
int linha, coluna;
vez++;
cout<<"\n--> Jogador \n", (vez % 2) + 1;
do

{
cout<<"Linha: ";
cin>>linha;
linha--;
cout<<"Coluna: ";
cin>>coluna;
coluna--;
if(checaLocal(tabuleiro, linha, coluna) == 0)
cout<<"Posicao ocupada ou inexistente, escolha outra.\n";
} while(checaLocal(tabuleiro, linha, coluna) == 0);
if(vez%2)
tabuleiro[linha][coluna] = -1;
else
tabuleiro[linha][coluna] = 1;
}

Você também pode gostar