Ir ao conteúdo
  • Cadastre-se

C Programa Jogo da Vida em C


Duvida Prog

Posts recomendados

Preciso criar um programa sobre Jogo da Vida, porém não consigo desenvolver. Alguém conseguiria mostra como fica esse programa ? 

 

/* Escreva um programa em C para simular o jogo da vida usando
um tabuleiro de tamanho 30 x 30:
1) Implemente duas formas de inicializar a matriz, seguindo a escolha do
usuário:
Opção 1: Inicialização randômica
1- Defina de forma randômica o número de células vivas;
2- Defina a posição dessas células de forma aleatória.
Pesquise formas de gerar números aleatórios em C.
Opção 2: O usuário indicará a posição das células vivas. Cada célula viva
será informada pelo número da linha e da coluna. A leitura será
finalizada com a opção -1 -1. Por exemplo, uma única célula viva na
posição 1,1 da matriz seria informada como:
1 1
-1 -1
Em ambas as opções, as demais posições do tabuleiro devem conter
apenas células mortas.
2) Simule o comportamento por um determinado número de gerações (ou
repetições). O número de gerações será informado pelo usuário.
3) A cada geração:
1) Limpe a tela (pesquise uma forma de fazer isso em C);
2) Imprima o tabuleiro: Use um caractere O para células vivas e um
espaço em branco para células mortas. Não se esqueça de quebrar
as linhas;
3) Aguarde por alguns instantes antes de prosseguir para a próxima
geração (pesquise uma forma de incluir pequenos atrasos no seu
programa). */

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Duvida Prog     programa para criar matriz e preenche la  por geração randômica , você pode usar a função rand ,  ou por leitura do teclado , e a limpeza de tela é com o velho system("cls");   , e para fazer atrasos no programa você pode usar o comando for , aninhado um dentro outro , multiplicando o tempo perdido , por exemplo o primeiro for com valor de zero até 8000 e o outro começando de zero até 60000, que vai demorar próximo de 1 segundo ,   e faça um código sobre esse exercício e poste aqui para ajudarmos caso precise de alguma correção  .

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

fiz esse jogo uma vez. Lembro que precisei de duas matrizes, uma para posicionar as células e outra para atualizar, pois se você atualizar a célula na mesma matriz o resultado é ruim. Se quiserem ver está o tal programa deixo aqui embaixo. Esta feito em c++ e SFML. Não precisa de nada, é só abrir o "jogo da vida.cbp" e compilar.
https://drive.google.com/drive/folders/1Tn80d7Xj819zD9xKb3pe2Q9k1-JvmC0F?usp=sharing

RFrmSHIwrb.thumb.gif.f2bcfa69cd666667a94f95d56abfb6a9.gif

 

o código é algo velho, se poderia melhorar muita coisas mas me contento com ver funcionando. XD

mas como falei se pode ver a lógica nesse pedaço:

    for(int i = 0; i < ALTO; i++) {
        for(int j = 0; j < ANCHO; j++) {
            colindantes = 0;
            ((i - 1) < 0     || (j - 1) < 0) ? 0 : (MUERTA == m[i - 1][j - 1]) ? 0 : colindantes++;              //arriba-izquierda
            ((i - 1) < 0) ? 0 : (MUERTA == m[i - 1][j    ]) ? 0 : colindantes++;                                 //arriba
            ((i - 1) < 0     || (j + 1) >= ANCHO) ? 0 : (MUERTA == m[i - 1][j + 1]) ? 0 : colindantes++;         //arriba-derecha
            ((j - 1) < 0) ? 0 : (MUERTA == m[i    ][j - 1]) ? 0 : colindantes++;                                 //izquierda
            ((j + 1) >= ANCHO) ? 0 : (MUERTA == m[i    ][j + 1]) ? 0 : colindantes++;                            //derecha
            ((i + 1) >= ALTO || (j - 1) < 0) ? 0 : (MUERTA == m[i + 1][j - 1]) ? 0 : colindantes++;              //abajo-izquierda
            ((i + 1) >= ALTO) ? 0 : (MUERTA == m[i + 1][j    ]) ? 0 : colindantes++;                             //abajo
            ((i + 1) >= ALTO || (j + 1) >= ANCHO) ? 0 : (MUERTA == m[i + 1][j + 1]) ? 0 : colindantes++;         //abajo-derecha

            if(VIVA == m[i][j]) {
                if(colindantes <  2)                     {
                    n[i][j] = MUERTA;
                }

                if(colindantes == 2 || colindantes == 3) {
                    n[i][j] = VIVA;
                }

                if(colindantes >  3)                     {
                    n[i][j] = MUERTA;
                }
            }

            if(MUERTA == m[i][j]) {
                if(colindantes == 3) {
                    n[i][j] = VIVA;
                }
            }
        }
    }

Como podem ver tenho 2 matrizes chamadas m e n. Primeiro passo casinha(célula) por casinha da matriz m, averiguando todas as posições "colindantes"(células adjacentes... é meio español o algoritmo hahah) e contando quantas células existem ao lado, e guardo o resultado  na matriz n conforme as regras do criador do jogo(pode buscar jogo da vida na wikipedia). Logo mostro n na tela, depois faço uma copia de n em m e repito o processo.
Uma melhoria seria evitar essa copia. Como? intercalando, mostrando uma vez n e outra m por exemplo, seria menos custoso para o programa.

Bom... tenho que ir. Espero que sirva. não tenho ele feito em C e pior para console, mas a lógica é essa ai mais ou menos, é só mudar ele para console.

Quero melhorar ele um dia quando tiver mais tempo.

Depois passo e explico melhor se querem.

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...