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; }