22 de outubro de 2010

Algoritmo e Programação: Jogo da velha em C.

No post de hoje veremos um exemplo simples de jogo da velha em C utilizando matrizes bidimensionais, onde você entra com duas coordenadas e o programa imprimirá o local onde você marcou X, ou até mesmo o O, até que o complete. Veja abaixo: 


  1. #include <stdio.h>

  2. int main()
  3. {
  4.      char velha[3][3];
  5.      int linha, coluna;
  6.      for(linha = 0; linha < 3; linha++)
  7.      {
  8.            for(coluna = 0; coluna < 3; coluna++)
  9.            {
  10.            velha[linha][coluna] = ' ';
  11.            }
  12.      }
  13.      int jogada = 0;
  14.      while(1)
  15.      {
  16.           printf("Digite as coordenadas:\n");
  17.           int i, j;
  18.           scanf("%d %d", &i, &j);
  19.           if(velha[i][j] != ' ')
  20.           {
  21.                    printf("Posicao ocupada!! Tente de novo.\n");
  22.                    continue;
  23.           }

  24.      if(jogada%2 == 0) 
  25.      {
  26.            velha[i][j] = 'x';
  27.      }
  28.      else {
  29.                 velha[i][j] = 'o';
  30.             }
  31.      for(linha = 0; linha < 3; linha++)
  32.      {
  33.           printf("|");
  34.           for(coluna = 0; coluna < 3; coluna++)
  35.           {
  36.                 printf("%c|", velha[linha][coluna]);
  37.           }
  38.           printf("\n");
  39.           // Linhas
  40.           if(velha[0][0] == velha[0][1] && velha[0][1] == velha[0][2] && velha[0][0] != ' ')
  41.           {
  42.                    printf("O jogador %c ganhou.\n", velha[0][0]);
  43.                    break;
  44.           }
  45.           else if(velha[1][0] == velha[1][1] && velha[1][1] == velha[1][2] && velha[1][0] != ' ')
  46.           {
  47.           printf("O jogador %c ganhou.\n", velha[1][0]);
  48.           break;
  49.           }
  50.           else if(velha[2][0] == velha[2][1] && velha[2][1] == velha[2][2] && velha[2][0] != ' ')
  51.           {
  52.                 printf("O jogador %c ganhou.\n", velha[2][0]);
  53.                 break;
  54.           }

  55. // Colunas
  56.   else if(velha[0][0] == velha[1][0] && velha[1][0] ==                 velha[2][0] && velha[0][0] != ' ')
  57.           {
  58.                  printf("O jogador %c ganhou.\n", velha[0][0]);
  59.                  break;
  60.           }
  61.           else if(velha[0][1] == velha[1][1] && velha[1][1] == velha[2][1] && velha[0][1] != ' ')
  62.          {
  63.                  printf("O jogador %c ganhou.\n", velha[0][1]);
  64.                  break;
  65.           }
  66.           else if(velha[0][2] == velha[1][2] && velha[1][2] == velha[2][2] && velha[0][2] != ' ')
  67.           {
  68.                   printf("O jogador %c ganhou.\n", velha[0][2]);
  69.                   break;
  70.           }

  71. // Diagonais
  72.    else if(velha[0][0] == velha[1][1] && velha[1][1] == velha[2][2] && velha[0][0] != ' ')
  73.           {
  74.                   printf("O jogador %c ganhou.\n", velha[0][0]);
  75.                   break;
  76.           }
  77.           else if(velha[2][0] == velha[1][1] && velha[1][1] == velha[0][2] && velha[2][0] != ' ')
  78.           {
  79.                   printf("O jogador %c ganhou.\n", velha[2][0]);
  80.                   break;
  81.           }
  82.           jogada++;
  83.           }
  84.  
  85.  return 0;
  86. }
           
            
        


       
  


   



   

7 comentários:

EnigmA disse...

Tá faltando um laço de repetição para fazer com que aceite a jogada do outro jogador..
Pq na primeira coordenada que coloca o programa fecha. :/

PS. tá faltando uma chave depois do return 0
VAlew..

Poxa.. só critiquei.. foi mal mas o blog de você é MUIIITO bom!
Parabéns!
Favoritei já!

Anônimo disse...

é só tirar o return 0;

Leonardo Redaelli disse...

}

int jogar_jogador() {
int jogada;
char *simbolo = "X";
cout << "Sua vez: ";
jogada = obter_jogada();
preenche_jogada(jogada, simbolo);
desenha_velha();
return jogada;
}

void galho(int primeira_decisao, int primeira_chance, int segunda_decisao, int segunda_chance, int ultima_jogada) {
int jogada;
jogar_computador(primeira_decisao);
jogada = jogar_jogador();
if (jogada == primeira_chance) {
jogar_computador(segunda_decisao);
jogada = jogar_jogador();
if (jogada == segunda_chance) {
jogar_computador(ultima_jogada);
} else {
jogar_computador(segunda_chance);
}
} else {
jogar_computador(primeira_chance);
}
}

int game_loop() {
int jogada;
desenha_velha();

jogar_computador(1);
jogada = jogar_jogador();

if (jogada == 2 or jogada == 3) {
galho(7, 4, 9, 5, 8);
} else if (jogada == 4 or jogada == 7) {
galho(3, 2, 9, 5, 6);
} else if (jogada == 6 or jogada == 8) {
galho(3, 2, 5, 7, 9);
} else if (jogada == 9) {
galho(3, 2, 7, 5, 4);
} else if (jogada == 5) {
jogar_computador(9);
jogada = jogar_jogador();
if (jogada == 3) {
jogar_computador(7);
jogada = jogar_jogador();
if (jogada == 4) {
jogar_computador(8);
} else {
jogar_computador(4);
}
} else if (jogada == 7){
jogar_computador(3);
jogada = jogar_jogador();
if (jogada == 2) {
jogar_computador(6);
} else {
jogar_computador(2);
}
} else if (jogada == 2){
jogar_computador(8);
jogada = jogar_jogador();
if (jogada == 7) {
jogar_computador(3);
jogada = jogar_jogador();
//bloco velha
if (jogada == 6) {
jogar_computador(4);
return 1;
} else {
jogar_computador(6);
}
} else {
jogar_computador(7);
}
} else if (jogada == 4){
jogar_computador(6);
jogada = jogar_jogador();
if (jogada == 3) {
jogar_computador(7);
jogada = jogar_jogador();
//bloco velha
if (jogada == 8) {
jogar_computador(2);
return 1;
} else {
jogar_computador(8);
}
} else {
jogar_computador(3);
}
} else if (jogada == 6){
jogar_computador(4);
jogada = jogar_jogador();
if (jogada == 7) {
jogar_computador(3);
jogada = jogar_jogador();
//bloco velha
if (jogada == 2) {
jogar_computador(8);
return 1;
} else {
jogar_computador(2);
}
} else {
jogar_computador(7);
}
} else if (jogada == 8){
jogar_computador(2);
jogada = jogar_jogador();
if (jogada == 3) {
jogar_computador(7);
jogada = jogar_jogador();
//bloco velha
if (jogada == 4) {
jogar_computador(6);
return 1;
} else {
jogar_computador(4);
}
} else {
jogar_computador(3);
}
}
}
return 0;
}

int main() {
int resultado;
resultado = game_loop();
if (resultado == 0) {
cout << "O computador venceu.\n";
} else {
cout << "Deu velha.\n";
}
return 0;
}

Leonardo Redaelli disse...

#include
#include
#include
#include
using namespace std;

char *velha[3][3] = {{"1", "2", "3"}, {"4", "5", "6"}, {"7", "8", "9"}};
vector jogados;

void desenha_velha() {
cout << velha[0][0] << " | " << velha[0][1] << " | " << velha[0][2] << "\n";
cout << velha[1][0] << " | " << velha[1][1] << " | " << velha[1][2] << "\n";
cout << velha[2][0] << " | " << velha[2][1] << " | " << velha[2][2] << "\n";
}

int obter_jogada() {
char entrada;
int jogada;
while (true) {
cin >> entrada;
cout << entrada << "\n";
jogada = (int)entrada - 48;
if (std::find(jogados.begin(), jogados.end(), jogada) != jogados.end()) {
cout << "Posicao " << jogada << " já foi jogado.\n";
} else if (jogada >= 1 and jogada <= 9) {
break;
} else {
cout << "Jogada invalida.\n";
}
cout << "Escolha outra posicao: ";
}
jogados.push_back(jogada);
return jogada;
}

void preenche_jogada(int jogada, char *simbolo){
if (jogada >= 1 and jogada <= 3) {
velha[0][jogada-1] = simbolo;
} else if (jogada >= 4 and jogada <= 6) {
velha[1][jogada-4] = simbolo;
} else if (jogada >= 7 and jogada <= 9) {
velha[2][jogada-7] = simbolo;
}
}

void jogar_computador(int jogada) {
char* simbolo = "O";
cout << "Vez do computador.\n";
preenche_jogada(jogada, simbolo);
jogados.push_back(jogada);
desenha_velha();

Leonardo Redaelli disse...

#include < iostream >
#include < sstream >
#include < vector >
#include < algorithm >

Anônimo disse...

Dificil...Mais não é impossivel ;

leo disse...

não...

Postar um comentário

 
Design by @cleidimarviana | Bloggerized by Cleidimar Viana - Diário de Sistema