Life
O programa LIFE foi adaptado de um jogo de mesmo nome criado pelo matemático inglês John H. Conway há quase duas décadas atrás.
Teste o programa no WebMSX – The Online MSX Emulator
O nome LIFE (vida, em inglês) tem origem nas muitas analogias que se pode fazer entre o jogo e o desenvolvimento de cultura de bactérias (ou, de forma menos evidente, com o desenvolvimento de uma espécie qualquer em seu habitat).
Além dos interesses “biológicos” do jogo, seus aspectos matemáticos são inúmeros. Não vamos nos alongar em comentários abstratos sobre o LIFE, porém, se você estiver interessado em mais informações sobre esses aspectos, procure ler o capítulo 9 (Comunicação em Sistemas) do livro “INSTRUMENTAL PARA O PENSAMENTO” de C. H. Weddington, e os artigos de Martin Gardner (Matematical Games) das Scientific American de outubro de 1970 e fevereiro de 1971.
O princípio do programa consiste no seguinte: num tabuleiro de 24×32 posições (SCREEN 1), nascem se produzem e morrem células representadas por caracteres redefinidos.
Ao começar, o programa produz uma primeira geração de células, distribuídas ao acaso em seu habitat de 768 posições. A geração seguinte surge a partir da anterior, obedecendo a certas regras evolutivas.
Cada célula pode ter até 8 casas vizinhas com ou sem outras células.
As regras evolutivas são as seguintes:
1) As células que tiverem 2 ou 3 células vizinhas sobrevivem e permanecem vivas na geração seguinte. As demais, morrem!
2) Em toda casa vazia com exatamente 3 células vizinhas, nascerá uma nova célula na geração seguinte.
No desenrolar do programa, muitas situações imprevisíveis vão surgindo. A situação inicial pode evoluir dando origem a espécies estáveis, levar a uma extinção total, ou ainda, quem sabe, a espécies indefinidamente em evolução (essa situação, entretanto, não é verificável empiricamente e ainda nem foi comprovada matematicamente!). Ocasionalmente surgem configurações meta-estáveis que oscilam entre duas possibilidades.
Um aspecto muito interessante a ser observado é a convergência evolutiva: como situações idênticas ou muito semelhantes. O tubarão, o golfinho e o ictiossauro têm origens completamente distintas: um é peixe, o segundo é mamífero e o terceiro é um réptil. Mesmo assim, quando submetidos a conjuntos semelhantes de regras evolutivas do meio aquático evoluíram de modo a adquirirem formas semelhantes.
Analogamente, as configurações iniciais, diferentes umas das outras, ficam submetidas às mesmas regras, simulando uma pressão de evolução, e acabam convergindo para formas similares.
A grande virtude deste programa é permitir simular, em apenas alguns minutos, um suceder de gerações que dificilmente podemos observar na prática.
Obviamente, a velocidade do programa não é muito grande. Para aumentá-la, teríamos que recorrer à linguagem de máquina ou usar um compilador BASIC.
Fonte: Livro Coleção de Programas para MSX Volume 2
Editora: Aleph
Ano: 1986
Autores: Pierluigi Piazzi e Renato da Silva Oliveira
Digitação: Renato Faria Lopes
Código fonte
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
100 ' LIFE ---------------------------- 110 ' Pierluigi & Renato - 120 ' --------------------------------- 140 PRINT"Digite a barrra de espacos." 150 IF STRIG(0)=0 THEN BEEP : GOTO 150 160 COLOR 15,9,5 : SCREEN 1 : KEY OFF 170 ' redefine 79 e 48 180 DATA 00111100 190 DATA 01000010 200 DATA 10011001 210 DATA 10100101 220 DATA 10100101 230 DATA 10011001 240 DATA 01000010 250 DATA 00111100 260 VPOKE 8201,&B11011111 270 VPOKE 8198,&B11011111 280 FOR F%=632 TO 639 290 READ A$:A=VAL("&b"+A$) 300 VPOKE F%,A : VPOKE F%-248,A 310 NEXT F% 320 ' redefine 32 e 0 330 DATA 11111111 340 DATA 10000001 350 DATA 10111101 360 DATA 10100101 370 DATA 10100101 380 DATA 10111101 390 DATA 10000001 400 DATA 11111111 410 VPOKE 8196,&B10010110 420 VPOKE 8192,&B10010110 430 FOR F%=256 TO 263 440 READ A$:A=VAL("&b"+A$) 450 VPOKE F%,A : VPOKE F%-256,A 460 NEXT F% 470 ' sorteia celulas iniciais 480 A%=RND(-TIME)*200 490 FOR F%=1 TO A% 500 B1%=22*RND(1): B2%=3+26*RND(1) 510 VPOKE 6176+32*B1%+B2%,79 520 NEXT F% 530 ' verifica situacao e prepara 540 FOR F%=6176 TO 6880 550 C%=0 560 IF VPEEK(F%-33)<33 THEN C%=C%+1 570 IF VPEEK(F%-32)<33 THEN C%=C%+1 580 IF VPEEK(F%-31)<33 THEN C%=C%+1 590 IF VPEEK(F%-1)<33 THEN C%=C%+1 600 IF VPEEK(F%+1)<33 THEN C%=C%+1 610 IF VPEEK(F%+31)<33 THEN C%=C%+1 620 IF VPEEK(F%+32)<33 THEN C%=C%+1 630 IF VPEEK(F%+33)<33 THEN C%=C%+1 640 IF VPEEK(F%)=79 AND (C%<5 OR C%>6) THEN VPOKE F%,48 650 IF VPEEK(F%)=32 AND C%=5 THEN VPOKE F%,0 660 NEXT F% 670 ' altera a tela 680 FOR F%=6144 TO 6912 690 IF VPEEK(F%)=48 THEN VPOKE F%,32 700 IF VPEEK(F%)=0 THEN VPOKE F%,79 710 NEXT F% : BEEP : BEEP : BEEP 720 GOTO 540 |