Hoje eu vou mostrar aqui o meu código do jogo da vida de Conway, começando aqui por esse por essa função de listar arquivos disponíveis, que basicamente ela faz uma lista dos arquivos no diretório e se acabar com a extensão pv aqui do parâmetro ela e recebe. Senão ele não acha nenhum e sai. Vindo aqui para essa função de ler arquivo, ela verifica se o arquivo existe no no sistema.
Se existir, ela abre o arquivo no modo read e armazena a linha do arquivo numa lista chamada linhas. Daí aqui ele lê a primeira linha do arquivo, lê a segunda linha do arquivo e ele remove eh os espaços em branco dessas linhas, né, com o strip. E aqui eu ignoro as duas primeiras linhas, já que era o o formato da matriz que foi lido ali na nas duas linhas de código anteriores.
E aqui eu faço uma lista de listas de inteiros para representar a matriz. aqui embaixo a validação da matriz. Então, eh, ela é validada se o número de linhas da matriz é igual à altura ou se a linha da matriz tem o comprimento igual da largura.
E se não for, ele fala que é não corresponde, então ele retorna a matriz. Eu acho que era até melhor tirar esse retorno em matriz e colocar um exit, mas como tava assim, eu vou deixar assim mesmo. Eh, já aqui embaixo, se ele tiver um erro, ele mostra a mensagem de erro e encerra.
Se e se o arquivo não existir, ele eh fala que o arquivo não foi encontrado. Já aqui na função imprimir matriz, eu não vou perder muito tempo porque realmente ela só imprime a matriz. Aqui ela dá o clear antes de cada e passada.
Aqui é a legenda para saber se tá vivo ou morto. Verde ao vivo e vermelho é morto. Aqui é só a borda.
Aqui ele faz a iteração da da linha, né? Aqui é a borda lateral. Aqui ele coloca verde se a célula tiver morta e aqui vermelho se tiver eh eh na verdade coloca verde se tiver viva e vermelha se tiver morta.
Aí aqui ele imprime a borda inferior. Aqui são aquelas eh informações adicionais que é a quantidade de gerações, elas vivas eh naquela geração e o tempo decorrido desde o começo e o histórico das últimas três gerações. Já aqui embaixo, na função contar vizinhos, ele recebe a matriz com a a quantidade de vivos e mortos.
e ele recebe eh as coordenadas das células que a gente tá analisando aqui embaixo. Ele eh calcula as dimensões da matriz, então altura e largura, né? E aqui embaixo ele define os oito eh vizinhos ou os oito deslocamentos para eh encontrar os vizinhos da célula que ele tá calculando no momento.
Aqui é o contador de células vivas que é inicializado em zero. E aqui ele percorre cada vizinho. Então aqui o dx e o dy indica a posição relativa dele.
e o NX, NY são as coordenadas reais do vizinho, somando o deslocamento com eles. Aqui é só para garantir que a célula vizinha e não vai ultrapassar os limites da matriz. E aqui, se a célula vizinha tiver viva, soma o contador de de vivos.
Aqui no contar células vivas, ele conta todas as células vivas da matriz. Então, eh, esse SAMU de fora, ele soma todas as linhas e o SU de dentro conta todos os vivos da linha. Já aqui na próxima função, ele calcula eh a nova geração da matriz.
Então, aqui ele vai pegar e as dimensões da matriz original, vai criar uma nova matriz com todas as células mortas e aqui ele percorre todas as células da matriz original. Ele conta quantos é vizinhos vivos cada célula tem. E aqui é a aplicação das regras.
Aqui é o menu, não vou me prender muito a ele porque realmente é só para ficar bonitinho. E aqui é a função jogo da vida. Então ele recebe dois parâmetros aqui, né, que é o arquivo, que é o arquivo que foi recebido, eh, as gerações, que é o número que o o jogador vai definir.
Então, aqui ele lê o estado, ele lê o estado inicial da matriz a partir do arquivo que for definido. Aqui eh é uma lista que vai armazenar e o histórico com as informações de cada geração. E aqui é a inicialização do tempo.
Aqui é a escolha do modo de execução. Então, se e se for a vai ser o modo automático, se for M, vai ser o modo manual. Eu usei o strip para tirar o espaço antes ou depois do input do usuário e o lower para aceitar também as letras minúsculas ou maiúsculas.
Então, se o modo não tiverem e se não for o modo automático ou manual, ele vai dar como inválido e vai dar e dar exit. Aqui eu inicializo a velocidade e se o modo for automático, ele vai perguntar pro usuário a velocidade e se eh a velocidade não for válida, ele vai dar erro e vai sair. Aqui dentro do loop das gerações.
Aqui ele conta células vivas e retorna o total de células vivas na matriz, né? Aqui ele calcula o tempo decorrido. Aqui ele adiciona e as informações ao histórico e ele imprime a matriz.
Se o modo for o modo manual, ele vai dar algumas opções. Se eh o usuário apertar P, ele vai pausar e vai ficar ali eh aonde o cara parou até ele dar R e sair. Se o comando for C, ele vai fazer a comparação de gerações.
E se ele apertar enter, vai pra próxima geração. Esse time slip aqui é ele é usa a velocidade e inserida pelo usuário para cada passada, que no caso vem aqui dessa função aqui de cima que é automática. Já aqui ele mostra a última geração, encerra a simulação, mostra o tempo decorrido, eh faz o cálculo, né, e ele, eh finaliza.
Já aqui dentro da main, ele chama aqui a função eh de listar os arquivos disponíveis, né? Ele também eh mostra o menu. Então daí aqui eh eu peço pro usuário eh colocar o número do arquivo que ele quer.
Vejo se a escolha é válida, se não for válida, ele dá exit. Então ele pergunta eh a quantidade de gerações que o usuário quer, chama a função do jogo e roda. E se alguma entrada for inválida, ele dá erro e sai.
Agora eu vou mostrar eh como ele roda. Então eh aqui tá o código rodando e lá nos termos de correção, ele pede para testar o estado zero. é com 50 gerações.
Então aqui é eu vou pôr é o estado zero, no caso o arquivo um com a quantidade de gerações 50, no modo automático com a velocidade de 0. 2 segundos por passada. E aqui ele roda, né?
Aí ele rodando ali embaixo é a quantidade de geração, células vivas, o tempo que está rodando e eh as últimas três gerações sendo e sempre atualizadas ali. Logo em seguida ele pede o segundo arquivo com 75 gerações. Então vou fazer o mesmo aqui.
Vou pôr no automático com 0. 1 segundos, 0. 2 e ele vai rodar.
tá rodando direitinho. E o outro ele pede é 100 gerações do estado três, se eu não me engano. 105 gerações.
Ele pede. São 105 gerações. Também vou pôr no automático.
0. 1 segundos para ser um pouquinho mais rápido. E aí ele rodando.
Agora vou aproveitar para mostrar o modo manual, que cada vez que eu aperto enter, ele dá uma passada. Aí, então esse é o meu jogo da vida de Coni.