Stap 3: Conway spel van leven 's
Conway's spel van het leven is een nul spelerspel is het object om te zetten in een startende patroon en zien wat er gebeurt. De regels zijn eenvoudig, u beginnen met een patroon in een raster. Elke plek in het raster heet een cel. Elke cel kan worden hetzij of uitschakelen. Eerst het programma kijkt naar alle cellen en telt het aantal aangrenzende cellen die eromheen staan. Het draait dan alle cellen in- of uitschakelen volgens de volgende regels.
Als minder dan twee aangrenzende cellen op is de cel uitgeschakeld, die onder de bevolking.
Als meer dan drie aangrenzende cellen op is de cel uitgeschakeld, vertegenwoordigt meer dan de bevolking.
Een cel die is uitgeschakeld is als precies drie aangrenzende op ingeschakeld.
Kopieer/Plak de code in de Arduino IDE, uploaden, open de seriële monitor en de baudrate vastgesteldop 115200. Het programma zal u tonen het uitgangspunt patroon en gewacht op invoer van. Wanneer u op een willekeurige toets drukt zal het programma beginnen te lopen en blijven totdat u de kracht knipt of druk op reset.
U kunt het eerste patroon wijzigen door het veranderen van de nullen en enen in de matrix in het programma. Zoeken Wikipedia voor "Conway's game of life" vinden meer interessante patronen, of experimenteren met enkele van uw eigen.
/******************************************************* * Filename: life.ino * * Conway's game of life *******************************************************/ byte start[14][42]={ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0}, {0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; byte count[14][42]; long iterations = 0; /********************************************************** * The setup() function, runs at startup. **********************************************************/ void setup() { Serial.begin(115200); } /********************************************************* * The loop() function, runs continuos when setup finishes. *********************************************************/ void loop() { for(int i=1;i<14;i++) // Display results. { for(int j=1;j<41;j++) { if(start[i][j]==0) Serial.print(" "); else Serial.print(" } Serial.println(" "); } iterations++; Serial.print(iterations); Serial.println(" iterations"); delay(500); if(iterations==1) { while(Serial.available() ==0); char sp = Serial.read(); } /*******************************************************/ for(int i=0;i<14;i++) // Zero counts from previous iteration. { for(int j=0;j<41;j++) { count[i][j]=0; } } /*******************************************************/ for(int i=1;i<14;i++) // Count adjacent live cells. { for(int j=1;j<41;j++) { if(start[i-1][j-1]==1) count[i][j]++; if(start[i-1][j]==1) count[i][j]++; if(start[i-1][j+1]==1) count[i][j]++; if(start[i][j-1]==1) count[i][j]++; if(start[i][j+1]==1) count[i][j]++; if(start[i+1][j-1]==1) count[i][j]++; if(start[i+1][j]==1) count[i][j]++; if(start[i+1][j+1]==1) count[i][j]++; } } /*******************************************************/ for(int i=1;i<14;i++) // Switch on/off cells. { for(int j=1;j<41;j++) { if (count[i][j]<2) start[i][j]=0; if (count[i][j]>3) start[i][j]=0; if (count[i][j]==3) start[i][j]=1; } } } // End of loop()