Gyorsítottam még egy picit rajta :-)Ha így folytatod, el fog fogyni a kód :D
Rakd be majd ide is. (http://enterpriseforever.com/other-topics/conways-game-of-life/)Nem is tudtam, hogy van már neki topikja... :oops:
Lehet, hogy hülye ötlet: 256 szín módba kéne átrakni, és lenne piros, zöld, kék faj, ami egymástól függetlenül élne. És ahol egymásra másznak ott új színek látszanának. Még érdekesebb lenne, ha ezek a hibridek is életre kelnének :) Arra gondolok, hogy egy R és G az egymás számára láthatatlan. De ha egy közös kockában keletkezne egy RG, annak innentől mind az R mind a G, és persze az RG is számítani. Amikor szül, akkor RG-t szül.
80x50 méretű Game of Life 256 színű módban:
(Attachment Link)
(Attachment Link)
Az Esc billentyűre kilép, Space-re pedig új mintát generál. A sebesség 8.3333 (50/6) fps-re korlátozott, ezt az 54. sorban (015Bh címen található érték) lehet módosítani, de csak turbós gépen lenne sokkal gyorsabb.
Ez a változat arra az esetre optimalizált, amikor a cellák nagy része (>= 80%) nem változik, de valószínűleg még lehetne javítani rajta.
and 3
cp 3
sbc a, a
inc a
and 3
jp z,elo
ld a,255
elo: inc a
Tetszik ahogyan megoldottad, hogy kezdéskor csak a cellák negyede lesz élő.
A ruletable dolgot nem értem egyelőre, még bogarászás vár rá... :-)
A cellák nem csak az aktuális állapotot tárolják (4. bit), hanem azt is, hogy mennyi "élő" szomszédjuk van (0-3. bit). A 32 elemű és 256 byte-ra igazított ruleTable az összes lehetséges értékhez hozzárendelt új állapotot tartalmazza, és ha ez változik, akkor a szomszédos cellákon ennek megfelelően INC/DEC műveletet kell végezni.
; input: pointer to cell in HL
; output: number of neighbours in A
xor a
dec h
dec l
add a,(hl)
inc l
add a,(hl)
inc l
add a,(hl)
inc h
add a,(hl)
inc h
add a,(hl)
dec l
add a,(hl)
dec l
add a,(hl)
dec h
add a,(hl)
inc l
Továbbfejlesztett és valamivel gyorsabb verzió:Nagyon jók!
Továbbfejlesztett és valamivel gyorsabb verzió:
(Attachment Link)
(Attachment Link) (10 fps-re korlátozott sebesség)
(Attachment Link) (25 fps, de ezt 4 MHz-es gépen nem tudja elérni)
ha már színes, lehetnének szebb színei :)
A 32 elemű és 256 byte-ra igazított ruleTable az összes lehetséges értékhez hozzárendelt új állapotot tartalmazza, és ha ez változik, akkor a szomszédos cellákon ennek megfelelően INC/DEC műveletet kell végezni.
; sets next state of cell
; input: number of neighbours in A
; pointer to cell in HL
; output: next state of cell in A
; destroys: DE
ld e,a
ld d,(hl)
ld a,(de)
l0000: db 0,0,0,1,0,0,0,0,0
l0100: db 0,0,1,1,0,0,0,0,0
ld b,a
ld a,1
dec b
dec b
dec b
jp z, vege ; if (b == 3) return alive
ld a,(hl)
inc b
jp z, vege ; if (b == 2) return A
xor a ; A = dead
vege:
Találtam egy jó kis cikket az életjáték-algoritmusok optimalizációjáról:
http://www.nondot.org/sabre/Mirrored/GraphicsProgrammingBlackBook/gpbb17.pdf
ami még eszembe jutott, hogy léptetni is lehetne, ENTER-rel.
brutál:
életjáték "leprogramozva" életjátékban!
https://www.youtube.com/watch?v=xP5-iIeKXE8&t=1s
szerkesztve: rossz link volt bent
persze elárulni nem fogom :)Én sem árulom el, hogy az univerzumot hasonló módon látnánk, mint a videón, ha a Naprendszertől egyre távolodnánk és a galaxishalmazok is összeállnának, meg ami utánuk jön, az is. Készültek ugyan videók erről, de az csak elmélet, és a galaxishalmazok feletti szinten már nem állja meg a helyét. Itt is a videó. (https://www.youtube.com/watch?v=GoW8Tf7hTGA) Kicsit off, de végülis kapcsolódik valamennyire.