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