§ Игра жизнь
Цвет клеток
Интервал (мс)
Количество шагов:
0§ Код на SDL C++
1#include <qblib.c>
2
3int ofield[ 320 ][ 200 ];
4int nfield[ 320 ][ 200 ];
5
6
7void init() {
8
9 srand(3);
10 for (int i = 0; i < 8192; i++) {
11
12 int x = rand() % 320;
13 int y = rand() % 200;
14 ofield[x][y] = rand() % 16;
15 }
16}
17
18
19void conway() {
20
21
22 for (int y = 0; y < 200; y++)
23 for (int x = 0; x < 320; x++) {
24
25 int n = 0, cl = 0;
26
27
28 for (int a = -1; a <= 1; a++)
29 for (int b = -1; b <= 1; b++) {
30
31 if (a == 0 && b == 0)
32 continue;
33
34 int cr = ofield[ (320 + x + a) % 320 ][ (200 + y + b) % 200 ];
35
36 if (cr > 0) { n++; cl += cr; }
37 }
38
39
40 if (n == 3) nfield[x][y] = (cl % 15) + 1;
41
42 else if (n < 2 || n > 3) nfield[x][y] = 0;
43 }
44
45
46 for (int y = 0; y < 200; y++)
47 for (int x = 0; x < 320; x++)
48 pset(x, y, (ofield[x][y] = nfield[x][y]) ? 10 : 0);
49}
50
51int main(int argc, char* argv[]) {
52
53 screen(13);
54 init();
55
56 int t = 0;
57 while (sdlevent(EVT_REDRAW)) {
58
59 if ((t % 3) == 0)
60 conway();
61
62
63 if (mouse.st & LF_CLICK) {
64
65 for (int a = 0; a < 4; a++)
66 for (int b = 0; b < 4; b++)
67 if (rand() & 1)
68 ofield[ (mouse.x + a)%320 ][ (mouse.y + b)%320 ] = 1;
69 }
70
71 t++;
72 }
73
74 return 0;
75}
§ Скриншот