PplWare Mobile

Vamos Programar? – Introdução à Programação #23

                                    
                                

Este artigo tem mais de um ano


Autor: Henrique Dias


  1. Jorge Gabriel says:

    Como assim está no fim?? Não vão falar de ficheiros? leitura de ficheiros??

  2. Rui Peixeiro says:

    Jogo do Galo… Foi a minha primeira “brincadeira” assim que ganhei uma luzes de programação, na altura em Pascal! Tinha som e tudo! Se não falha a memória 1994!

  3. iFXBR says:

    Segue meu PORCO-CODE

    #include

    void mostra_galo(void);
    int jogada_valida(int jlinha, int jcoluna);
    void registra_jogada(int jlinha, int jcoluna, int jjogador);
    int verifica_vencedor(void);

    int jogadas, jogador, linha, coluna, vencedor;
    char galo[3][3];
    char jogador1[15], jogador2[15];

    int main(void) {
    printf(“Galo !\n\n”);

    memset(galo, ‘ ‘, 9);
    jogadas = 0;
    jogador = 1;
    vencedor = 0;

    printf(“Entre com o nome do Jogador 1: “);
    scanf(“%14s”, &jogador1);

    printf(“Entre com o nome do Jogador 2: “);
    scanf(“%14s”, &jogador2);

    mostra_galo();

    while(vencedor == 0) {
    if(jogador == 1) printf(“%s, entre linha e coluna (linha,coluna): “, jogador1);
    if(jogador == 2) printf(“%s, entre linha e coluna (linha,coluna): “, jogador2);

    scanf(“%1d,%1d”, &linha, &coluna);

    if(jogada_valida(linha, coluna)) {
    jogadas++;

    registra_jogada(linha, coluna, jogador);
    mostra_galo();

    if(jogador == 1) jogador = 2; else jogador = 1;
    }
    else printf(“Jogada inválida! Tente novamente.\n\n”);

    vencedor = verifica_vencedor();
    }

    printf(“Temos um vencedor! Parabéns “);

    if(vencedor == 1) printf(“%s”, jogador1);
    if(vencedor == 2) printf(“%s”, jogador2);

    printf(“! Vocé é o Vencedor!\n\n”);
    }

    void mostra_galo(void) {
    printf(“\nJogador 1: %s | Jogador 2: %s | Numero de Jogadas: %d\n\n”, jogador1, jogador2, jogadas);

    printf(” COLUNA \n”);
    printf(” 1 2 3 \n”);
    printf(” |—|—|—|\n”);
    printf(“L 1 | %c | %c | %c |\n”, galo[0][0], galo[0][1], galo[0][2]);
    printf(“I |—|—|—|\n”);
    printf(“N 2 | %c | %c | %c |\n”, galo[1][0], galo[1][1], galo[1][2]);
    printf(“H |—|—|—|\n”);
    printf(“A 3 | %c | %c | %c |\n”, galo[2][0], galo[2][1], galo[2][2]);
    printf(” |—|—|—|\n\n”);

    return;
    }

    int jogada_valida(int jlinha, int jcoluna) {
    if((jlinha > 3) || (jcoluna > 3)) return 0;
    if(galo[jlinha – 1][jcoluna – 1] != ‘ ‘) return 0;

    return 1;
    }

    void registra_jogada(int jlinha, int jcoluna, int jjogador) {
    if(jjogador == 1) galo[jlinha – 1][jcoluna – 1] = ‘X’;
    if(jjogador == 2) galo[jlinha – 1][jcoluna – 1] = ‘O’;

    return;
    }

    int verifica_vencedor(void) {
    int n;

    for(n = 0; n < 3; n++) {
    if((galo[n][2] == galo[n][1]) && (galo[n][1] == galo[n][0])) {
    if(galo[n][0] == 'X') return 1;
    if(galo[n][0] == 'O') return 2;
    }

    if((galo[2][n] == galo[1][n]) && (galo[1][n] == galo[0][n])) {
    if(galo[0][n] == 'X') return 1;
    if(galo[0][n] == 'O') return 2;
    }
    }

    if((galo[0][0] == galo[1][1]) && (galo[1][1] == galo[2][2])) {
    if(galo[1][1] == 'X') return 1;
    if(galo[1][1] == 'O') return 2;
    }

    if((galo[0][2] == galo[1][1]) && (galo[1][1] == galo[2][0])) {
    if(galo[1][1] == 'X') return 1;
    if(galo[1][1] == 'O') return 2;
    }

    return 0;
    }

    • Guilherme Lawless says:

      jogador = (jogador == 1) ? 2 : 1

      • matallui says:

        Sim, essa linha de código é equivalente a:

        if (jogador == 1)
        jogador = 2;
        else
        jogador = 1;

        Uma outra forma interessante para trocar de jogador (neste caso específico) seria:

        jogador ^= 0x03;

        Cumps!

        • Guilherme Lawless says:

          Agora perdi-me!
          Qual a diferença entre usar ^= e &= ?

          • matallui says:

            & -> AND
            ^ -> XOR

            Quando usas AND, o resultado vai ter os bits a ‘1’ quando ambos os bits na mesma posição está a ‘1’ nos operandos.
            Quando usas XOR, o resultado vai ter os bits a ‘1’ quando os bits na mesma posição dos operandos diferem.

            Exemplo:

            1 & 3 = 1
            2 & 3 = 2
            3 & 3 = 3

            1 ^ 3 = 2
            2 ^ 3 = 1
            3 ^ 3 = 0

            A operação XOR é utilizada quando queres fazer “bit flipping”. Isto é, se tens uma variável e queres alterar o 3º bit para o valor oposto, fazes:

            var ^= 0x04; // 0x04 = 00000100

          • Guilherme Lawless says:

            Interessante, nunca tinha pensado nesse uso. Obrigado!

  4. Guilherme Lawless says:

    Olá Henrique. Queria apenas congratular pelo excelente trabalho nesta saga, e dizer que vou guardar a solução fornecida como “boas práticas em C”. Cumprimentos.

  5. Helder Sousa says:

    Jogo do Galo feito, testem e digam algo! Desde ja otima iniciativa 🙂 ppl
    Segue a baixo o link do projeto:
    https://www.dropbox.com/s/vxueoe6qyynt24b/GaloGame.zip?dl=0
    Cumpz

  6. Samuel Barroca says:

    Eu tenho este código como consigo fazer o jogo do galo?

    #include
    #include
    #include
    #define LINHAS 3
    #define COLUNAS 3

    char matrix[COLUNAS][LINHAS];

    void delay(unsigned int mseconds){
    clock_t goal=mseconds+clock();
    while(goal>clock());
    }

    void InitMatrix(void){
    char i,j;
    for(i=0;i<LINHAS;++i){
    for(j=0;j<COLUNAS;++j){
    matrix[i][j]=0;
    }
    }
    }

    void printMatrix(void){
    char i,j;
    for(i=0;i<LINHAS;++i){
    for(j=0;j<COLUNAS;++j){
    printf(" %d ",matrix[j][i]);
    if(j<(COLUNAS-1)) printf("|");
    }
    printf("\n");
    if(i<(LINHAS-1)){
    for(j=0;j<COLUNAS;++j){
    if(j “);
    scanf(“%d”,&jogada);
    printf(“Jogaste %d”,jogada);

    }

Deixe um comentário

O seu endereço de email não será publicado.

You may use these HTML tags and attributes: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste site ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. A administração deste site reserva-se, desde já, no direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação do seu autor (nome completo e endereço válido de email) também poderão ser excluídos.