Kodecafe - Conway’s Game of Life
Game of Life består af et M×N bræt af celler. Hver celle kan enten være død eller i live.
For hver celle udføres der følgende regler samtidig over alt på brættet, hvilket udgør en iteration.
Regler for hver celle:
- For celler der er i live:
- Hvis den har 0 eller 1 nabo, så dør den af ensomhed.
- Hvis den har 2 eller 3 naboer, så fortsætter den med at være i live.
- Hvis den har 4 eller flere naboer, så dør den af overbefolkning.
- For celler der er døde:
- Hvis den har 3 naboer, så kommer den til live.
I C vil vi realisere brættet ved hjælp af et to-dimensionelt array, hvor hver plads har en State
, der kan være to værdier:
Dead
og Alive
.
Brættet kaldes cells
og er defineret som State cells[M][N]
.
Bemærk: Fra en iteration til en anden, så kan man ikke bare rette direkte i cells
.
Så vil de omkringliggende celler nemlig muligvis få et andet antal naboer, hvilket kan give forkerte resultater.
Derfor er der lavet et andet M×N bræt kaldet cells_result
, hvor resultat af en regel gemmes over i.
Når alle celler er blevet behandlet, kopieres cells_result
over i cells
.
Nedenfor finder man filer til at komme i gang. Det er kun nødvendigt at rette i program.c
.
Simuleringen er brudt ned i en del funktioner, som hver gør en lille ting.
Det vil sige at programmeret allerede er struktureret, men funktionerne bare mangler at blive udfyldt.
Har man blod på tanden til selv at prøve kræfter med at lave strukturen, så kan man blot se bort fra funktionerne.
Når man har fået simuleringen til at virke, så kan man rette i setup_board
for at få et anderledes start-bræt.
Hjælp til at komme i gang
- Start med at lave
get_cell
ogset_result_cell
. Disse tilgårcells
og rettercells_result
respektivt, men her er mulighed for at tjekke for om den række og kolonne man har angivet er gyldig. - Dernæst
copy_result_back
. Når den virker skulle skærmen gerne blive hel blank, dacells_result
starter med at være tom og når den overskrivercells
bliver brættet der vises også tomt. - Herefter
count_neighbors
, der kigger på de 8 celler rundt om den nuværende og tæller op hvor mange der er i live. Her børget_cell
bruges. - Til sidst
apply_rules
, der anvender reglerne ovenfor på hver celle og gemmer icells_result
. Her børget_cell
ogset_result_cell
bruges. - Prøv at rette i
setup_board
for at lave et andet start-bræt. Kig på Wikipedia-siden nedenfor for inspiration. Der er nogle funktioner til at indsætte nogle få interessante strukturer som blinkers og gliders nederst iprogram.c
.
Filer
Links
- https://en.wikipedia.org/wiki/Conway’s_Game_of_Life
- http://www.scholarpedia.org/article/Game_of_Life
- http://www.bitstorm.org/gameoflife/ (Online Game of Life til inspiration)