Seja muito bem vindo à aula 127 do nosso curso gratuito de programação com a linguagem C.
Vamos criar o jogo da velha?
Exercício 16) Faça um programa para jogar o jogo da velha. Ao final imprima o resultado do jogo e pergunte se deseja jogar novamente.
Este exercício é muito interessante para convencer aqueles que ainda não se convenceram da necessidade de pensar estratégias, elaborar uma sequência de passos para resolver o problema, antes de sair loucamente digitando linhas de código.
Para o problema do jogo da velha, uma lista dos possíveis passos a serem seguidos pode ser:
1 – qual estrutura de dados será utilizada?
2 – como inicializar nossa estrutura de dados?
3 – imprimir jogo (tabuleiro)
4 – ler coordenadas
5 – salvar coordenadas
6 – alguém ganhou por linha?
7 – alguém ganhou por coluna?
8 – alguém ganhou na diagonal principal?
9 – alguém ganhou na diagonal secundária?
10 – repetir os passos a partir de 3 até alguém ganhar ou atingir 9 jogadas.
#include <stdio.h>
#include <stdlib.h>
int main(){
// estrutura de dados?
int l, c, linha, coluna, jogador, ganhou, jogadas, opcao;
char jogo[3][3];
do{ // deseja jogar novamente?
jogador = 1;
ganhou = 0;
jogadas = 0;
// como inicializar nossa estrutura de dados?
for(l = 0; l < 3; l++){
for(c = 0; c < 3; c++){
jogo[l][c] = ' ';
}
}
do{ // repete até alguém ganhar ou atingir 9 jogadas
// imprimir jogo
printf("\n\n\t 0 1 2\n\n");
for(l = 0; l < 3; l++){
for(c = 0; c < 3; c++){
if(c == 0)
printf("\t");
printf(" %c ", jogo[l][c]);
if(c < 2)
printf("|");
if(c == 2)
printf(" %d", l);
}
if(l < 2)
printf("\n\t-----------");
printf("\n");
}
// ler coordenadas
do{
printf("\n\JOGADOR 1 = 0\nJOGADOR 2 = X\n");
printf("\nJOGADOR %d: Digite a linha e a coluna que deseja jogar: ", jogador);
scanf("%d%d", &linha, &coluna);
}while(linha < 0 || linha > 2 || coluna < 0 || coluna > 2 || jogo[linha][coluna] != ' ');
// salvar coordenadas
if(jogador == 1){
jogo[linha][coluna] = '0';
jogador++;
}
else{
jogo[linha][coluna] = 'X';
jogador = 1;
}
jogadas++;
// alguém ganhou por linha
if(jogo[0][0] == '0' && jogo[0][1] == '0' && jogo[0][2] == '0' ||
jogo[1][0] == '0' && jogo[1][1] == '0' && jogo[1][2] == '0' ||
jogo[2][0] == '0' && jogo[2][1] == '0' && jogo[2][2] == '0'){
printf("\nParabens! O jogador 1 venceu por linha!\n");
ganhou = 1;
}
if(jogo[0][0] == 'X' && jogo[0][1] == 'X' && jogo[0][2] == 'X' ||
jogo[1][0] == 'X' && jogo[1][1] == 'X' && jogo[1][2] == 'X' ||
jogo[2][0] == 'X' && jogo[2][1] == 'X' && jogo[2][2] == 'X'){
printf("\nParabens! O jogador 2 venceu por linha!\n");
ganhou = 1;
}
// alguém ganhou por coluna
if(jogo[0][0] == '0' && jogo[1][0] == '0' && jogo[2][0] == '0' ||
jogo[0][1] == '0' && jogo[1][1] == '0' && jogo[2][1] == '0' ||
jogo[0][2] == '0' && jogo[1][2] == '0' && jogo[2][2] == '0'){
printf("\nParabens! O jogador 1 venceu por coluna!\n");
ganhou = 1;
}
if(jogo[0][0] == 'X' && jogo[1][0] == 'X' && jogo[2][0] == 'X' ||
jogo[0][1] == 'X' && jogo[1][1] == 'X' && jogo[2][1] == 'X' ||
jogo[0][2] == 'X' && jogo[1][2] == 'X' && jogo[2][2] == 'X'){
printf("\nParabens! O jogador 2 venceu por coluna!\n");
ganhou = 1;
}
// alguém ganhou na diagonal principal
if(jogo[0][0] == '0' && jogo[1][1] == '0' && jogo[2][2] == '0'){
printf("\nParabens! O jogador 1 venceu na diag. principal!\n");
ganhou = 1;
}
if(jogo[0][0] == 'X' && jogo[1][1] == 'X' && jogo[2][2] == 'X'){
printf("\nParabens! O jogador 2 venceu na diag. principal!\n");
ganhou = 1;
}
// alguém ganhou na diagonal secundária
if(jogo[0][2] == '0' && jogo[1][1] == '0' && jogo[2][0] == '0'){
printf("\nParabens! O jogador 1 venceu na diag. secindaria!\n");
ganhou = 1;
}
if(jogo[0][2] == 'X' && jogo[1][1] == 'X' && jogo[2][0] == 'X'){
printf("\nParabens! O jogador 2 venceu na diag. secundaria!\n");
ganhou = 1;
}
}while(ganhou == 0 && jogadas < 9);
// imprimir jogo
printf("\n\n\t 0 1 2\n\n");
for(l = 0; l < 3; l++){
for(c = 0; c < 3; c++){
if(c == 0)
printf("\t");
printf(" %c ", jogo[l][c]);
if(c < 2)
printf("|");
if(c == 2)
printf(" %d", l);
}
if(l < 2)
printf("\n\t-----------");
printf("\n");
}
if(ganhou == 0)
printf("\nO jogo finalizou sem gamhador!\n");
printf("\nDigite 1 para jogar novamente: \n");
scanf("%d", &opcao);
}while(opcao == 1);
return 0;
}
