-
-
Save vsdsantos/25e1d712b1b193402f33bbf70289f442 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <time.h> | |
#include <stdlib.h> | |
using namespace std; | |
class Unity { | |
int value; // vai de -1 a 1 | |
public: | |
void init () { | |
value = 0; | |
} | |
char repres () { | |
if (value < 0) return 'O'; | |
if (value > 0) return 'X'; | |
return ' '; | |
} | |
void set_value (int v) { | |
value = v; | |
} | |
int get_value () { | |
return value; | |
} | |
}; | |
class Matrix { | |
Unity mat[3][3]; | |
public: | |
void init () { | |
for (size_t i = 0; i < 3; i++) { | |
for (size_t j = 0; j < 3; j++) { | |
mat[i][j].init(); | |
} | |
} | |
} | |
// return -1 or 1 if victory, 0 if even | |
int verify_victory () { | |
int v = 0, l, c, d1, d2; | |
for (size_t i = 0; i < 3; i++) { | |
l = sum_line(i); | |
c = sum_columm(i); | |
if (3 == abs(l)) { | |
v = l/3; break; | |
} | |
if (3 == abs(c)) { | |
v = c/3; break; | |
} | |
} | |
if (0 == v) { | |
d1 = sum_diag(0); | |
d2 = sum_diag(-1); | |
if (3 == abs(d1)) { | |
v = d1/3; | |
} else if (3 == abs(d2)) { | |
v = d2/3; | |
} | |
} | |
return v; | |
} | |
private: | |
int sum_line (int l) { | |
int sum = 0; | |
for (size_t i = 0; i < 3; i++) { | |
sum += mat[l][i].get_value(); | |
} | |
return sum; | |
} | |
int sum_columm (int c) { | |
int sum = 0; | |
for (size_t i = 0; i < 3; i++) { | |
sum += mat[i][c].get_value(); | |
} | |
return sum; | |
} | |
int sum_diag (int d) { | |
int sum = 0; | |
for (size_t i = 0; i < 3; i++) { | |
if (0 <= d) { | |
sum += mat[i][i].get_value(); | |
} else { | |
sum += mat[i][3-i].get_value(); | |
} | |
} | |
return sum; | |
} | |
}; | |
char matriz[3][3]; | |
int linha, coluna; | |
bool fim = false; | |
bool vitoria = false; | |
bool velha = false; | |
void zera_matriz(){ | |
for (int i=0;i<3;i++){ | |
for (int j=0;j<3;j++){ | |
matriz[i][j]= '-'; | |
} | |
} | |
return; | |
} | |
void atualiza_tela(){ | |
//INICIO DO JOGO | |
system("clear"); | |
cout << "JOGO DA VELHA v0.1a" << endl << "Status:" << endl; | |
cout << " 1 2 3" << endl; | |
//IMPRIME MATRIZ | |
for (int i=0;i<3;i++){ | |
cout << i + 1; | |
for (int j=0;j<3;j++){ | |
cout << " | " << matriz[i][j] << " |"; | |
} | |
cout << endl << endl; | |
} | |
return; | |
} | |
void jogada(){ | |
jogada_inicio: | |
cout << "Digite o numero da linha que deseja jogar:" << endl; | |
cin >> linha; | |
cout << "Digite o numero da coluna que deseja jogar:" << endl; | |
cin >> coluna; | |
if (matriz[linha - 1][coluna - 1] == '-'){ | |
matriz[linha - 1][coluna - 1]= 'X';} | |
else {cout<< "A casa desejada ja esta ocupada. Escolha outra casa" << endl; | |
goto jogada_inicio; | |
} | |
return; | |
} | |
void computador(){ | |
inicio_computador: | |
srand (time(NULL)); | |
linha = rand() % 3; | |
coluna = rand() % 3; | |
if (matriz[linha][coluna] == '-') matriz[linha][coluna] = 'O'; | |
else goto inicio_computador; | |
return; | |
} | |
void analise_de_fim(){ | |
if (matriz[0][0] != '-' && matriz[0][0] == matriz[1][1] && matriz[0][0] == matriz[2][2]) {fim = true; if (matriz[0][0]== 'X'){vitoria = true;}} | |
if (matriz[2][0] != '-' && matriz[2][0] == matriz[1][1] && matriz[2][0] == matriz[0][2]) {fim = true; if (matriz[2][0]== 'X'){vitoria = true;}} | |
if (matriz[0][0] != '-' && matriz[0][0] == matriz[0][1] && matriz[0][0] == matriz[0][2]) {fim = true; if (matriz[0][0]== 'X'){vitoria = true;}} | |
if (matriz[1][0] != '-' && matriz[1][0] == matriz[1][1] && matriz[1][0] == matriz[1][2]) {fim = true; if (matriz[1][0]== 'X'){vitoria = true;}} | |
if (matriz[2][0] != '-' && matriz[2][0] == matriz[2][1] && matriz[2][0] == matriz[2][2]) {fim = true; if (matriz[2][0]== 'X'){vitoria = true;}} | |
if (matriz[0][0] != '-' && matriz[0][0] == matriz[1][0] && matriz[0][0] == matriz[2][0]) {fim = true; if (matriz[0][0]== 'X'){vitoria = true;}} | |
if (matriz[0][1] != '-' && matriz[0][1] == matriz[1][1] && matriz[0][1] == matriz[2][1]) {fim = true; if (matriz[0][1]== 'X'){vitoria = true;}} | |
if (matriz[0][2] != '-' && matriz[0][2] == matriz[1][2] && matriz[0][2] == matriz[2][2]) {fim = true; if (matriz[0][2]== 'X'){vitoria = true;}} | |
if (velha==true){fim=true;} | |
return; | |
} | |
void analise_de_velha(){ | |
for (int i=0;i<3;i++){ | |
for(int j=0;j<3;j++){ | |
if (matriz[i][j] == '-') return; | |
} | |
} | |
velha = true; | |
return; | |
} | |
int main(){ | |
zera_matriz(); | |
while (fim == false){ | |
atualiza_tela(); | |
jogada(); | |
atualiza_tela(); | |
analise_de_velha(); | |
analise_de_fim(); | |
if (fim==true) break; | |
computador(); | |
analise_de_velha(); | |
analise_de_fim(); | |
} | |
atualiza_tela(); | |
if (vitoria == true) {cout << "Parabens, voce ganhou!" << endl;} | |
else if (velha == false) {cout << "Infelizmente nao foi dessa vez..." << endl;} | |
else {cout << "HAHA, deu VELHA!!!!" << endl;} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment