Life-spelet

"Spelet" Life uppfanns av den engelske matematikern John Conway i slutet av 1960-talet, och spreds snabbt över världen efter att det omtalats i en artikel av Martin Gardner i Scientific American. Det är egentligen inget spel i vanlig mening, utan snarast en simulering av hur ett samhälle med primitiva organismer kan tänkas utveckla sig.

Simuleringen utspelar sig i ett rutnät, där varje ruta (cell) kan vara tom, eller innehålla en levande organism -- varje ruta har 8 grannar (4 vinkelrätt och 4 diagonalt).

Vid simuleringens början läggs levande organismer i ett antal av rutorna, och därefter utvecklar sig livet på spelplanen i ett antal generationer enligt följande regler:

Alla regler appliceras samtidigt över hela spelplanen, dvs att det föds en ny levande organism i en ruta påverkar inte grannrutorna förrän tidigast nästa generation (samma gäller om en levande organism skulle dö). Om vi skulle börja ändra i spelplanen medan vi beräknar nästa generation kommer de ännu icke behandlade rutor som angränsar till nyfödda organismer att få för många grannar, medan icke behandlade rutor som angränsar till döende organismer skulle få för få grannar. I figuren nedan skapas liv i rutan markerad med 1 (eftersom precis tre grannar, 2, 4 och 5, innehåller levande organismer) -- om vi räknar denna ruta som levande när vi ser vad som skall hända med rutan markerad med 2 så skulle denna dö av överbefolkning (eftersom vi nu förutom grannarna markerade 3, 4 och 5 även har en granne i 1) -- på motsvarande sätt skulle organismen i rutan markerad med 8 dö av isolation om vi redan hade plockat bort organismen i rutan markerad med 5 (som dör av överbefolkning).

Reglerna kan verka godtyckliga, men är väldigt noga valda för att göra simuleringen så intressant som möjligt.

Uppgift

Din uppgift blir att skriva ett program som låter användaren genomföra simuleringen.

När du skall bestämma nästa generation räcker det att du räknar grannarna i det inre av brädet, du behöver inte behandla kantrutorna (det kan vara lite besvärligt att räkna cirkulärt, runt kanterna - om du ändå skulle vilja göra spelplanen cirkulär så kan du ha stor nytta av operationen mod i klassen CSMath, som hör till kurspaketet).

Med kvadratiska prickar i vårt DotWindow hade det varit omöjligt att urskilja de enskilda prickarna i ett större enfärgat område, för att man skall se de enskilda cellerna (rutorna) i fönstret kan det därför vara lämpligt att använda möjligheten att rita runda prickar i ett DotWindow -- figuren nedan visar ett DotWindow med svart bakgrund, och gråa och gulaktiga prickar. Fönstret har 30 prickars bredd, 20 prickars höjd och prickar som har storleken 20 pixlar.

Hur man gör för att rita cirkulära prickar i ett DotWindow beskrivs i dokumentationen av kurspaketet.

Krav för godkänt

Tips

Några länkar

En sökning på "game of life" ger många 10-tals miljoner träffar på nätet, för den nyfikne kan följande rekommenderas: