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.
main.cpp@1:714e68b0ba58, 2010-12-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |