Skip to content

Instantly share code, notes, and snippets.

@wdsrocha
Created June 12, 2023 18:15
Show Gist options
  • Save wdsrocha/7dd1a191870a075edf733cd8cd7b449b to your computer and use it in GitHub Desktop.
Save wdsrocha/7dd1a191870a075edf733cd8cd7b449b to your computer and use it in GitHub Desktop.
Joguinho que fiz em 2015 quando estava aprendendo a programar
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
using namespace std;
int game_mode, p1, p2, cpu = 0;
char opcao, nome1[50], nome2[50], ttt[3][3] = {{'_','_','_'},{'_','_','_'},{' ',' ',' '}}; // ttt = tic tac toe
bool game_over, restart = true, invalid = false;
char anim[19]={'J','O','G','O',' ','D','A',' ','V','E','L','H','A',' ','2','0','0','0',' '};
void fancy_menu()
{
cout << endl << " ";
for (int i = 0; i < 19; i++)
{
Sleep(50);
cout << "/";
Sleep(50);
cout << "\b-";
Sleep(50);
cout << "\b\\";
Sleep(50);
cout << "\b|";
Sleep(50);
cout << "\b" << anim[i];
}
Sleep(150);
cout << "--";
Sleep(150);
cout << " Criado por WesleySR\n";
Sleep(150);
cout << "\n 1. Jogador VS CPU";
Sleep(150);
cout << "\n 2. Jogador VS Jogador";
Sleep(150);
cout << "\n 3. Sair";
Sleep(150);
}
void jogar_novamente()
{
cout << "\n Jogar novamente(S/N)? ( )\b\b";
cin >> opcao;
if (opcao == 'N' || opcao == 'n')
restart = false;
else if (opcao == 'S' || opcao == 's') //Restarting the array
{
restart = true;
ttt[0][0] = '_';
ttt[0][1] = '_';
ttt[0][2] = '_';
ttt[1][0] = '_';
ttt[1][1] = '_';
ttt[1][2] = '_';
ttt[2][0] = ' ';
ttt[2][1] = ' ';
ttt[2][2] = ' ';
}
else //Repeating the question in case of wrong input by user
{
system("CLS");
jogar_novamente();
}
}
int main()
{
srand(time(0));//True random value
fancy_menu();
while (restart == true)//Repeating menu
{
system("CLS");
cout << "\n JOGO DA VELHA 2000 -- Criado por WesleySR\n";
cout << "\n 1. Jogador VS CPU"
<< "\n 2. Jogador VS Jogador"
<< "\n 3. Sair"
<< "\n\n O que deseja fazer? ";
cin >> game_mode;
system("CLS");
switch (game_mode)
{
case 1:
{
cout << "\n Nome do jogador: ";
cin >> nome1;
system("CLS");
cout << endl;
cout << " 7|8|9" << endl;
cout << " 4|5|6" << endl;
cout << " 1|2|3" << endl;
while (true)
{
for (int c = 0; c < 1; c++)//This will run only once if there are no problems ahead
{
game_over = false;
cout << endl << " " << nome1 << ": ";
cin >> p1;
switch (p1)
{
case 7:
if (ttt[0][0] == 'O' || ttt[0][0] == 'X') {c--; break;}//Stops player for inputing a repeated value
ttt[0][0] = 'X';
break;
case 8:
if (ttt[0][1] == 'O' || ttt[0][1] == 'X') {c--; break;}
ttt[0][1] = 'X';
break;
case 9:
if (ttt[0][2] == 'O' || ttt[0][2] == 'X') {c--; break;}
ttt[0][2] = 'X';
break;
case 4:
if (ttt[1][0] == 'O' || ttt[1][0] == 'X') {c--; break;}
ttt[1][0] = 'X';
break;
case 5:
if (ttt[1][1] == 'O' || ttt[1][1] == 'X') {c--; break;}
ttt[1][1] = 'X';
break;
case 6:
if (ttt[1][2] == 'O' || ttt[1][2] == 'X') {c--; break;}
ttt[1][2] = 'X';
break;
case 1:
if (ttt[2][0] == 'O' || ttt[2][0] == 'X') {c--; break;}
ttt[2][0] = 'X';
break;
case 2:
if (ttt[2][1] == 'O' || ttt[2][1] == 'X') {c--; break;}
ttt[2][1] = 'X';
break;
case 3:
if (ttt[2][2] == 'O') {c--; break;}
ttt[2][2] = 'X';
break;
default:
return 0;
}
system("CLS");
cout << endl;//Printing the result
cout << " " << ttt[0][0] << "|" << ttt[0][1] << "|" << ttt[0][2] << endl;
cout << " " << ttt[1][0] << "|" << ttt[1][1] << "|" << ttt[1][2] << endl;
cout << " " << ttt[2][0] << "|" << ttt[2][1] << "|" << ttt[2][2] << endl;
if ((ttt[0][0] == 'X' && ttt[0][1] == 'X' && ttt[0][2] == 'X') || (ttt[0][0] == 'X' && ttt[1][0] == 'X' && ttt[2][0] == 'X') ||
(ttt[1][0] == 'X' && ttt[1][1] == 'X' && ttt[1][2] == 'X') || (ttt[0][1] == 'X' && ttt[1][1] == 'X' && ttt[2][1] == 'X') ||
(ttt[2][0] == 'X' && ttt[2][1] == 'X' && ttt[2][2] == 'X') || (ttt[0][2] == 'X' && ttt[1][2] == 'X' && ttt[2][2] == 'X') ||
(ttt[0][0] == 'X' && ttt[1][1] == 'X' && ttt[2][2] == 'X') || (ttt[2][0] == 'X' && ttt[1][1] == 'X' && ttt[0][2] == 'X'))
{cout << endl << " " << nome1 << " venceu a partida!" << endl; game_over = true;} //Winning condition
else if ((ttt[0][0] != '_') && (ttt[0][1] != '_') && (ttt[0][2] != '_') &&
(ttt[1][0] != '_') && (ttt[1][1] != '_') && (ttt[1][2] != '_') &&
(ttt[2][0] != ' ') && (ttt[2][1] != ' ') && (ttt[2][2] != ' '))
{cout << endl << " O jogo empatou!" << endl; game_over = true;} //Drawing condition
}
if (game_over == true) break;
//CPU TURN
for (int c = 0; c < 1; c++)
{
cpu = 0;
//Conditions for CPU to block the player
if ((ttt[0][0] != 'O' && ttt[0][0] != 'X') && ( //Checking if it is not a marked spot
((ttt[0][1] == 'X') && (ttt[0][2] == 'X')) || //HORIZONTAL
((ttt[2][0] == 'X') && (ttt[1][0] == 'X')) || //VERTICAL
((ttt[2][2] == 'X') && (ttt[1][1] == 'X')))) //DIAGONAL
cpu = 7;//This is where the CPU will mark to block the player
if ((ttt[0][1] != 'O' && ttt[0][1] != 'X') && (
((ttt[0][0] == 'X') && (ttt[0][2] == 'X')) || //HORIZONTAL
((ttt[2][1] == 'X') && (ttt[1][1] == 'X')))) //VERTICAL
cpu = 8;
if ((ttt[0][2] != 'O' && ttt[0][2] != 'X') && (
((ttt[0][0] == 'X') && (ttt[0][1] == 'X')) || //HORIZONTAL
((ttt[2][2] == 'X') && (ttt[1][2] == 'X')) || //VERTICAL
((ttt[2][0] == 'X') && (ttt[1][1] == 'X')))) //DIAGONAL
cpu = 9;
if ((ttt[1][0] != 'O' && ttt[1][0] != 'X') && (
((ttt[1][1] == 'X') && (ttt[1][2] == 'X')) || //HORIZONTAL
((ttt[0][0] == 'X') && (ttt[2][0] == 'X')))) //VERTICAL
cpu = 4;
if ((ttt[1][1] != 'O' && ttt[1][1] != 'X') && (
((ttt[1][0] == 'X') && (ttt[1][2] == 'X')) || //HORIZONTAL
((ttt[0][1] == 'X') && (ttt[2][1] == 'X')) || //VERTICAL
((ttt[2][0] == 'X') && (ttt[0][2] == 'X')) || //DIAGONAL
((ttt[0][0] == 'X') && (ttt[2][2] == 'X')))) //DIAGONAL
cpu = 5;
if ((ttt[1][2] != 'O' && ttt[1][2] != 'X') && (
((ttt[1][0] == 'X') && (ttt[1][1] == 'X')) || //HORIZONTAL
((ttt[0][2] == 'X') && (ttt[2][2] == 'X')))) //VERTICAL
cpu = 6;
if ((ttt[2][0] != 'O' && ttt[2][0] != 'X') && (
((ttt[2][1] == 'X') && (ttt[2][2] == 'X')) || //HORIZONTAL
((ttt[0][0] == 'X') && (ttt[1][0] == 'X')) || //VERTICAL
((ttt[1][1] == 'X') && (ttt[0][2] == 'X')))) //DIAGONAL
cpu = 1;
if ((ttt[2][1] != 'O' && ttt[2][1] != 'X') && (
((ttt[2][0] == 'X') && (ttt[2][2] == 'X')) || //HORIZONTAL
((ttt[0][1] == 'X') && (ttt[1][1] == 'X')))) //VERTICAL
cpu = 2;
if ((ttt[2][2] != 'O' && ttt[2][2] != 'X') && (
((ttt[2][0] == 'X') && (ttt[2][1] == 'X')) || //HORIZONTAL
((ttt[0][2] == 'X') && (ttt[1][2] == 'X')) || //VERTICAL
((ttt[0][0] == 'X') && (ttt[1][1] == 'X')))) //DIAGONAL
cpu = 3;
//Conditions for CPU to win, instead of just blocking the player
if ((ttt[0][0] != 'O' && ttt[0][0] != 'X') && (
((ttt[0][1] == 'O') && (ttt[0][2] == 'O')) || //HORIZONTAL
((ttt[2][0] == 'O') && (ttt[1][0] == 'O')) || //VERTICAL
((ttt[2][2] == 'O') && (ttt[1][1] == 'O')))) //DIAGONAL
cpu = 7;
if ((ttt[0][1] != 'O' && ttt[0][1] != 'X') && (
((ttt[0][0] == 'O') && (ttt[0][2] == 'O')) || //HORIZONTAL
((ttt[2][1] == 'O') && (ttt[1][1] == 'O')))) //VERTICAL
cpu = 8;
if ((ttt[0][2] != 'O' && ttt[0][2] != 'X') && (
((ttt[0][0] == 'O') && (ttt[0][1] == 'O')) || //HORIZONTAL
((ttt[2][2] == 'O') && (ttt[1][2] == 'O')) || //VERTICAL
((ttt[2][0] == 'O') && (ttt[1][1] == 'O')))) //DIAGONAL
cpu = 9;
if ((ttt[1][0] != 'O' && ttt[1][0] != 'X') && (
((ttt[1][1] == 'O') && (ttt[1][2] == 'O')) || //HORIZONTAL
((ttt[0][0] == 'O') && (ttt[2][0] == 'O')))) //VERTICAL
cpu = 4;
if ((ttt[1][1] != 'O' && ttt[1][1] != 'X') && (
((ttt[1][0] == 'O') && (ttt[1][2] == 'O')) || //HORIZONTAL
((ttt[0][1] == 'O') && (ttt[2][1] == 'O')) || //VERTICAL
((ttt[2][0] == 'O') && (ttt[0][2] == 'O')) || //DIAGONAL
((ttt[0][0] == 'O') && (ttt[2][2] == 'O')))) //DIAGONAL
cpu = 5;
if ((ttt[1][2] != 'O' && ttt[1][2] != 'X') && (
((ttt[1][0] == 'O') && (ttt[1][1] == 'O')) || //HORIZONTAL
((ttt[0][2] == 'O') && (ttt[2][2] == 'O')))) //VERTICAL
cpu = 6;
if ((ttt[2][0] != 'O' && ttt[2][0] != 'X') && (
((ttt[2][1] == 'O') && (ttt[2][2] == 'O')) || //HORIZONTAL
((ttt[0][0] == 'O') && (ttt[1][0] == 'O')) || //VERTICAL
((ttt[1][1] == 'O') && (ttt[0][2] == 'O')))) //DIAGONAL
cpu = 1;
if ((ttt[2][1] != 'O' && ttt[2][1] != 'X') && (
((ttt[2][0] == 'O') && (ttt[2][2] == 'O')) || //HORIZONTAL
((ttt[0][1] == 'O') && (ttt[1][1] == 'O')))) //VERTICAL
cpu = 2;
if ((ttt[2][2] != 'O' && ttt[2][2] != 'X') && (
((ttt[2][0] == 'O') && (ttt[2][1] == 'O')) || //HORIZONTAL
((ttt[0][2] == 'O') && (ttt[1][2] == 'O')) || //VERTICAL
((ttt[0][0] == 'O') && (ttt[1][1] == 'O')))) //DIAGONAL
cpu = 3;
if (cpu == 0) cpu = 1 + (rand() % 9);//If there are no places to block, CPU will pick a random unmarked spot
switch (cpu)
{
case 7:
if (ttt[0][0] == 'O' || ttt[0][0] == 'X') {c--; break;}
ttt[0][0] = 'O';
break;
case 8:
if (ttt[0][1] == 'O' || ttt[0][1] == 'X') {c--; break;}
ttt[0][1] = 'O';
break;
case 9:
if (ttt[0][2] == 'O' || ttt[0][2] == 'X') {c--; break;}
ttt[0][2] = 'O';
break;
case 4:
if (ttt[1][0] == 'O' || ttt[1][0] == 'X') {c--; break;}
ttt[1][0] = 'O';
break;
case 5:
if (ttt[1][1] == 'O' || ttt[1][1] == 'X') {c--; break;}
ttt[1][1] = 'O';
break;
case 6:
if (ttt[1][2] == 'O' || ttt[1][2] == 'X') {c--; break;}
ttt[1][2] = 'O';
break;
case 1:
if (ttt[2][0] == 'O' || ttt[2][0] == 'X') {c--; break;}
ttt[2][0] = 'O';
break;
case 2:
if (ttt[2][1] == 'O' || ttt[2][1] == 'X') {c--; break;}
ttt[2][1] = 'O';
break;
case 3:
if (ttt[2][2] == 'O' || ttt[2][2] == 'X') {c--; break;}
ttt[2][2] = 'O';
break;
default:
return 0;
}
system("CLS");
cout << endl;
cout << " " << ttt[0][0] << "|" << ttt[0][1] << "|" << ttt[0][2] << endl;
cout << " " << ttt[1][0] << "|" << ttt[1][1] << "|" << ttt[1][2] << endl;
cout << " " << ttt[2][0] << "|" << ttt[2][1] << "|" << ttt[2][2] << endl;
if ((ttt[0][0] == 'O' && ttt[0][1] == 'O' && ttt[0][2] == 'O') || (ttt[0][0] == 'O' && ttt[1][0] == 'O' && ttt[2][0] == 'O') ||
(ttt[1][0] == 'O' && ttt[1][1] == 'O' && ttt[1][2] == 'O') || (ttt[0][1] == 'O' && ttt[1][1] == 'O' && ttt[2][1] == 'O') ||
(ttt[2][0] == 'O' && ttt[2][1] == 'O' && ttt[2][2] == 'O') || (ttt[0][2] == 'O' && ttt[1][2] == 'O' && ttt[2][2] == 'O') ||
(ttt[0][0] == 'O' && ttt[1][1] == 'O' && ttt[2][2] == 'O') || (ttt[2][0] == 'O' && ttt[1][1] == 'O' && ttt[0][2] == 'O'))
{cout << endl << " CPU venceu a partida!" << endl; game_over = true;}
else if ((ttt[0][0] != '_') && (ttt[0][1] != '_') && (ttt[0][2] != '_') &&
(ttt[1][0] != '_') && (ttt[1][1] != '_') && (ttt[1][2] != '_') &&
(ttt[2][0] != ' ') && (ttt[2][1] != ' ') && (ttt[2][2] != ' '))
{cout << endl << " O jogo empatou!" << endl; game_over = true;}
}
if (game_over == true) break;
}
break;
}
case 2: // Jogador VS Jogador
{
cout << "\n Nome do primeiro jogador: ";
cin >> nome1;
cout << "\n Nome do segundo jogador : ";
cin >> nome2;
system("CLS");
cout << endl;
cout << " 7|8|9" << endl;
cout << " 4|5|6" << endl;
cout << " 1|2|3" << endl;
while (true)
{
for (int c = 0; c < 1; c++)
{
game_over = false;
cout << endl << " " << nome1 << ": ";
cin >> p1;
switch (p1)
{
case 7:
if (ttt[0][0] == 'O' || ttt[0][0] == 'X') {c--; break;}
ttt[0][0] = 'X';
break;
case 8:
if (ttt[0][1] == 'O' || ttt[0][1] == 'X') {c--; break;}
ttt[0][1] = 'X';
break;
case 9:
if (ttt[0][2] == 'O' || ttt[0][2] == 'X') {c--; break;}
ttt[0][2] = 'X';
break;
case 4:
if (ttt[1][0] == 'O' || ttt[1][0] == 'X') {c--; break;}
ttt[1][0] = 'X';
break;
case 5:
if (ttt[1][1] == 'O' || ttt[1][1] == 'X') {c--; break;}
ttt[1][1] = 'X';
break;
case 6:
if (ttt[1][2] == 'O' || ttt[1][2] == 'X') {c--; break;}
ttt[1][2] = 'X';
break;
case 1:
if (ttt[2][0] == 'O' || ttt[2][0] == 'X') {c--; break;}
ttt[2][0] = 'X';
break;
case 2:
if (ttt[2][1] == 'O' || ttt[2][1] == 'X') {c--; break;}
ttt[2][1] = 'X';
break;
case 3:
if (ttt[2][2] == 'O') {c--; break;}
ttt[2][2] = 'X';
break;
default:
return 0;
}
system("CLS");
cout << endl;
cout << " " << ttt[0][0] << "|" << ttt[0][1] << "|" << ttt[0][2] << endl;
cout << " " << ttt[1][0] << "|" << ttt[1][1] << "|" << ttt[1][2] << endl;
cout << " " << ttt[2][0] << "|" << ttt[2][1] << "|" << ttt[2][2] << endl;
if ((ttt[0][0] == 'X' && ttt[0][1] == 'X' && ttt[0][2] == 'X') || (ttt[0][0] == 'X' && ttt[1][0] == 'X' && ttt[2][0] == 'X') ||
(ttt[1][0] == 'X' && ttt[1][1] == 'X' && ttt[1][2] == 'X') || (ttt[0][1] == 'X' && ttt[1][1] == 'X' && ttt[2][1] == 'X') ||
(ttt[2][0] == 'X' && ttt[2][1] == 'X' && ttt[2][2] == 'X') || (ttt[0][2] == 'X' && ttt[1][2] == 'X' && ttt[2][2] == 'X') ||
(ttt[0][0] == 'X' && ttt[1][1] == 'X' && ttt[2][2] == 'X') || (ttt[2][0] == 'X' && ttt[1][1] == 'X' && ttt[0][2] == 'X'))
{cout << endl << " " << nome1 << " venceu a partida!" << endl; game_over = true;}
else if ((ttt[0][0] != '_') && (ttt[0][1] != '_') && (ttt[0][2] != '_') &&
(ttt[1][0] != '_') && (ttt[1][1] != '_') && (ttt[1][2] != '_') &&
(ttt[2][0] != ' ') && (ttt[2][1] != ' ') && (ttt[2][2] != ' '))
{cout << endl << " O jogo empatou!" << endl; game_over = true;}
}
if (game_over == true) break;
for (int c = 0; c < 1; c++)
{
cout << endl << " " << nome2 << ": ";
cin >> p2;
switch (p2)
{
case 7:
if (ttt[0][0] == 'O' || ttt[0][0] == 'X') {c--; break;}
ttt[0][0] = 'O';
break;
case 8:
if (ttt[0][1] == 'O' || ttt[0][1] == 'X') {c--; break;}
ttt[0][1] = 'O';
break;
case 9:
if (ttt[0][2] == 'O' || ttt[0][2] == 'X') {c--; break;}
ttt[0][2] = 'O';
break;
case 4:
if (ttt[1][0] == 'O' || ttt[1][0] == 'X') {c--; break;}
ttt[1][0] = 'O';
break;
case 5:
if (ttt[1][1] == 'O' || ttt[1][1] == 'X') {c--; break;}
ttt[1][1] = 'O';
break;
case 6:
if (ttt[1][2] == 'O' || ttt[1][2] == 'X') {c--; break;}
ttt[1][2] = 'O';
break;
case 1:
if (ttt[2][0] == 'O' || ttt[2][0] == 'X') {c--; break;}
ttt[2][0] = 'O';
break;
case 2:
if (ttt[2][1] == 'O' || ttt[2][1] == 'X') {c--; break;}
ttt[2][1] = 'O';
break;
case 3:
if (ttt[2][2] == 'O' || ttt[2][2] == 'X') {c--; break;}
ttt[2][2] = 'O';
break;
default:
return 0;
}
system("CLS");
cout << endl;
cout << " " << ttt[0][0] << "|" << ttt[0][1] << "|" << ttt[0][2] << endl;
cout << " " << ttt[1][0] << "|" << ttt[1][1] << "|" << ttt[1][2] << endl;
cout << " " << ttt[2][0] << "|" << ttt[2][1] << "|" << ttt[2][2] << endl;
if ((ttt[0][0] == 'O' && ttt[0][1] == 'O' && ttt[0][2] == 'O') || (ttt[0][0] == 'O' && ttt[1][0] == 'O' && ttt[2][0] == 'O') ||
(ttt[1][0] == 'O' && ttt[1][1] == 'O' && ttt[1][2] == 'O') || (ttt[0][1] == 'O' && ttt[1][1] == 'O' && ttt[2][1] == 'O') ||
(ttt[2][0] == 'O' && ttt[2][1] == 'O' && ttt[2][2] == 'O') || (ttt[0][2] == 'O' && ttt[1][2] == 'O' && ttt[2][2] == 'O') ||
(ttt[0][0] == 'O' && ttt[1][1] == 'O' && ttt[2][2] == 'O') || (ttt[2][0] == 'O' && ttt[1][1] == 'O' && ttt[0][2] == 'O'))
{cout << endl << " " << nome2 << " venceu a partida!" << endl; game_over = true;}
else if ((ttt[0][0] != '_') && (ttt[0][1] != '_') && (ttt[0][2] != '_') &&
(ttt[1][0] != '_') && (ttt[1][1] != '_') && (ttt[1][2] != '_') &&
(ttt[2][0] != ' ') && (ttt[2][1] != ' ') && (ttt[2][2] != ' '))
{cout << endl << " O jogo empatou!" << endl; game_over = true;}
}
if (game_over == true) break;
}
break;
}
case 3: // Sair
{
cout << "\n Adeus!\n";
return 0;
}
default:
invalid = true;
}
if (invalid == false)
jogar_novamente();
}
system("CLS");
cout << "\n Adeus!\n";
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment