Ir ao conteúdo
  • Cadastre-se

Ajuda 0


Fabiani

Posts recomendados

Oi, eu tenho um trabalho de implementação para fazer, tenho que montar um jogo Othello/Reversi. Uma breve explicação sobre o jogo: "É  jogo para dois jogadores , jogado em um Tabuleiro de 8x8 onde inicialmente são colocadas 4 peças ao centro , duas de cada cor em diagonais onde a peça preta faz sempre o primeiro movimento e os jogadores jogam alternadamente , o jogo tem como meta capturar as peças adversárias e transformá-las nas da sua cor , vence quem tiver mais peças ao seu favor no final da partida . O jogo acaba quando não há mais casas a se jogarem dentro do tabuleiro ou quando não houver mais jogadas possíveis dentro das regras para ambos os jogadores. Partindo da Premissa de que para reverter uma ou mais peças adversárias é necessários que a cerquem em Diagonais , Verticais ou Horizontais , ou seja ... Cercando de ambos os lados das peças a serem capturadas com 2 peças de cada lado. "
 
Então eu cheguei nisso:
 

#include <stdio.h>#define TAM 9 char tab[TAM][TAM];char letra;int numero; void fazer_tabela(char tab[TAM][TAM]){int i,j;for (i=0;i<TAM+1;i++){for(j=0;j<TAM+1;j++){tab[i][j]='.';}}tab[0][0] = ' ';tab[1][0] = '1';    tab[2][0] = '2';tab[3][0] = '3';tab[4][0] = '4';tab[5][0] = '5';tab[6][0] = '6'; tab[7][0] = '7';tab[8][0] = '8';   tab[0][1] = 'A';    tab[0][2] = 'B';tab[0][3] = 'C';tab[0][4] = 'D';tab[0][5] = 'E';tab[0][6] = 'F';tab[0][7] = 'G';tab[0][8] = 'H'; tab[5][5] = 'X';tab[5][4] = 'O';tab[4][5] = 'O';tab[4][4] = 'X';} char montar_tabela(char tab[TAM][TAM]){    int i, j;    for(i=0;i<TAM;i++){        for(j=0; j<TAM; j++){            printf("%2c", tab[i][j]);        }        printf("\n");    }   } int mudando(char letra){int letrapnumero;switch(letra){    case 'a':        letrapnumero = 1;        break;     case 'b':        letrapnumero = 2;        break;     case 'c':        letrapnumero = 3;        break;     case 'd':       letrapnumero = 4;           break;             case 'e':       letrapnumero = 5;           break;        case 'f':    letrapnumero = 6;        case 'g':    letrapnumero = 7;       case 'h':    letrapnumero = 8;}return letrapnumero;} int procurando(char tab[TAM][TAM]){ // procurando '.' na matriz  int i,j;   for(i=1;i<=TAM;i++){      for(j=1;j<=TAM;j++){        if(tab[i][j]=='.'){          return 1;       }else{          return 0; // se não encontrar nenhum '.' o jogo termina      }     }       }} int achando(char tab[TAM][TAM], int jogador){int i,j,k;printf("Primeiro entre com uma LETRA e depois com um NUMERO referente na tabela: \n");     scanf(" %c %d", &letra, &numero); if(tab[numero][i]=='.'){                                                                          if(jogador==1){    //considerando que o jogador 1 seja o X         // Loop para a esquerda até encontrar uma peça do adversário ou a borda da tabela       for(j=i-1;tab[numero][j]=='O' && j!=0 ;j--);       // verifica se o movimento é valido       if(i-j <=1 || tab[numero][j] != 'X');       //movimento invalido          return 1;        }else           // converte todas as peças do oponente em duas peças suas           for(k=i;k>j;k--)               tab[numero][k] = 'X';                }else{       printf("Lugar ja ocupado\n");     }     montar_tabela(tab);     getchar();}  int main (){int i,j,k, pg1=0, pg2=0, jogador=1;fazer_tabela(tab);montar_tabela(tab);   do{    if(jogador==1){     printf("Jogador 1\n");     achando(tab, jogador);     k=procurando(tab);     jogador=2;    }else{     printf("Jogador 2\n");     achando(tab, jogador);     k=procurando(tab);     jogador=1;   } } while(k==1);    for(i=1;i<=TAM;i++){      for(j=1;j<=TAM;j++){         if(tab[i][j]=='X'){           pg1++;         }else{           pg2++;         }     }  }   if(pg1>pg2){    printf("Jogador 1 venceu"); }else{   printf("Jogador 2 venceu");}return 0; }

O problema é que sempre quando escolho um lugar na tabela, exemplo = E3, ele dá como "lugar já ocupado"... 

Se alguém conseguir ajudar a localizar o problema, agradeço!

Link para o comentário
Compartilhar em outros sites

Acho que você se esqueceu de trocar o "i" 

Amigo editei o codigo e comentei

 

#include <stdio.h>#define TAM 9 char tab[TAM][TAM];char letra;int numero; void fazer_tabela(char tab[TAM][TAM]){int i,j;for (i=0;i<TAM+1;i++){for(j=0;j<TAM+1;j++){tab[i][j]='.';}}tab[0][0] = ' ';tab[1][0] = '1';    tab[2][0] = '2';tab[3][0] = '3';tab[4][0] = '4';tab[5][0] = '5';tab[6][0] = '6'; tab[7][0] = '7';tab[8][0] = '8';   tab[0][1] = 'A';    tab[0][2] = 'B';tab[0][3] = 'C';tab[0][4] = 'D';tab[0][5] = 'E';tab[0][6] = 'F';tab[0][7] = 'G';tab[0][8] = 'H'; tab[5][5] = 'X';tab[5][4] = 'O';tab[4][5] = 'O';tab[4][4] = 'X';} char montar_tabela(char tab[TAM][TAM]){    int i, j;    for(i=0;i<TAM;i++){        for(j=0; j<TAM; j++){            printf("%2c", tab[i][j]);        }        printf("\n");    }   } int mudando(char letra){int letrapnumero;switch(letra){    case 'a':        letrapnumero = 1;        break;     case 'b':        letrapnumero = 2;        break;     case 'c':        letrapnumero = 3;        break;     case 'd':       letrapnumero = 4;           break;             case 'e':       letrapnumero = 5;           break;        case 'f':    letrapnumero = 6;        case 'g':    letrapnumero = 7;       case 'h':    letrapnumero = 8;}return letrapnumero;} int procurando(char tab[TAM][TAM]){ // procurando '.' na matriz  int i,j;   for(i=1;i<=TAM;i++){      for(j=1;j<=TAM;j++){        if(tab[i][j]=='.'){          return 1;       }else{          return 0; // se não encontrar nenhum '.' o jogo termina      }     }       }} int achando(char tab[TAM][TAM], int jogador){int i,j,k;// RIO - INICIO/** * ESSA É UMA MATRIZ INT TAB[X][X] ENTÃO OS VALOREZ QUE VOCE TEM Q PASSAR EM Q SER VALOREZ INTEIROS,  * VOCE ESTAVA QUERENDO PASSAR A POSICAO DA LINHA COMO UMA LETRA, EM CODIGO TERA QUE SER UM VALOR INTEIRO, POREM VC PODE TRABALHAR SIM COM UM CHAR * MAS TERA QUE FAZER UM SWITCH OU IF'S PARA TRATA-LO. ESPERO TER AJUDADO */int b; // CRIEI ESSA VARIAVEIL SO PARA TESTEprintf("Primeiro entre com uma LETRA e depois com um NUMERO referente na tabela: \n");	 // SEPAREI OS DOIS SCANS SO POR PRATICA MESMO... PODER ANALISAR MELHOR	     scanf("%d", &;	 scanf("%d", &numero);	 // ISSO AQUI IMPRIME O VALOR Q VINHA ANTES... caso queira visualizar o ERRRO verifique	printf("Lentra %d Numero %d Elemento Matriz %c \n",b,numero,tab[numero][b]);	if(tab[numero][b]=='.'){  // RIO : NESSA LINHA VOCE UTILIZAVA A VARIAVEL 'i' QUE NAO ERA INIALIZADA, ENTAO SEMPRE VINHA C UM VALOR DEFAULT.// RIO - FIM    if(jogador==1){    //considerando que o jogador 1 seja o X         // Loop para a esquerda até encontrar uma peça do adversário ou a borda da tabela       for(j=i-1;tab[numero][j]=='O' && j!=0 ;j--);       // verifica se o movimento é valido       if(i-j <=1 || tab[numero][j] != 'X');       //movimento invalido          return 1;        }else           // converte todas as peças do oponente em duas peças suas           for(k=i;k>j;k--)               tab[numero][k] = 'X';                }else{       printf("Lugar ja ocupado\n");     }     montar_tabela(tab);     getchar();}  int main (){int i,j,k, pg1=0, pg2=0, jogador=1;fazer_tabela(tab);montar_tabela(tab);   do{    if(jogador==1){     printf("Jogador 1\n");     achando(tab, jogador);     k=procurando(tab);     jogador=2;    }else{     printf("Jogador 2\n");     achando(tab, jogador);     k=procurando(tab);     jogador=1;   } } while(k==1);    for(i=1;i<=TAM;i++){      for(j=1;j<=TAM;j++){         if(tab[i][j]=='X'){           pg1++;         }else{           pg2++;         }     }  }   if(pg1>pg2){    printf("Jogador 1 venceu"); }else{   printf("Jogador 2 venceu");}return 0; }
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!