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:
Sat Jan 23 17:26:49 2016 +0000
Revision:
7:f6d73bba9c4c
Parent:
5:1c9223c17976
Child:
8:d0e048eef5db
Library updates

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 7:f6d73bba9c4c 4 #include "mbed.h" // v112
WiredHome 7:f6d73bba9c4c 5 #include "RA8875.h" // v102
WiredHome 7:f6d73bba9c4c 6 #include "LifeRules.h" // v3
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 7:f6d73bba9c4c 97 p = RGB(0,0,0);
WiredHome 3:1139b132f983 98 break;
WiredHome 3:1139b132f983 99 case Life::dying:
WiredHome 7:f6d73bba9c4c 100 p = RGB(192,0,0);
WiredHome 3:1139b132f983 101 break;
WiredHome 3:1139b132f983 102 case Life::living:
WiredHome 7:f6d73bba9c4c 103 p = RGB(64,255,64);
WiredHome 3:1139b132f983 104 break;
WiredHome 3:1139b132f983 105 case Life::birthing:
WiredHome 7:f6d73bba9c4c 106 p = RGB(0,0,192);
WiredHome 3:1139b132f983 107 break;
WiredHome 3:1139b132f983 108 default:
WiredHome 7:f6d73bba9c4c 109 p = RGB(192,192,0); // Should never see this one...
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 5:1c9223c17976 149 lcd.init();
WiredHome 0:d268818ad088 150 lcd.frequency(5000000);
WiredHome 0:d268818ad088 151 lcd.puts("Welcome to Conway's Game of Life\r\n\r\n");
WiredHome 0:d268818ad088 152 INFO("Destroy all life");
WiredHome 0:d268818ad088 153 life.DestroyAllLife();
WiredHome 0:d268818ad088 154 INFO("Life destroyed");
WiredHome 0:d268818ad088 155
WiredHome 7:f6d73bba9c4c 156 lcd.foreground(RGB(255,255,255));
WiredHome 7:f6d73bba9c4c 157
WiredHome 0:d268818ad088 158 //pc.printf("choice value = %d\n\r",choice); //for debugging
WiredHome 0:d268818ad088 159 lcd.puts("Please Select Starting Configuration:\r\n");
WiredHome 0:d268818ad088 160 lcd.puts(" 0 = Glider 1 = Random\r\n"
WiredHome 0:d268818ad088 161 " 2 = Ship 3 = Glider Gun\r\n"
WiredHome 0:d268818ad088 162 " 4 = BMP image 5 = Blinker\r\n"
WiredHome 4:6edc72b38ec2 163 " t = test \r\n"
WiredHome 0:d268818ad088 164 " r = reset\r\n"
WiredHome 0:d268818ad088 165 );
WiredHome 0:d268818ad088 166
WiredHome 0:d268818ad088 167 // Frame the life map
WiredHome 3:1139b132f983 168 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 169 lcd.foreground(Blue);
WiredHome 0:d268818ad088 170 int choice = pc.getc();
WiredHome 0:d268818ad088 171
WiredHome 0:d268818ad088 172 switch ( choice ) {
WiredHome 0:d268818ad088 173 case '0':
WiredHome 0:d268818ad088 174 lcd.puts(">Glider!\r\n");
WiredHome 0:d268818ad088 175 genglider();
WiredHome 0:d268818ad088 176 break;
WiredHome 0:d268818ad088 177 case '1':
WiredHome 0:d268818ad088 178 lcd.puts(">Random!\r\n");
WiredHome 0:d268818ad088 179 genrand();
WiredHome 0:d268818ad088 180 break;
WiredHome 0:d268818ad088 181 case '2':
WiredHome 0:d268818ad088 182 lcd.puts(">Ship!\r\n");
WiredHome 0:d268818ad088 183 genship1();
WiredHome 0:d268818ad088 184 break;
WiredHome 0:d268818ad088 185 case '3':
WiredHome 0:d268818ad088 186 lcd.puts(">Glider Gun!\r\n");
WiredHome 0:d268818ad088 187 genglidergun();
WiredHome 0:d268818ad088 188 break;
WiredHome 0:d268818ad088 189 case '4':
WiredHome 0:d268818ad088 190 lcd.puts(">BMP image!\r\n");
WiredHome 0:d268818ad088 191 genBMP();
WiredHome 0:d268818ad088 192 break;
WiredHome 0:d268818ad088 193 case '5':
WiredHome 0:d268818ad088 194 lcd.puts(">Blinker!\r\n");
WiredHome 0:d268818ad088 195 genBlinker();
WiredHome 0:d268818ad088 196 break;
WiredHome 0:d268818ad088 197 case 't':
WiredHome 0:d268818ad088 198 lcd.puts(">test!\r\n");
WiredHome 0:d268818ad088 199 gentest();
WiredHome 0:d268818ad088 200 break;
WiredHome 0:d268818ad088 201 }
WiredHome 4:6edc72b38ec2 202 lcd.puts("\r\nRuntime Menu:\r\n"
WiredHome 4:6edc72b38ec2 203 " p = PrintScreen\r\n"
WiredHome 0:d268818ad088 204 " + = faster\r\n"
WiredHome 0:d268818ad088 205 " - = slower\r\n"
WiredHome 0:d268818ad088 206 " 0-9 = updates/sec\r\n"
WiredHome 0:d268818ad088 207 );
WiredHome 0:d268818ad088 208
WiredHome 0:d268818ad088 209 ScreenUpdate();
WiredHome 2:f4aece10ba62 210 wait(1);
WiredHome 0:d268818ad088 211
WiredHome 0:d268818ad088 212 while(1) {
WiredHome 0:d268818ad088 213 CheckForUserInteraction();
WiredHome 0:d268818ad088 214 if (msDelay >= 0) {
WiredHome 0:d268818ad088 215 static uint16_t toggle = 0;
WiredHome 0:d268818ad088 216
WiredHome 0:d268818ad088 217 if ((++toggle & 1) == 0) {
WiredHome 0:d268818ad088 218 life.GenerationStep();
WiredHome 0:d268818ad088 219 } else {
WiredHome 0:d268818ad088 220 life.UpdateLifeCycle();
WiredHome 0:d268818ad088 221 }
WiredHome 0:d268818ad088 222 ScreenUpdate();
WiredHome 0:d268818ad088 223 wait_ms(msDelay);
WiredHome 0:d268818ad088 224 }
WiredHome 0:d268818ad088 225 }
WiredHome 0:d268818ad088 226 }
WiredHome 0:d268818ad088 227
WiredHome 0:d268818ad088 228 void CheckForUserInteraction(void)
WiredHome 0:d268818ad088 229 {
WiredHome 0:d268818ad088 230 while (pc.readable()) {
WiredHome 0:d268818ad088 231 int c = pc.getc();
WiredHome 0:d268818ad088 232 if (c == '+' && msDelay >= 0)
WiredHome 0:d268818ad088 233 msDelay -= 10;
WiredHome 0:d268818ad088 234 else if (c == '-' && msDelay < 1000)
WiredHome 0:d268818ad088 235 msDelay += 10;
WiredHome 0:d268818ad088 236 else if (c >= '0' && c <= '9') {
WiredHome 0:d268818ad088 237 if (c == '0')
WiredHome 0:d268818ad088 238 msDelay = -1;
WiredHome 0:d268818ad088 239 else
WiredHome 0:d268818ad088 240 msDelay = 10 * ((1000 / (c - '0'))/10);
WiredHome 0:d268818ad088 241 } else if (c == 'r')
WiredHome 0:d268818ad088 242 mbed_reset();
WiredHome 4:6edc72b38ec2 243 else if (c == 'p')
WiredHome 4:6edc72b38ec2 244 GetScreenCapture();
WiredHome 0:d268818ad088 245 lcd.locate(49, 0);
WiredHome 0:d268818ad088 246 if (msDelay < 0) {
WiredHome 0:d268818ad088 247 msDelay = -10;
WiredHome 0:d268818ad088 248 lcd.printf("Paused ");
WiredHome 0:d268818ad088 249 } else {
WiredHome 0:d268818ad088 250 lcd.printf("Delay %4d", msDelay);
WiredHome 0:d268818ad088 251 }
WiredHome 0:d268818ad088 252 }
WiredHome 0:d268818ad088 253 }
WiredHome 0:d268818ad088 254
WiredHome 0:d268818ad088 255
WiredHome 0:d268818ad088 256 void genBlinker()
WiredHome 0:d268818ad088 257 {
WiredHome 0:d268818ad088 258 life.setbit(1,1, Life::living);
WiredHome 0:d268818ad088 259 life.setbit(1,2, Life::living);
WiredHome 0:d268818ad088 260 life.setbit(1,3, Life::living);
WiredHome 0:d268818ad088 261 }
WiredHome 0:d268818ad088 262
WiredHome 0:d268818ad088 263 void gentest()
WiredHome 0:d268818ad088 264 {
WiredHome 0:d268818ad088 265 // Point
WiredHome 0:d268818ad088 266 life.setbit(6,3, Life::living);
WiredHome 0:d268818ad088 267 // Block
WiredHome 0:d268818ad088 268 life.setbit(1,1, Life::living);
WiredHome 0:d268818ad088 269 life.setbit(1,2, Life::living);
WiredHome 0:d268818ad088 270 life.setbit(2,1, Life::living);
WiredHome 0:d268818ad088 271 life.setbit(2,2, Life::living);
WiredHome 0:d268818ad088 272 // Beehive
WiredHome 0:d268818ad088 273 life.setbit(6,1, Life::living);
WiredHome 0:d268818ad088 274 life.setbit(7,1, Life::living);
WiredHome 0:d268818ad088 275 life.setbit(5,2, Life::living);
WiredHome 0:d268818ad088 276 life.setbit(8,2, Life::living);
WiredHome 0:d268818ad088 277 life.setbit(6,3, Life::living);
WiredHome 0:d268818ad088 278 life.setbit(7,3, Life::living);
WiredHome 0:d268818ad088 279 // Blinker
WiredHome 0:d268818ad088 280 life.setbit(11,2, Life::living);
WiredHome 0:d268818ad088 281 life.setbit(12,2, Life::living);
WiredHome 0:d268818ad088 282 life.setbit(13,2, Life::living);
WiredHome 0:d268818ad088 283 // Glider
WiredHome 0:d268818ad088 284 // x
WiredHome 0:d268818ad088 285 // x
WiredHome 0:d268818ad088 286 // xxx
WiredHome 0:d268818ad088 287 life.setbit(2,10, Life::living);
WiredHome 0:d268818ad088 288 life.setbit(3,11, Life::living);
WiredHome 0:d268818ad088 289 life.setbit(1,12, Life::living);
WiredHome 0:d268818ad088 290 life.setbit(2,12, Life::living);
WiredHome 0:d268818ad088 291 life.setbit(3,12, Life::living);
WiredHome 0:d268818ad088 292 }
WiredHome 0:d268818ad088 293
WiredHome 0:d268818ad088 294
WiredHome 0:d268818ad088 295 void genrand()
WiredHome 0:d268818ad088 296 {
WiredHome 0:d268818ad088 297 for (int i = 0; i < LIFE_W; i++) { //loop through each cell
WiredHome 0:d268818ad088 298 for (int j = 0; j < LIFE_H; j++) {
WiredHome 0:d268818ad088 299 if (rand() & 1) { //50% chance
WiredHome 0:d268818ad088 300 life.setbit(i,j, Life::living);
WiredHome 0:d268818ad088 301 }
WiredHome 0:d268818ad088 302 }
WiredHome 0:d268818ad088 303 }
WiredHome 0:d268818ad088 304 }
WiredHome 0:d268818ad088 305
WiredHome 0:d268818ad088 306 void genBMP()
WiredHome 0:d268818ad088 307 {
WiredHome 0:d268818ad088 308 for (int i = 0; i < LIFE_W; i++) {
WiredHome 0:d268818ad088 309 img = fopen("/local/TESTIM~1.BMP", "rb");
WiredHome 0:d268818ad088 310 fseek (img , 54 + (LIFE_W*i*3) , SEEK_SET);
WiredHome 0:d268818ad088 311 fread(imgbuffer, (LIFE_W*3), 1, img);
WiredHome 0:d268818ad088 312 fclose(img);
WiredHome 0:d268818ad088 313 for (int j = 0; j < LIFE_H; j++) {
WiredHome 0:d268818ad088 314 int red = imgbuffer[j*3];
WiredHome 0:d268818ad088 315 if (red == 0) {
WiredHome 0:d268818ad088 316 life.setbit(j, LIFE_H - 1 - i, Life::living);
WiredHome 0:d268818ad088 317 }
WiredHome 0:d268818ad088 318 }
WiredHome 0:d268818ad088 319 }
WiredHome 0:d268818ad088 320 }
WiredHome 0:d268818ad088 321
WiredHome 0:d268818ad088 322
WiredHome 0:d268818ad088 323 void genglider() //set certain pixels
WiredHome 0:d268818ad088 324 {
WiredHome 0:d268818ad088 325 life.setbit(0,0, Life::living);
WiredHome 0:d268818ad088 326 life.setbit(1,1, Life::living);
WiredHome 0:d268818ad088 327 life.setbit(1,2, Life::living);
WiredHome 0:d268818ad088 328 life.setbit(2,0, Life::living);
WiredHome 0:d268818ad088 329 life.setbit(2,1, Life::living);
WiredHome 0:d268818ad088 330 }
WiredHome 0:d268818ad088 331
WiredHome 0:d268818ad088 332 void genglidergun() //set certain pixels
WiredHome 0:d268818ad088 333 {
WiredHome 0:d268818ad088 334 life.setbit(0,7, Life::living); //gun
WiredHome 0:d268818ad088 335 life.setbit(0,8, Life::living);
WiredHome 0:d268818ad088 336 life.setbit(1,7, Life::living);
WiredHome 0:d268818ad088 337 life.setbit(1,8, Life::living);
WiredHome 0:d268818ad088 338 life.setbit(8,8, Life::living);
WiredHome 0:d268818ad088 339 life.setbit(8,9, Life::living);
WiredHome 0:d268818ad088 340 life.setbit(9,7, Life::living);
WiredHome 0:d268818ad088 341 life.setbit(9,9, Life::living);
WiredHome 0:d268818ad088 342 life.setbit(10,7, Life::living);
WiredHome 0:d268818ad088 343 life.setbit(10,8, Life::living);
WiredHome 0:d268818ad088 344 life.setbit(16,9, Life::living);
WiredHome 0:d268818ad088 345 life.setbit(16,10, Life::living);
WiredHome 0:d268818ad088 346 life.setbit(16,11, Life::living);
WiredHome 0:d268818ad088 347 life.setbit(17,9, Life::living);
WiredHome 0:d268818ad088 348 life.setbit(18,10, Life::living);
WiredHome 0:d268818ad088 349 life.setbit(22,6, Life::living);
WiredHome 0:d268818ad088 350 life.setbit(22,7, Life::living);
WiredHome 0:d268818ad088 351 life.setbit(23,5, Life::living);
WiredHome 0:d268818ad088 352 life.setbit(23,7, Life::living);
WiredHome 0:d268818ad088 353 life.setbit(24,5, Life::living);
WiredHome 0:d268818ad088 354 life.setbit(24,6, Life::living);
WiredHome 0:d268818ad088 355 life.setbit(24,17, Life::living);
WiredHome 0:d268818ad088 356 life.setbit(24,18, Life::living);
WiredHome 0:d268818ad088 357 life.setbit(25,17, Life::living);
WiredHome 0:d268818ad088 358 life.setbit(25,19, Life::living);
WiredHome 0:d268818ad088 359 life.setbit(26,17, Life::living);
WiredHome 0:d268818ad088 360 life.setbit(34,5, Life::living);
WiredHome 0:d268818ad088 361 life.setbit(34,6, Life::living);
WiredHome 0:d268818ad088 362 life.setbit(35,5, Life::living);
WiredHome 0:d268818ad088 363 life.setbit(35,6, Life::living);
WiredHome 0:d268818ad088 364 life.setbit(35,12, Life::living);
WiredHome 0:d268818ad088 365 life.setbit(35,13, Life::living);
WiredHome 0:d268818ad088 366 life.setbit(35,14, Life::living);
WiredHome 0:d268818ad088 367 life.setbit(36,12, Life::living);
WiredHome 0:d268818ad088 368 life.setbit(37,13, Life::living);
WiredHome 0:d268818ad088 369
WiredHome 0:d268818ad088 370 life.setbit(50,38, Life::living); //eater
WiredHome 0:d268818ad088 371 life.setbit(51,38, Life::living);
WiredHome 0:d268818ad088 372 life.setbit(50,39, Life::living);
WiredHome 0:d268818ad088 373 life.setbit(52,39, Life::living);
WiredHome 0:d268818ad088 374 life.setbit(52,40, Life::living);
WiredHome 0:d268818ad088 375 life.setbit(52,41, Life::living);
WiredHome 0:d268818ad088 376 life.setbit(53,41, Life::living);
WiredHome 0:d268818ad088 377 }
WiredHome 0:d268818ad088 378
WiredHome 0:d268818ad088 379 void genship1() //set certain pixels
WiredHome 0:d268818ad088 380 {
WiredHome 0:d268818ad088 381 life.setbit(10,10, Life::living);
WiredHome 0:d268818ad088 382 life.setbit(13,10, Life::living);
WiredHome 0:d268818ad088 383 life.setbit(14,11, Life::living);
WiredHome 0:d268818ad088 384 life.setbit(10,12, Life::living);
WiredHome 0:d268818ad088 385 life.setbit(14,12, Life::living);
WiredHome 0:d268818ad088 386 life.setbit(11,13, Life::living);
WiredHome 0:d268818ad088 387 life.setbit(12,13, Life::living);
WiredHome 0:d268818ad088 388 life.setbit(13,13, Life::living);
WiredHome 0:d268818ad088 389 life.setbit(14,13, Life::living);
WiredHome 0:d268818ad088 390 }
WiredHome 0:d268818ad088 391
WiredHome 0:d268818ad088 392
WiredHome 0:d268818ad088 393