Simulation Program (Motivated John Conway’s Game of Life) - C/C++
In this little simulation demo I created four simple rules, of which can be activated by uncommenting them out in the source code. Though nothing too complex emerges, I still liked some the resulting behavior.
Particularly, rule1(), results in colors slowly grouping together in various forms. It may be hard to immediately noticed so watch carefully. This was motivated by John Conway’s Game of Life.
The program was written in C/C++, all graphics are done using SDL
The whole source can be found here main.cpp
Compileg++ main.cpp -lSDL
Run./a.out
![]() |
![]() |
![]() |
![]() |
Rule1()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | for(int x = 0; x < worldWidth; x++) { for(int y = 0; y < worldHeight; y++) { int r = world[x][y].r; int g = world[x][y].g; int b = world[x][y].b; /* o o o o x o o o o */ // RULES if(x > 0 && y > 0) { // top left if(world[x - 1][y - 1].r > 200) { r+=2; g--; b--; } if(world[x - 1][y - 1].g > 200) { r--; g+=2; b--; } if(world[x - 1][y - 1].b > 200) { r--; g--; b+=2; } } if(y > 0) { // top if(world[x][y - 1].r > 200) { r+=2; g--; b--; } if(world[x][y - 1].g > 200) { r--; g+=2; b--; } if(world[x][y - 1].b > 200) { r--; g--; b+=2; } } if(x < worldWidth - 1 && y > 0) { // top right if(world[x + 1][y - 1].r > 200) { r+=2; g--; b--; } if(world[x + 1][y - 1].g > 200) { r--; g+=2; b--; } if(world[x + 1][y - 1].b > 200) { r--; g--; b+=2; } } if(x > 0) { // left if(world[x - 1][y].r > 200) { r+=2; g--; b--; } if(world[x - 1][y].g > 200) { r--; g+=2; b--; } if(world[x - 1][y].b > 200) { r--; g--; b+=2; } } if(x < worldWidth - 1) { // right if(world[x + 1][y].r > 200) { r+=2; g--; b--; } if(world[x + 1][y].g > 200) { r--; g+=2; b--; } if(world[x + 1][y].b > 200) { r--; g--; b+=2; } } if(x > 0 && y < worldHeight - 1) { // bottom left if(world[x - 1][y + 1].r > 200) { r+=2; g--; b--; } if(world[x - 1][y + 1].g > 200) { r--; g+=2; b--; } if(world[x - 1][y + 1].b > 200) { r--; g--; b+=2; } } if(y < worldHeight - 1) { // bottom if(world[x][y + 1].r > 200) { r+=2; g--; b--; } if(world[x][y + 1].g > 200) { r--; g+=2; b--; } if(world[x][y + 1].b > 200) { r--; g--; b+=2; } } if(x < worldWidth - 1 && y < worldHeight - 1) { // bottom right if(world[x + 1][y + 1].r > 200) { r+=2; g--; b--; } if(world[x + 1][y + 1].g > 200) { r--; g+=2; b--; } if(world[x + 1][y + 1].b > 200) { r--; g--; b+=2; } } if(r < 0) { r = 0; } if(g < 0) { g = 0; } if(b < 0) { b = 0; } if(r > 255) { r = 255; } if(g > 255) { g = 255; } if(b > 255) { b = 255; } world[x][y].r = r; world[x][y].g = g; world[x][y].b = b; } } |












