Fala pessoal, esse é o código que eu montei para o exercício 9 da lista de estrutura de dados compostas do IFSP. :)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
char c[3][3], player[2] = {'A','B'};
int i, j, jogada, linhaboa, aux, cont, venceu, x;
//preenchendo o tabuleiro do jogo com o caractere -
for(i = 0; i < 3; i++) {
for(j = 0; j < 3; j++)
c[i][j] = '-';
puts("");
}
aux = 1; //variável aux é responsável por controlar o inicio e o termino do jogo
cont = 0; //variável cont, conta quantas jogadas foram realizadas. Com isso conseguimos determinar qual é a vez de cada jogador.
srand(time(NULL));
i = rand() % 3; //sorteando um número aleatório de 0..2
j = rand() % 3; //sorteando um número aleatório de 0..2
c[i][j] = 'X'; //na posição sorteada eu preencho o local com o sabão
//enquanto aux tiver valor 1, então o código é executado
while(aux) {
//imprimindo o tabuleiro do jogo, isso permite que os jogadores vejam como o tabuleiro fica após cada jogada
for(i = 0; i < 3; i++) {
for(j = 0; j < 3; j++)
printf("%c\t", c[i][j]);
puts("");
}
printf("Sua vez de jogar JOGADOR %c\n\n", player[cont%2]);
printf("\nInforme o que deseja fazer... \n1- Jogar em uma linha \n2- Jogar em uma coluna: ");
scanf("%d", &jogada);
if(jogada == 1) {
printf("\nInforme o numero da linha: ");
scanf("%d", &jogada);
x = 0; //guarda o numero de vezes que alguma parte do tabuleiro foi eliminada
while(jogada < 3) {
linhaboa = 1; //informa se a linha está apta a ser removida do tabuleiro
//o tabuleiro é varrido com o intuito de saber se naquela linha temos o sabão em alguma posição
for(i = 0; i < 3; i++) {
if(c[jogada][i] == 'X') {
linhaboa = 0; //isso informará ao código que a linha escolhida do tabuleiro tem o sabão em alguma casa
jogada = 3; //isso fará com que o jogador passe a vez para o próximo
}
}
//se a linha estiver apta a ser removida, então isso será feito
if(linhaboa && c[jogada][0] == '-') {
for(i = 0; i < 3; i++)
c[jogada][i] = ' ';
x = 1; //isso informa que não estamos mais na primeira jogada dessa iteração
} else if(jogada == 3 && x == 0) {
puts("\nEssa jogada não pode ser realizada!");
} else if(linhaboa && c[jogada][0] == ' ') {
jogada = 3;
puts("\nEssa coluna já fpoi eliminada!!!");
}
jogada++;
}
if(x)
//incrementa a variável cont, indicando que algum jogador realizou uma jogada
cont++;
} else if(jogada == 2) {
//esse trecho de código é semelhante ao código do primeiro if. A unica diferença é que este verifica as colunas ao invés das linhas
printf("\nInforme o numero da coluna: ");
scanf("%d", &jogada);
x = 0;
while(jogada < 3) {
linhaboa = 1;
for(i = 0; i < 3; i++) {
if(c[i][jogada] == 'X') {
linhaboa = 0;
jogada = 3;
}
}
if(linhaboa && c[0][jogada] == '-') {
for(i = 0; i < 3; i++)
c[i][jogada] = ' ';
x = 1;
} else if(jogada == 3 && x == 0) {
puts("\nEssa jogada não pode ser realizada!");
} else if(linhaboa && c[0][jogada] == ' ') {
jogada = 3;
puts("\nEssa coluna já foi eliminda!!!");
}
jogada++;
}
if(x)
cont++;
} else
puts("\nNúmero de jogada é inválido!");
venceu = 0; //variável é zerada toda vez, pois toda rodada há uma verificação para ver se algum jogador venceu
for(i = 0; i < 3; i++) {
for(j = 0; j < 3; j++)
if(c[i][j] == '-') //isso pergunta se ainda existe alguma casa no tabuleiro que pode ser jogada
venceu++; //essa váriavel irá armazenar quantas casas ainda podem serem eliminadas
}
//caso não haja mais nenhuma casa, o jogo deve ser encerrado, pois já temos um ganhador
if(venceu == 0) {
printf("\nJOGADOR %c VENCEU\n\n", player[(cont+1)%2]);
aux = 0;
}
}
return 0;
}
Qualquer duvida só deixar um comentário... caso tenha alguma duvida ou sugestão deixe um comentário também :). Até a próxima galera!!!
Ta errado saporra hasuahusahsuas
ResponderExcluirObrigado por avisar Schick, agora o código está considerando as jogadas inválidas sem trocar de jogador. Assim como se você tentar jogar em uma linha ou coluna que já foi eliminada ele vai te avisar e também não vai trocar de jogador. Se achar mais alguma falha me notifique por favor :)
ResponderExcluir