Conway's Game of Life setup to run by itself on a Serial 4D Systems 3.2" LCD. Does not yet use the touch screen.

Dependencies:   4DGL mbed

Committer:
copperd
Date:
Wed Dec 22 01:12:37 2010 +0000
Revision:
1:714e68b0ba58
Parent:
0:3e9d11eb5a2e
2nd public, It looks nicer with a black background

Who changed what in which revision?

UserRevisionLine numberNew contents of line
copperd 0:3e9d11eb5a2e 1 #include "mbed.h"
copperd 0:3e9d11eb5a2e 2 #include "TFT_4DGL.h"
copperd 0:3e9d11eb5a2e 3 unsigned short int displayold[26][35];
copperd 0:3e9d11eb5a2e 4 unsigned short int displaynew[26][35];
copperd 0:3e9d11eb5a2e 5 int sx,sy,clst,x,y,test,loops;
copperd 0:3e9d11eb5a2e 6 TFT_4DGL ecran(p9,p10,p11); // serial tx, serial rx, reset pin;
copperd 0:3e9d11eb5a2e 7
copperd 0:3e9d11eb5a2e 8 int main() {
copperd 0:3e9d11eb5a2e 9
copperd 0:3e9d11eb5a2e 10 srand(1); // Random seed
copperd 0:3e9d11eb5a2e 11 ecran.baudrate(115200);
copperd 1:714e68b0ba58 12 ecran.background_color(BLACK);
copperd 0:3e9d11eb5a2e 13 ecran.pen_size(SOLID);
copperd 0:3e9d11eb5a2e 14 // Set up Grid
copperd 0:3e9d11eb5a2e 15 // Display field is 34 x 25
copperd 0:3e9d11eb5a2e 16 y = 0;
copperd 0:3e9d11eb5a2e 17 x = 0;
copperd 0:3e9d11eb5a2e 18 for (sy = 1; sy <=34;sy++)
copperd 0:3e9d11eb5a2e 19 {
copperd 0:3e9d11eb5a2e 20 y=sy+1*sy*8;
copperd 0:3e9d11eb5a2e 21 ecran.line(9,y,233,y,BLUE);
copperd 0:3e9d11eb5a2e 22 y=(sy+1*sy*8)+8;
copperd 0:3e9d11eb5a2e 23 ecran.line(9,y,233,y,BLUE);
copperd 0:3e9d11eb5a2e 24 }
copperd 0:3e9d11eb5a2e 25 for (sx = 1; sx <=25;sx++)
copperd 0:3e9d11eb5a2e 26 {
copperd 0:3e9d11eb5a2e 27 x=sx+1*sx*8;
copperd 0:3e9d11eb5a2e 28 ecran.line(x,9,x,314,BLUE);
copperd 0:3e9d11eb5a2e 29 x=(sx+1*sx*8)+8;
copperd 0:3e9d11eb5a2e 30 ecran.line(x,9,x,314,BLUE);
copperd 0:3e9d11eb5a2e 31 }
copperd 0:3e9d11eb5a2e 32
copperd 0:3e9d11eb5a2e 33
copperd 0:3e9d11eb5a2e 34
copperd 0:3e9d11eb5a2e 35
copperd 0:3e9d11eb5a2e 36
copperd 0:3e9d11eb5a2e 37 // forever run the next code to create a random field every 500 turns and play it out
copperd 0:3e9d11eb5a2e 38 while(1)
copperd 0:3e9d11eb5a2e 39 {
copperd 0:3e9d11eb5a2e 40 // Set up a random field and display
copperd 0:3e9d11eb5a2e 41 for (sy = 1; sy <= 34; sy++)
copperd 0:3e9d11eb5a2e 42 {
copperd 0:3e9d11eb5a2e 43 for (sx = 1; sx <= 25; sx++)
copperd 0:3e9d11eb5a2e 44 {
copperd 0:3e9d11eb5a2e 45
copperd 0:3e9d11eb5a2e 46 if (rand()%10 == 4)
copperd 0:3e9d11eb5a2e 47 {
copperd 0:3e9d11eb5a2e 48 displayold[sx][sy] = 1;
copperd 0:3e9d11eb5a2e 49 ecran.rectangle(((9*sx)+1),((9*sy)+1),((9*sx)+7),((9*sy)+7),RED);
copperd 0:3e9d11eb5a2e 50 }
copperd 0:3e9d11eb5a2e 51 }
copperd 0:3e9d11eb5a2e 52 }
copperd 0:3e9d11eb5a2e 53
copperd 0:3e9d11eb5a2e 54 // create new field from old field and run for 500 turns
copperd 0:3e9d11eb5a2e 55 for (loops = 0;loops <= 500; loops++)
copperd 0:3e9d11eb5a2e 56 {
copperd 0:3e9d11eb5a2e 57 for (sy = 1; sy <= 34; sy++)
copperd 0:3e9d11eb5a2e 58 {
copperd 0:3e9d11eb5a2e 59 for (sx = 1; sx <= 25; sx++)
copperd 0:3e9d11eb5a2e 60 {
copperd 0:3e9d11eb5a2e 61
copperd 0:3e9d11eb5a2e 62 // Cheacking a block if its dead or alive then for neighbors and counting them and putting that in test
copperd 0:3e9d11eb5a2e 63 if (displayold[sx][sy] == 1)
copperd 0:3e9d11eb5a2e 64 {
copperd 0:3e9d11eb5a2e 65 test = displayold[sx-1][sy-1] + displayold[sx][sy-1] + displayold[sx+1][sy-1] + displayold[sx-1][sy] + displayold[sx+1][sy] + displayold[sx-1][sy+1] + displayold[sx][sy+1] + displayold[sx+1][sy+1];
copperd 0:3e9d11eb5a2e 66 if (test == 2 || test == 3)
copperd 0:3e9d11eb5a2e 67 {
copperd 0:3e9d11eb5a2e 68 displaynew[sx][sy] = 1;
copperd 0:3e9d11eb5a2e 69 }
copperd 0:3e9d11eb5a2e 70 else displaynew[sx][sy] = 0;
copperd 0:3e9d11eb5a2e 71 }
copperd 0:3e9d11eb5a2e 72 else
copperd 0:3e9d11eb5a2e 73 {
copperd 0:3e9d11eb5a2e 74 test = displayold[sx-1][sy-1] + displayold[sx][sy-1] + displayold[sx+1][sy-1] + displayold[sx-1][sy] + displayold[sx+1][sy] + displayold[sx-1][sy+1] + displayold[sx][sy+1] + displayold[sx+1][sy+1];
copperd 0:3e9d11eb5a2e 75 if (test == 3)
copperd 0:3e9d11eb5a2e 76 {
copperd 0:3e9d11eb5a2e 77 displaynew[sx][sy] = 1;
copperd 0:3e9d11eb5a2e 78 }
copperd 0:3e9d11eb5a2e 79
copperd 0:3e9d11eb5a2e 80 }
copperd 0:3e9d11eb5a2e 81
copperd 0:3e9d11eb5a2e 82 }
copperd 0:3e9d11eb5a2e 83 }
copperd 0:3e9d11eb5a2e 84 // Now we have a new field created we can update the squares only if they are differnt and move the new array to the old one
copperd 0:3e9d11eb5a2e 85
copperd 0:3e9d11eb5a2e 86 for (sy = 1; sy <= 34; sy++)
copperd 0:3e9d11eb5a2e 87 {
copperd 0:3e9d11eb5a2e 88 for (sx = 1; sx <= 25; sx++)
copperd 0:3e9d11eb5a2e 89 {
copperd 0:3e9d11eb5a2e 90 if (displaynew[sx][sy] != displayold[sx][sy])
copperd 0:3e9d11eb5a2e 91 {
copperd 0:3e9d11eb5a2e 92 displayold[sx][sy] = displaynew[sx][sy];
copperd 0:3e9d11eb5a2e 93 if (displaynew[sx][sy] == 1) ecran.rectangle(((9*sx)+1),((9*sy)+1),((9*sx)+7),((9*sy)+7),RED);
copperd 1:714e68b0ba58 94 else ecran.rectangle(((9*sx)+1),((9*sy)+1),((9*sx)+7),((9*sy)+7),BLACK);
copperd 0:3e9d11eb5a2e 95
copperd 0:3e9d11eb5a2e 96 }
copperd 0:3e9d11eb5a2e 97
copperd 0:3e9d11eb5a2e 98
copperd 0:3e9d11eb5a2e 99 }
copperd 0:3e9d11eb5a2e 100 }
copperd 0:3e9d11eb5a2e 101
copperd 0:3e9d11eb5a2e 102
copperd 0:3e9d11eb5a2e 103 }
copperd 0:3e9d11eb5a2e 104
copperd 0:3e9d11eb5a2e 105 }
copperd 0:3e9d11eb5a2e 106 }