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:
Thu Apr 24 11:19:56 2014 +0000
Revision:
3:1139b132f983
Parent:
2:f4aece10ba62
Child:
4:6edc72b38ec2
Enhanced to add a Zoom setting, so a smaller Life Map can be expanded in size for the display.

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