A maior rede de estudos do Brasil

preciso fazer em c# modo console usando apenas vetores, um jogo da memória alguém poderia me ajudar? não sei por onde começar.

Programação I

UNICAMP


2 resposta(s) - Contém resposta de Especialista

User badge image

RD Resoluções Verified user icon

Há mais de um mês

#include <stdio.h>  // Biblioteca para printf e scanf

#include <stdlib.h> //Biblioteca para o rand()

#include <time.h> // Biblioteca para srand(time(null))

int main()

{

    srand(time(NULL));//Altera o valor do rand() a cada inicialização do programa;

    // Essas são as variáveis que eu criei, jogo é a matriz com as respostas, contpar seira os acertos

    // c1, c2... serão as coordenadas digitadas pelo usuário, pos1, pos2... serão as posição aleatórias

    // para alocação dos pares de números na matriz jogo, e num será os numeros a formarem pares de 1 a 8

    // jogador dirá de quem é a vez no momento, e pont1 e 2 são as pontuações dos respectivos jogadores 1 e 2

    int jogo[4][4];

    int a, b, contpar, c1, c2, c3, c4, pos1, pos2, pos3, pos4, num = 1;

    contpar = 0;

    int jogador, pont1, pont2;

    jogador = 1;

    pont1 = 0;

    pont2 = 0;

    

    // com esse loop, o programa inicializará todos os elementos da matriz jogo com 0, o que nos

    // ajudará a posicionar os pares nessa mesma matriz no próximo passo

    for (a = 0; a < 4; a++)

    {

        for (b = 0; b < 4; b++)

        {

            jogo[a][b] = 0;

        }

    }

    // Esse loop é que vai atribuir os pares a matriz jogo. Ele gera quatro numeroa aleatórios de 0 a 3,

    // exatamente como podemos usar numa matriz 4x4. A primeira condição garante que serão atribuídos valores de 1 a 8

    // a espaços que não tenham sido preenchidos ainda. Considerando que o 0 é quando ele não foi preenchido, ele procura

    // duas posições que valem 0 e com a segunda condição, ele garante que as duas posições não serão iguais.

    // Quando ele acha duas posições que satisfazem essas condições, ele as preenchem com o número um, soma mais um a variável num, e procura duas coordenadas que ainda não tenham sido preenchidas

    while (num <= 8)

    {

        pos1 = rand()%4;

        pos2 = rand()%4;

        pos3 = rand()%4;

        pos4 = rand()%4;

        

        if (jogo[pos1][pos2] == 0 && jogo[pos3][pos4] == 0)

        {

            if (pos1 != pos3 && pos2 != pos4)

            {

                jogo[pos1][pos2] = num;

                jogo[pos3][pos4] = num;

                num++;

            }

        }

    }

    // essa é a matriz que será mostrada para o usuário, que será preenchida toda com 0 e a medida que o jogador acertar os pares, esses pares serem substituídos na matriz esc, até ser toda preenchida e o jogo acabar.

    int esc[4][4];

    

    for (a = 0; a < 4; a++)

    {

        for (b = 0; b < 4; b++)

        {

            esc[a][b] = 0;

            printf("%d ", esc[a][b]);

        }

        printf(" ");

    }

    /*

     for (a = 0; a < 4; a++)

     {

        for (b = 0; b < 4; b++)

        {

            printf("%d ", jogo[a][b]);

        }

        printf(" ");

     }

    */

    while (contpar < 8) // contpar foi inicializado com 0, ou seja, quando contpar/número de acertos chegar a 8, o jogo acaba

    {

        printf("Vez do jogador %d ", jogador);

        printf("Entre com uma cordenada(max = 4 4): ");

        scanf("%d %d", &c1, &c2);

        printf("O número da posicao eh %d ", jogo[c1 - 1][c2 -1]);

        printf("Entre com outra coordenada: ");

        scanf("%d %d", &c3, &c4);

        printf("O número da posicao eh %d ", jogo[c3 - 1][c4 -1]);

        // com isso foi pedido as coordenadas para localizar os pares na matris jogo

        c1 = c1 - 1;

        c2 = c2 - 1;

        c3 = c3 - 1;

        c4 = c4 - 1;

        // essa parte do c1 = c1 - 1... é apenas um detalhe para facilitar na hora de digitar uma linha por coluna, é opcional

        

        // Aqui nós temos nossas condições, se o valor da coordenada 1 for = a da coordenada 2 Ele vai somar um ponto pro jogador da vez,

        // substituir o valor certo na matriz escondida, para o jogador ver os acertos e somar um ponto para o número de acertos. Depois ele vai

        // reimprimir a matriz esc com os pares acertaos impressos

        if (jogo[c1][c2] == jogo[c3][c4] && esc[c1][c2] == 0 && esc[c3][c4] == 0)

        {

            contpar++;

            esc[c1][c2] = jogo[c1][c2];

            esc[c3][c4] = jogo[c3][c4];

            if (jogador == 1)

            {

                pont1++;

            }

            else if(jogador == 2)

            {

                pont2++;

            }

            

            for (a = 0; a < 4; a++)

            {

                for (b = 0; b < 4; b++)

                {

                    printf("%d ", esc[a][b]);

                }

                printf(" ");

            }

        }

        else

        {

            printf("Errou, tente de novo ");

            jogador++; // se o jogador errar ele perde a vez

        }

        

        // Aqui foi como eu fiz para o jogador ser apenas 1 ou 2, toda vez que o jogador erra, soma-se um a variável jogador

        // se o jog 1 erra, agora é o jog 2, porém se o jog 2 erra não vai para jog 3 pq com a condição abaixo, se jog > 2

        // subtrai-se 2 do numero, ou seja 3 - 2 = 1, e volta a ser a vez do jog 1.

        if (jogador > 2)

        {

            jogador = jogador - 2;

        }

        printf("Jogador 1: %d pts Jogador 2: %d pts ", pont1, pont2);

    }

    

    // aqui é apenas para dizer quem ganhou a partida

    if (pont1 > pont2)

    {

        printf("Jogador 1 Venceu");

    }

    else if (pont2 > pont1)

    {

        printf("Jogador 2 Venceu");

    }

    else

    {

        printf("Empatou u.u");

    }

    

    

}

#include <stdio.h>  // Biblioteca para printf e scanf

#include <stdlib.h> //Biblioteca para o rand()

#include <time.h> // Biblioteca para srand(time(null))

int main()

{

    srand(time(NULL));//Altera o valor do rand() a cada inicialização do programa;

    // Essas são as variáveis que eu criei, jogo é a matriz com as respostas, contpar seira os acertos

    // c1, c2... serão as coordenadas digitadas pelo usuário, pos1, pos2... serão as posição aleatórias

    // para alocação dos pares de números na matriz jogo, e num será os numeros a formarem pares de 1 a 8

    // jogador dirá de quem é a vez no momento, e pont1 e 2 são as pontuações dos respectivos jogadores 1 e 2

    int jogo[4][4];

    int a, b, contpar, c1, c2, c3, c4, pos1, pos2, pos3, pos4, num = 1;

    contpar = 0;

    int jogador, pont1, pont2;

    jogador = 1;

    pont1 = 0;

    pont2 = 0;

    

    // com esse loop, o programa inicializará todos os elementos da matriz jogo com 0, o que nos

    // ajudará a posicionar os pares nessa mesma matriz no próximo passo

    for (a = 0; a < 4; a++)

    {

        for (b = 0; b < 4; b++)

        {

            jogo[a][b] = 0;

        }

    }

    // Esse loop é que vai atribuir os pares a matriz jogo. Ele gera quatro numeroa aleatórios de 0 a 3,

    // exatamente como podemos usar numa matriz 4x4. A primeira condição garante que serão atribuídos valores de 1 a 8

    // a espaços que não tenham sido preenchidos ainda. Considerando que o 0 é quando ele não foi preenchido, ele procura

    // duas posições que valem 0 e com a segunda condição, ele garante que as duas posições não serão iguais.

    // Quando ele acha duas posições que satisfazem essas condições, ele as preenchem com o número um, soma mais um a variável num, e procura duas coordenadas que ainda não tenham sido preenchidas

    while (num <= 8)

    {

        pos1 = rand()%4;

        pos2 = rand()%4;

        pos3 = rand()%4;

        pos4 = rand()%4;

        

        if (jogo[pos1][pos2] == 0 && jogo[pos3][pos4] == 0)

        {

            if (pos1 != pos3 && pos2 != pos4)

            {

                jogo[pos1][pos2] = num;

                jogo[pos3][pos4] = num;

                num++;

            }

        }

    }

    // essa é a matriz que será mostrada para o usuário, que será preenchida toda com 0 e a medida que o jogador acertar os pares, esses pares serem substituídos na matriz esc, até ser toda preenchida e o jogo acabar.

    int esc[4][4];

    

    for (a = 0; a < 4; a++)

    {

        for (b = 0; b < 4; b++)

        {

            esc[a][b] = 0;

            printf("%d ", esc[a][b]);

        }

        printf(" ");

    }

    /*

     for (a = 0; a < 4; a++)

     {

        for (b = 0; b < 4; b++)

        {

            printf("%d ", jogo[a][b]);

        }

        printf(" ");

     }

    */

    while (contpar < 8) // contpar foi inicializado com 0, ou seja, quando contpar/número de acertos chegar a 8, o jogo acaba

    {

        printf("Vez do jogador %d ", jogador);

        printf("Entre com uma cordenada(max = 4 4): ");

        scanf("%d %d", &c1, &c2);

        printf("O número da posicao eh %d ", jogo[c1 - 1][c2 -1]);

        printf("Entre com outra coordenada: ");

        scanf("%d %d", &c3, &c4);

        printf("O número da posicao eh %d ", jogo[c3 - 1][c4 -1]);

        // com isso foi pedido as coordenadas para localizar os pares na matris jogo

        c1 = c1 - 1;

        c2 = c2 - 1;

        c3 = c3 - 1;

        c4 = c4 - 1;

        // essa parte do c1 = c1 - 1... é apenas um detalhe para facilitar na hora de digitar uma linha por coluna, é opcional

        

        // Aqui nós temos nossas condições, se o valor da coordenada 1 for = a da coordenada 2 Ele vai somar um ponto pro jogador da vez,

        // substituir o valor certo na matriz escondida, para o jogador ver os acertos e somar um ponto para o número de acertos. Depois ele vai

        // reimprimir a matriz esc com os pares acertaos impressos

        if (jogo[c1][c2] == jogo[c3][c4] && esc[c1][c2] == 0 && esc[c3][c4] == 0)

        {

            contpar++;

            esc[c1][c2] = jogo[c1][c2];

            esc[c3][c4] = jogo[c3][c4];

            if (jogador == 1)

            {

                pont1++;

            }

            else if(jogador == 2)

            {

                pont2++;

            }

            

            for (a = 0; a < 4; a++)

            {

                for (b = 0; b < 4; b++)

                {

                    printf("%d ", esc[a][b]);

                }

                printf(" ");

            }

        }

        else

        {

            printf("Errou, tente de novo ");

            jogador++; // se o jogador errar ele perde a vez

        }

        

        // Aqui foi como eu fiz para o jogador ser apenas 1 ou 2, toda vez que o jogador erra, soma-se um a variável jogador

        // se o jog 1 erra, agora é o jog 2, porém se o jog 2 erra não vai para jog 3 pq com a condição abaixo, se jog > 2

        // subtrai-se 2 do numero, ou seja 3 - 2 = 1, e volta a ser a vez do jog 1.

        if (jogador > 2)

        {

            jogador = jogador - 2;

        }

        printf("Jogador 1: %d pts Jogador 2: %d pts ", pont1, pont2);

    }

    

    // aqui é apenas para dizer quem ganhou a partida

    if (pont1 > pont2)

    {

        printf("Jogador 1 Venceu");

    }

    else if (pont2 > pont1)

    {

        printf("Jogador 2 Venceu");

    }

    else

    {

        printf("Empatou u.u");

    }

    

    

}

Essa pergunta já foi respondida por um dos nossos especialistas