Jump to content
Sign in to follow this  
netinhocqc

Jogo da Velha

Recommended Posts

netinhocqc

Boa Tarde! tenho um trabalho em C, é para fazer um jogo da velha, só que estou com um problema não cosigo fazer com que o segundo usuário insira dados na tabela. Quando eu insiro outro usuário a matriz duplica, alguma ideia?

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

char matriz[3][3] = { };// Variável Global
char jogador1, jogador2;


void play1();
void play2();
void mostra();
void limpar_jogo();

int main(){
    float cont = 0;
    limpar_jogo();
    printf("Jogador 1 quer joga com 'X' ou 'O': ");
    scanf("%c",&jogador1);
    if(jogador1 == 'x')
    {
       jogador2 = 'O';
       }
    else
    {
      jogador2 = 'X';
      }  
    printf("O Jogodor 1 joga com %c\nJogador 2 joga com %c\n\n",jogador1,jogador2); 
    do{
       cont++;                         
       play1();
       play2(); 
     }while(cont != 4);                 
    getch();
}


void play1(){
     int x,y;
     printf("Digite a linha: ");
     scanf("%i",&x);
     printf("Digite a coluna: ");
     scanf("%i",&y);
     matriz[x][y] = jogador1;
     system("cls");
     mostra();      
}                              

void limpar_jogo() {
  int i,j;
  for(i=0;i<3;i++){
      for(j=0;j<3;j++){
         matriz[i][j]= ' ';
      }
  }
}

                
void mostra(){
          printf("%c  | %c  |%c\n",matriz[0][0],matriz[0][1],matriz[0][2]);
          printf("___|____|___ \n");
          printf("%c  | %c  |%c\n",matriz[1][0],matriz[1][1],matriz[1][2]);
          printf("___|____|___\n");
          printf("%c  | %c  |%c\n",matriz[2][0],matriz[2][1],matriz[2][2]);
          printf("   |    |   \n");
          
       
}

Share this post


Link to post
Share on other sites
mundo

Antes de mais peço te que uses tag code.

Já percebi que estás a trabalhar em windows, SO que odeio lol, e que se fores a correr esse programar em sistemas unix por exemplo não irá compilar.

Como também ainda ando a aprender C vou tentar ajudar, se disser alguma asneira peço desculpa e corrijam-me,

A primeira vista penso que tens um erro nesta linha

Nesta linha, tu pretendes que ele interpete apenas 'X' e 'O' ou queres incluir 'x' e 'o'?

Pois estás só a comparar com letra minuscula.

Depois onde tens definida a função play2()?

Share this post


Link to post
Share on other sites
pikax

Boa Tarde! tenho um trabalho em C, é para fazer um jogo da velha, só que estou com um problema não cosigo fazer com que o segundo usuário insira dados na tabela. Quando eu insiro outro usuário a matriz duplica, alguma ideia?

Eu adicionei a função que faltava a play2, que é um copy & paste da play1, e não vi a matriz multiplicada  :P

void play1(){
     int x,y;
     printf("Jogador 1\n");
     printf("Digite a linha: ");
     scanf("%i",&x);
     printf("Digite a coluna: ");
     scanf("%i",&y);
     matriz[x][y] = jogador1;
     system("cls");
     mostra();
}
void play2(){
     int x,y;
     printf("Jogador 2\n");
     printf("Digite a linha: ");
     scanf("%i",&x);
     printf("Digite a coluna: ");
     scanf("%i",&y);
     matriz[x][y] = jogador2;
     system("cls");
     mostra();
}

Acho que era melhor meteres ai uns controlos de erros e ver se o utilizador ganhou ou não :D

Já percebi que estás a trabalhar em windows, SO que odeio lol, e que se fores a correr esse programar em sistemas unix por exemplo não irá compilar.

Já não programo em linux à algum pó muito tempo, e penso que compila, só o system("cls") é que não irá funcionar tem-se que usar o system("clear").

E já agora não é muito bom utilizar a Função system(), seja em linux ou em windows, já que esta função vai aos comandos da consola do OS para ir buscar a função desejada, neste caso e no Windows é o CLS, e no caso do Linux é o CLEAR, mesmo que escrevesses CLEAR iria ser código especifico para Linux e não para Windows.

Para fazer um código portable para as ambas as plataformas, tens várias opções como criar uma função chamada por exemplo: clear_console(), que irá ter uma MACRO a verificar o OS e usar o system com o comando certo.

Também poderias fazer uma função que fizesse N de '\n' até que o o buffer do stdout esteja vazio.

Já agora não estou aqui para discutir qual é o melhor OS nem qual é o melhor para programar, já que é uma discussão futil e que não vai dar a lugar nenhum. Existem vantagens e desvantagens nos 2/3 OS.

Como também ainda ando a aprender C vou tentar ajudar, se disser alguma asneira peço desculpa e corrijam-me,

A primeira vista penso que tens um erro nesta linha

Nesta linha, tu pretendes que ele interpete apenas 'X' e 'O' ou queres incluir 'x' e 'o'?

Pois estás só a comparar com letra minuscula.

Se verificares o if dele verás que ele só irá verificar se for a letra 'x' então o jogador2 será 'O' senão será 'X'(independentemente do caracter do player1), por isso isto tem falhas, mas o erro não é daqui.

Depois onde tens definida a função play2()?

A função seguindo a lógica do programa é uma função igualzinha à play1, só que muda o jogador, por isso como postei em cima, é bastante fácil criar esta função, mas o netinhocqc deveria ter posto aqui a função play2 para facilitar.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
mundo

Habitualmente eu uso uma macro por causa do caso de portabilidade de código.

Ps: baderous sei que o moço não tinhas os tag code e para a próxima deveria usar, não sei se o mal e do meu iPhone mas penso que apagas te algum código com o edit do post xD

Cumprimentos

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.