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!