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:
Fri Dec 18 00:08:24 2015 +0000
Revision:
5:1c9223c17976
Parent:
4:6edc72b38ec2
Child:
7:f6d73bba9c4c
Updated the demo with the updated RA8875 library.

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