sábado, 19 de maio de 2012

Yucky Choccy


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!!!

2 comentários:

  1. Ta errado saporra hasuahusahsuas

    ResponderExcluir
  2. Obrigado 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

Novidade!!! Agora vamos ter canal no Youtube =D

Fala pessoal tudo beleza, estou sumido a correria está forte por aqui. Estou querendo dar um start em um projeto antigo que vem desde o temp...