Conway's game of life applied to the mbed and an RA8875 LCD.

Dependencies:   LifeRules mbed RA8875

Inspired by a forum discussion on the mbed site, this version was scaled to support up to a 480x272 display - in a monochrome mode, or at a lower resolution in color (the color shows simple animation for birthing and dying cells).

Leveraging the LifeRules class, the game can be easily adapted to other displays - whether monochrome or color.

By default, this version allocates memory from the Ethernet ram banks, so avoids the memory limitations of some designs.

It should be simple to adapt it to any display - color or b&w, high or low resolution.

Committer:
WiredHome
Date:
Sun Dec 28 23:15:05 2014 +0000
Revision:
4:6edc72b38ec2
Parent:
3:1139b132f983
Child:
5:1c9223c17976
Minor update for documentation purposes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 2:f4aece10ba62 1 // game of life implementation inspired by this forum thread
WiredHome 2:f4aece10ba62 2 // http://mbed.org/forum/helloworld/topic/4822/
WiredHome 2:f4aece10ba62 3 //
WiredHome 0:d268818ad088 4 #include "mbed.h"
WiredHome 0:d268818ad088 5 #include "RA8875.h"
WiredHome 0:d268818ad088 6 #include "LifeRules.h"
WiredHome 0:d268818ad088 7
WiredHome 0:d268818ad088 8 // Define the life-map size
WiredHome 3:1139b132f983 9 #define LIFE_W 150
WiredHome 3:1139b132f983 10 #define LIFE_H 100
WiredHome 3:1139b132f983 11 #define LIFE_C 2 /* 1 = monochrome, 2 = color */
WiredHome 3:1139b132f983 12 #define LIFE_Z 2 /* Zoom factor */
WiredHome 0:d268818ad088 13
WiredHome 3:1139b132f983 14 // Try to check if there is enough memory (for LPC1768)
WiredHome 3:1139b132f983 15 #if LIFE_W * LIFE_H * LIFE_C * 2 / 8 > 0x8000
WiredHome 3:1139b132f983 16 #error "Sorry, but there isn't this much memory on an LPC1768"
WiredHome 3:1139b132f983 17 #endif
WiredHome 0:d268818ad088 18
WiredHome 0:d268818ad088 19 extern "C" void mbed_reset();
WiredHome 0:d268818ad088 20
WiredHome 0:d268818ad088 21 //#define DEBUG "main"
WiredHome 0:d268818ad088 22 // ...
WiredHome 0:d268818ad088 23 // INFO("Stuff to show %d", var); // new-line is automatically appended
WiredHome 0:d268818ad088 24 //
WiredHome 0:d268818ad088 25 #if (defined(DEBUG) && !defined(TARGET_LPC11U24))
WiredHome 0:d268818ad088 26 #define INFO(x, ...) std::printf("[INF %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
WiredHome 0:d268818ad088 27 #define WARN(x, ...) std::printf("[WRN %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
WiredHome 0:d268818ad088 28 #define ERR(x, ...) std::printf("[ERR %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
WiredHome 0:d268818ad088 29 #else
WiredHome 0:d268818ad088 30 #define INFO(x, ...)
WiredHome 0:d268818ad088 31 #define WARN(x, ...)
WiredHome 0:d268818ad088 32 #define ERR(x, ...)
WiredHome 0:d268818ad088 33 #endif
WiredHome 0:d268818ad088 34
WiredHome 0:d268818ad088 35
WiredHome 3:1139b132f983 36 #if LIFE_C == 2
WiredHome 3:1139b132f983 37 #define LIFE_CLR Life::color
WiredHome 3:1139b132f983 38 #else
WiredHome 3:1139b132f983 39 #define LIFE_CLR Life::monochrome
WiredHome 3:1139b132f983 40 #endif
WiredHome 3:1139b132f983 41
WiredHome 3:1139b132f983 42 Life life(LIFE_W, LIFE_H, LIFE_CLR);
WiredHome 0:d268818ad088 43
WiredHome 3:1139b132f983 44 // NOT USING p21, but the mbed lib v82 will not work if NC is
WiredHome 3:1139b132f983 45 // in the constructor.
WiredHome 3:1139b132f983 46 // See thread http://mbed.org/forum/bugs-suggestions/topic/4859/
WiredHome 2:f4aece10ba62 47 RA8875 lcd(p5, p6, p7, p12, p21, "tft");
WiredHome 0:d268818ad088 48
WiredHome 3:1139b132f983 49 // Define the screen size (may be fixed in the display driver)
WiredHome 3:1139b132f983 50 #define SCREEN_W 480
WiredHome 3:1139b132f983 51 #define SCREEN_H 272
WiredHome 3:1139b132f983 52
WiredHome 0:d268818ad088 53 // Where on screen do we locate it?
WiredHome 3:1139b132f983 54 #if LIFE_W * LIFE_Z < SCREEN_W
WiredHome 3:1139b132f983 55 #define H_OFFSET -1
WiredHome 3:1139b132f983 56 #else
WiredHome 3:1139b132f983 57 #define H_OFFSET 0
WiredHome 3:1139b132f983 58 #endif
WiredHome 0:d268818ad088 59
WiredHome 3:1139b132f983 60 #if LIFE_H * LIFE_Z < SCREEN_H
WiredHome 3:1139b132f983 61 #define V_OFFSET -1
WiredHome 3:1139b132f983 62 #else
WiredHome 3:1139b132f983 63 #define V_OFFSET 0
WiredHome 3:1139b132f983 64 #endif
WiredHome 0:d268818ad088 65
WiredHome 3:1139b132f983 66 #define LIFE_OFFSET_X (SCREEN_W - (LIFE_W * LIFE_Z) + H_OFFSET)
WiredHome 3:1139b132f983 67 #define LIFE_OFFSET_Y (SCREEN_H - (LIFE_H * LIFE_Z) + V_OFFSET)
WiredHome 3:1139b132f983 68
WiredHome 3:1139b132f983 69 unsigned char imgbuffer[3*LIFE_W]; // from forum thread...
WiredHome 0:d268818ad088 70 FILE *img;
WiredHome 0:d268818ad088 71
WiredHome 0:d268818ad088 72 LocalFileSystem local("local"); //file system
WiredHome 0:d268818ad088 73 Serial pc(USBTX,USBRX); // for debugging
WiredHome 0:d268818ad088 74
WiredHome 0:d268818ad088 75 int msDelay = 1000; //delay between frames
WiredHome 0:d268818ad088 76
WiredHome 0:d268818ad088 77 void CheckForUserInteraction(void);
WiredHome 0:d268818ad088 78 void genrand(); //random start
WiredHome 0:d268818ad088 79 void genglidergun(); //glider gun
WiredHome 0:d268818ad088 80 void genglider(); //glider
WiredHome 0:d268818ad088 81 void genship1(); //light weight ship
WiredHome 0:d268818ad088 82 void genBMP(); //from image
WiredHome 0:d268818ad088 83 void gentest();
WiredHome 0:d268818ad088 84 void genBlinker();
WiredHome 0:d268818ad088 85
WiredHome 2:f4aece10ba62 86 void ScreenUpdate()
WiredHome 0:d268818ad088 87 {
WiredHome 3:1139b132f983 88 lcd.window(LIFE_OFFSET_X, LIFE_OFFSET_Y, LIFE_W * LIFE_Z, LIFE_H * LIFE_Z);
WiredHome 0:d268818ad088 89 lcd._StartGraphicsStream();
WiredHome 0:d268818ad088 90 for (int j = 0; j < LIFE_H; j++) {
WiredHome 3:1139b132f983 91 for (int Zx = 0; Zx < LIFE_Z; Zx++) {
WiredHome 3:1139b132f983 92 for (int i = 0; i < LIFE_W; i++) {
WiredHome 3:1139b132f983 93 Life::ValueOfLife lifeState = life.getbit(i,j);
WiredHome 3:1139b132f983 94 color_t p;
WiredHome 3:1139b132f983 95 switch (lifeState) {
WiredHome 3:1139b132f983 96 case Life::dead:
WiredHome 3:1139b132f983 97 p = Black;
WiredHome 3:1139b132f983 98 break;
WiredHome 3:1139b132f983 99 case Life::dying:
WiredHome 3:1139b132f983 100 p = RGB(64,0,0);
WiredHome 3:1139b132f983 101 break;
WiredHome 3:1139b132f983 102 case Life::living:
WiredHome 3:1139b132f983 103 p = Charcoal;
WiredHome 3:1139b132f983 104 break;
WiredHome 3:1139b132f983 105 case Life::birthing:
WiredHome 3:1139b132f983 106 p = Blue;
WiredHome 3:1139b132f983 107 break;
WiredHome 3:1139b132f983 108 default:
WiredHome 3:1139b132f983 109 p = Orange;
WiredHome 3:1139b132f983 110 ERR(" lifeState = %d\r\n", lifeState);
WiredHome 3:1139b132f983 111 break;
WiredHome 3:1139b132f983 112 }
WiredHome 3:1139b132f983 113 for (int Zy = 0; Zy < LIFE_Z; Zy++) {
WiredHome 3:1139b132f983 114 lcd._putp(p);
WiredHome 3:1139b132f983 115 }
WiredHome 0:d268818ad088 116 }
WiredHome 0:d268818ad088 117 }
WiredHome 0:d268818ad088 118 }
WiredHome 0:d268818ad088 119 lcd._EndGraphicsStream();
WiredHome 0:d268818ad088 120 lcd.WindowMax();
WiredHome 0:d268818ad088 121 }
WiredHome 0:d268818ad088 122
WiredHome 4:6edc72b38ec2 123 int GetScreenCapture(void)
WiredHome 4:6edc72b38ec2 124 {
WiredHome 4:6edc72b38ec2 125 char fqfn[50];
WiredHome 4:6edc72b38ec2 126 int i = 0;
WiredHome 4:6edc72b38ec2 127
WiredHome 4:6edc72b38ec2 128 pc.printf("Screen Capture... ");
WiredHome 4:6edc72b38ec2 129 for (i=1; i< 100; i++) {
WiredHome 4:6edc72b38ec2 130 snprintf(fqfn, sizeof(fqfn), "/local/Screen%02d.bmp", i);
WiredHome 4:6edc72b38ec2 131 FILE * fh = fopen(fqfn, "rb");
WiredHome 4:6edc72b38ec2 132 if (!fh) {
WiredHome 4:6edc72b38ec2 133 lcd.PrintScreen(0,0,480,272,fqfn);
WiredHome 4:6edc72b38ec2 134 pc.printf(" as /local/Screen%02d.bmp\r\n", i);
WiredHome 4:6edc72b38ec2 135 return i;
WiredHome 4:6edc72b38ec2 136 } else {
WiredHome 4:6edc72b38ec2 137 fclose(fh); // close this and try the next
WiredHome 4:6edc72b38ec2 138 }
WiredHome 4:6edc72b38ec2 139 }
WiredHome 4:6edc72b38ec2 140 return 0;
WiredHome 4:6edc72b38ec2 141 }
WiredHome 4:6edc72b38ec2 142
WiredHome 4:6edc72b38ec2 143
WiredHome 0:d268818ad088 144 int main()
WiredHome 0:d268818ad088 145 {
WiredHome 0:d268818ad088 146 pc.baud(460800); // I like a snappy terminal, so crank it up!
WiredHome 0:d268818ad088 147 pc.printf("\r\nConway's Game of Life - Build " __DATE__ " " __TIME__ "\r\n");
WiredHome 0:d268818ad088 148
WiredHome 0:d268818ad088 149 lcd.frequency(5000000);
WiredHome 0:d268818ad088 150 lcd.puts("Welcome to Conway's Game of Life\r\n\r\n");
WiredHome 0:d268818ad088 151 INFO("Destroy all life");
WiredHome 0:d268818ad088 152 life.DestroyAllLife();
WiredHome 0:d268818ad088 153 INFO("Life destroyed");
WiredHome 0:d268818ad088 154
WiredHome 0:d268818ad088 155 //pc.printf("choice value = %d\n\r",choice); //for debugging
WiredHome 0:d268818ad088 156 lcd.puts("Please Select Starting Configuration:\r\n");
WiredHome 0:d268818ad088 157 lcd.puts(" 0 = Glider 1 = Random\r\n"
WiredHome 0:d268818ad088 158 " 2 = Ship 3 = Glider Gun\r\n"
WiredHome 0:d268818ad088 159 " 4 = BMP image 5 = Blinker\r\n"
WiredHome 4:6edc72b38ec2 160 " t = test \r\n"
WiredHome 0:d268818ad088 161 " r = reset\r\n"
WiredHome 0:d268818ad088 162 );
WiredHome 0:d268818ad088 163
WiredHome 0:d268818ad088 164 // Frame the life map
WiredHome 3:1139b132f983 165 lcd.rect(LIFE_OFFSET_X-1,LIFE_OFFSET_Y-1,LIFE_OFFSET_X+LIFE_W*LIFE_Z,LIFE_OFFSET_Y+LIFE_H*LIFE_Z,Red);
WiredHome 0:d268818ad088 166 lcd.foreground(Blue);
WiredHome 0:d268818ad088 167 int choice = pc.getc();
WiredHome 0:d268818ad088 168
WiredHome 0:d268818ad088 169 switch ( choice ) {
WiredHome 0:d268818ad088 170 case '0':
WiredHome 0:d268818ad088 171 lcd.puts(">Glider!\r\n");
WiredHome 0:d268818ad088 172 genglider();
WiredHome 0:d268818ad088 173 break;
WiredHome 0:d268818ad088 174 case '1':
WiredHome 0:d268818ad088 175 lcd.puts(">Random!\r\n");
WiredHome 0:d268818ad088 176 genrand();
WiredHome 0:d268818ad088 177 break;
WiredHome 0:d268818ad088 178 case '2':
WiredHome 0:d268818ad088 179 lcd.puts(">Ship!\r\n");
WiredHome 0:d268818ad088 180 genship1();
WiredHome 0:d268818ad088 181 break;
WiredHome 0:d268818ad088 182 case '3':
WiredHome 0:d268818ad088 183 lcd.puts(">Glider Gun!\r\n");
WiredHome 0:d268818ad088 184 genglidergun();
WiredHome 0:d268818ad088 185 break;
WiredHome 0:d268818ad088 186 case '4':
WiredHome 0:d268818ad088 187 lcd.puts(">BMP image!\r\n");
WiredHome 0:d268818ad088 188 genBMP();
WiredHome 0:d268818ad088 189 break;
WiredHome 0:d268818ad088 190 case '5':
WiredHome 0:d268818ad088 191 lcd.puts(">Blinker!\r\n");
WiredHome 0:d268818ad088 192 genBlinker();
WiredHome 0:d268818ad088 193 break;
WiredHome 0:d268818ad088 194 case 't':
WiredHome 0:d268818ad088 195 lcd.puts(">test!\r\n");
WiredHome 0:d268818ad088 196 gentest();
WiredHome 0:d268818ad088 197 break;
WiredHome 0:d268818ad088 198 }
WiredHome 4:6edc72b38ec2 199 lcd.puts("\r\nRuntime Menu:\r\n"
WiredHome 4:6edc72b38ec2 200 " p = PrintScreen\r\n"
WiredHome 0:d268818ad088 201 " + = faster\r\n"
WiredHome 0:d268818ad088 202 " - = slower\r\n"
WiredHome 0:d268818ad088 203 " 0-9 = updates/sec\r\n"
WiredHome 0:d268818ad088 204 );
WiredHome 0:d268818ad088 205
WiredHome 0:d268818ad088 206 ScreenUpdate();
WiredHome 2:f4aece10ba62 207 wait(1);
WiredHome 0:d268818ad088 208
WiredHome 0:d268818ad088 209 while(1) {
WiredHome 0:d268818ad088 210 CheckForUserInteraction();
WiredHome 0:d268818ad088 211 if (msDelay >= 0) {
WiredHome 0:d268818ad088 212 static uint16_t toggle = 0;
WiredHome 0:d268818ad088 213
WiredHome 0:d268818ad088 214 if ((++toggle & 1) == 0) {
WiredHome 0:d268818ad088 215 life.GenerationStep();
WiredHome 0:d268818ad088 216 } else {
WiredHome 0:d268818ad088 217 life.UpdateLifeCycle();
WiredHome 0:d268818ad088 218 }
WiredHome 0:d268818ad088 219 ScreenUpdate();
WiredHome 0:d268818ad088 220 wait_ms(msDelay);
WiredHome 0:d268818ad088 221 }
WiredHome 0:d268818ad088 222 }
WiredHome 0:d268818ad088 223 }
WiredHome 0:d268818ad088 224
WiredHome 0:d268818ad088 225 void CheckForUserInteraction(void)
WiredHome 0:d268818ad088 226 {
WiredHome 0:d268818ad088 227 while (pc.readable()) {
WiredHome 0:d268818ad088 228 int c = pc.getc();
WiredHome 0:d268818ad088 229 if (c == '+' && msDelay >= 0)
WiredHome 0:d268818ad088 230 msDelay -= 10;
WiredHome 0:d268818ad088 231 else if (c == '-' && msDelay < 1000)
WiredHome 0:d268818ad088 232 msDelay += 10;
WiredHome 0:d268818ad088 233 else if (c >= '0' && c <= '9') {
WiredHome 0:d268818ad088 234 if (c == '0')
WiredHome 0:d268818ad088 235 msDelay = -1;
WiredHome 0:d268818ad088 236 else
WiredHome 0:d268818ad088 237 msDelay = 10 * ((1000 / (c - '0'))/10);
WiredHome 0:d268818ad088 238 } else if (c == 'r')
WiredHome 0:d268818ad088 239 mbed_reset();
WiredHome 4:6edc72b38ec2 240 else if (c == 'p')
WiredHome 4:6edc72b38ec2 241 GetScreenCapture();
WiredHome 0:d268818ad088 242 lcd.locate(49, 0);
WiredHome 0:d268818ad088 243 if (msDelay < 0) {
WiredHome 0:d268818ad088 244 msDelay = -10;
WiredHome 0:d268818ad088 245 lcd.printf("Paused ");
WiredHome 0:d268818ad088 246 } else {
WiredHome 0:d268818ad088 247 lcd.printf("Delay %4d", msDelay);
WiredHome 0:d268818ad088 248 }
WiredHome 0:d268818ad088 249 }
WiredHome 0:d268818ad088 250 }
WiredHome 0:d268818ad088 251
WiredHome 0:d268818ad088 252
WiredHome 0:d268818ad088 253 void genBlinker()
WiredHome 0:d268818ad088 254 {
WiredHome 0:d268818ad088 255 life.setbit(1,1, Life::living);
WiredHome 0:d268818ad088 256 life.setbit(1,2, Life::living);
WiredHome 0:d268818ad088 257 life.setbit(1,3, Life::living);
WiredHome 0:d268818ad088 258 }
WiredHome 0:d268818ad088 259
WiredHome 0:d268818ad088 260 void gentest()
WiredHome 0:d268818ad088 261 {
WiredHome 0:d268818ad088 262 // Point
WiredHome 0:d268818ad088 263 life.setbit(6,3, Life::living);
WiredHome 0:d268818ad088 264 // Block
WiredHome 0:d268818ad088 265 life.setbit(1,1, Life::living);
WiredHome 0:d268818ad088 266 life.setbit(1,2, Life::living);
WiredHome 0:d268818ad088 267 life.setbit(2,1, Life::living);
WiredHome 0:d268818ad088 268 life.setbit(2,2, Life::living);
WiredHome 0:d268818ad088 269 // Beehive
WiredHome 0:d268818ad088 270 life.setbit(6,1, Life::living);
WiredHome 0:d268818ad088 271 life.setbit(7,1, Life::living);
WiredHome 0:d268818ad088 272 life.setbit(5,2, Life::living);
WiredHome 0:d268818ad088 273 life.setbit(8,2, Life::living);
WiredHome 0:d268818ad088 274 life.setbit(6,3, Life::living);
WiredHome 0:d268818ad088 275 life.setbit(7,3, Life::living);
WiredHome 0:d268818ad088 276 // Blinker
WiredHome 0:d268818ad088 277 life.setbit(11,2, Life::living);
WiredHome 0:d268818ad088 278 life.setbit(12,2, Life::living);
WiredHome 0:d268818ad088 279 life.setbit(13,2, Life::living);
WiredHome 0:d268818ad088 280 // Glider
WiredHome 0:d268818ad088 281 // x
WiredHome 0:d268818ad088 282 // x
WiredHome 0:d268818ad088 283 // xxx
WiredHome 0:d268818ad088 284 life.setbit(2,10, Life::living);
WiredHome 0:d268818ad088 285 life.setbit(3,11, Life::living);
WiredHome 0:d268818ad088 286 life.setbit(1,12, Life::living);
WiredHome 0:d268818ad088 287 life.setbit(2,12, Life::living);
WiredHome 0:d268818ad088 288 life.setbit(3,12, Life::living);
WiredHome 0:d268818ad088 289 }
WiredHome 0:d268818ad088 290
WiredHome 0:d268818ad088 291
WiredHome 0:d268818ad088 292 void genrand()
WiredHome 0:d268818ad088 293 {
WiredHome 0:d268818ad088 294 for (int i = 0; i < LIFE_W; i++) { //loop through each cell
WiredHome 0:d268818ad088 295 for (int j = 0; j < LIFE_H; j++) {
WiredHome 0:d268818ad088 296 if (rand() & 1) { //50% chance
WiredHome 0:d268818ad088 297 life.setbit(i,j, Life::living);
WiredHome 0:d268818ad088 298 }
WiredHome 0:d268818ad088 299 }
WiredHome 0:d268818ad088 300 }
WiredHome 0:d268818ad088 301 }
WiredHome 0:d268818ad088 302
WiredHome 0:d268818ad088 303 void genBMP()
WiredHome 0:d268818ad088 304 {
WiredHome 0:d268818ad088 305 for (int i = 0; i < LIFE_W; i++) {
WiredHome 0:d268818ad088 306 img = fopen("/local/TESTIM~1.BMP", "rb");
WiredHome 0:d268818ad088 307 fseek (img , 54 + (LIFE_W*i*3) , SEEK_SET);
WiredHome 0:d268818ad088 308 fread(imgbuffer, (LIFE_W*3), 1, img);
WiredHome 0:d268818ad088 309 fclose(img);
WiredHome 0:d268818ad088 310 for (int j = 0; j < LIFE_H; j++) {
WiredHome 0:d268818ad088 311 int red = imgbuffer[j*3];
WiredHome 0:d268818ad088 312 if (red == 0) {
WiredHome 0:d268818ad088 313 life.setbit(j, LIFE_H - 1 - i, Life::living);
WiredHome 0:d268818ad088 314 }
WiredHome 0:d268818ad088 315 }
WiredHome 0:d268818ad088 316 }
WiredHome 0:d268818ad088 317 }
WiredHome 0:d268818ad088 318
WiredHome 0:d268818ad088 319
WiredHome 0:d268818ad088 320 void genglider() //set certain pixels
WiredHome 0:d268818ad088 321 {
WiredHome 0:d268818ad088 322 life.setbit(0,0, Life::living);
WiredHome 0:d268818ad088 323 life.setbit(1,1, Life::living);
WiredHome 0:d268818ad088 324 life.setbit(1,2, Life::living);
WiredHome 0:d268818ad088 325 life.setbit(2,0, Life::living);
WiredHome 0:d268818ad088 326 life.setbit(2,1, Life::living);
WiredHome 0:d268818ad088 327 }
WiredHome 0:d268818ad088 328
WiredHome 0:d268818ad088 329 void genglidergun() //set certain pixels
WiredHome 0:d268818ad088 330 {
WiredHome 0:d268818ad088 331 life.setbit(0,7, Life::living); //gun
WiredHome 0:d268818ad088 332 life.setbit(0,8, Life::living);
WiredHome 0:d268818ad088 333 life.setbit(1,7, Life::living);
WiredHome 0:d268818ad088 334 life.setbit(1,8, Life::living);
WiredHome 0:d268818ad088 335 life.setbit(8,8, Life::living);
WiredHome 0:d268818ad088 336 life.setbit(8,9, Life::living);
WiredHome 0:d268818ad088 337 life.setbit(9,7, Life::living);
WiredHome 0:d268818ad088 338 life.setbit(9,9, Life::living);
WiredHome 0:d268818ad088 339 life.setbit(10,7, Life::living);
WiredHome 0:d268818ad088 340 life.setbit(10,8, Life::living);
WiredHome 0:d268818ad088 341 life.setbit(16,9, Life::living);
WiredHome 0:d268818ad088 342 life.setbit(16,10, Life::living);
WiredHome 0:d268818ad088 343 life.setbit(16,11, Life::living);
WiredHome 0:d268818ad088 344 life.setbit(17,9, Life::living);
WiredHome 0:d268818ad088 345 life.setbit(18,10, Life::living);
WiredHome 0:d268818ad088 346 life.setbit(22,6, Life::living);
WiredHome 0:d268818ad088 347 life.setbit(22,7, Life::living);
WiredHome 0:d268818ad088 348 life.setbit(23,5, Life::living);
WiredHome 0:d268818ad088 349 life.setbit(23,7, Life::living);
WiredHome 0:d268818ad088 350 life.setbit(24,5, Life::living);
WiredHome 0:d268818ad088 351 life.setbit(24,6, Life::living);
WiredHome 0:d268818ad088 352 life.setbit(24,17, Life::living);
WiredHome 0:d268818ad088 353 life.setbit(24,18, Life::living);
WiredHome 0:d268818ad088 354 life.setbit(25,17, Life::living);
WiredHome 0:d268818ad088 355 life.setbit(25,19, Life::living);
WiredHome 0:d268818ad088 356 life.setbit(26,17, Life::living);
WiredHome 0:d268818ad088 357 life.setbit(34,5, Life::living);
WiredHome 0:d268818ad088 358 life.setbit(34,6, Life::living);
WiredHome 0:d268818ad088 359 life.setbit(35,5, Life::living);
WiredHome 0:d268818ad088 360 life.setbit(35,6, Life::living);
WiredHome 0:d268818ad088 361 life.setbit(35,12, Life::living);
WiredHome 0:d268818ad088 362 life.setbit(35,13, Life::living);
WiredHome 0:d268818ad088 363 life.setbit(35,14, Life::living);
WiredHome 0:d268818ad088 364 life.setbit(36,12, Life::living);
WiredHome 0:d268818ad088 365 life.setbit(37,13, Life::living);
WiredHome 0:d268818ad088 366
WiredHome 0:d268818ad088 367 life.setbit(50,38, Life::living); //eater
WiredHome 0:d268818ad088 368 life.setbit(51,38, Life::living);
WiredHome 0:d268818ad088 369 life.setbit(50,39, Life::living);
WiredHome 0:d268818ad088 370 life.setbit(52,39, Life::living);
WiredHome 0:d268818ad088 371 life.setbit(52,40, Life::living);
WiredHome 0:d268818ad088 372 life.setbit(52,41, Life::living);
WiredHome 0:d268818ad088 373 life.setbit(53,41, Life::living);
WiredHome 0:d268818ad088 374 }
WiredHome 0:d268818ad088 375
WiredHome 0:d268818ad088 376 void genship1() //set certain pixels
WiredHome 0:d268818ad088 377 {
WiredHome 0:d268818ad088 378 life.setbit(10,10, Life::living);
WiredHome 0:d268818ad088 379 life.setbit(13,10, Life::living);
WiredHome 0:d268818ad088 380 life.setbit(14,11, Life::living);
WiredHome 0:d268818ad088 381 life.setbit(10,12, Life::living);
WiredHome 0:d268818ad088 382 life.setbit(14,12, Life::living);
WiredHome 0:d268818ad088 383 life.setbit(11,13, Life::living);
WiredHome 0:d268818ad088 384 life.setbit(12,13, Life::living);
WiredHome 0:d268818ad088 385 life.setbit(13,13, Life::living);
WiredHome 0:d268818ad088 386 life.setbit(14,13, Life::living);
WiredHome 0:d268818ad088 387 }
WiredHome 0:d268818ad088 388
WiredHome 0:d268818ad088 389
WiredHome 0:d268818ad088 390