Skip to content

Instantly share code, notes, and snippets.

@vsdsantos
Forked from lucask125/jogo_da_veia.cpp
Last active November 6, 2016 02:47
Show Gist options
  • Save vsdsantos/25e1d712b1b193402f33bbf70289f442 to your computer and use it in GitHub Desktop.
Save vsdsantos/25e1d712b1b193402f33bbf70289f442 to your computer and use it in GitHub Desktop.
#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