Add a test suite for etags
[emacs.git] / test / etags / cp-src / conway.cpp
blob1e600147ed9412478058d8c8cb89c326df57bfc2
1 /* ======================================================================= */
2 /* CONWAY.CPP */
3 /* ======================================================================= */
5 #include "assert.h"
6 #include "iostream.h"
7 #include "conio.h"
8 #include "clheir.h"
9 #include "screen.h"
10 #include "conway.h"
12 #define max(x,y) ((x > y) ? x : y)
13 #define min(x,y) ((x > y) ? y : x)
15 const int num_rows = min(50, NUM_ROWS);
16 const int num_columns = 40;
18 class site *field_of_play[num_rows][num_columns];
20 int site::total_surrounding(void)
22 int i, j, imin, imax, jmin, jmax, total;
24 total = 0;
25 imin = max(0, x - 1);
26 imax = min(num_rows - 1, x + 1);
27 jmin = max(0, y - 1);
28 jmax = min(num_columns - 1, y + 1);
30 for (i = imin; i <= imax; i++)
31 for (j = jmin; j <= jmax; j++)
32 if (field_of_play[i][j]->read()) total++;
33 if (alive) total--;
34 return total;
37 void display(void)
39 int i, j;
41 for (i = 0; i < num_rows; i++)
42 for (j = 0; j < num_columns; j++)
44 if (field_of_play[i][j]->read()) write_xyc(2*j, i, 'X');
45 else write_xyc(2*j, i, '.');
47 hide_cursor();
50 void glider(int x, int y)
52 field_of_play[x - 1][y + 0]->set();
53 field_of_play[x - 1][y + 1]->set();
54 field_of_play[x + 0][y - 1]->set();
55 field_of_play[x + 0][y + 0]->set();
56 field_of_play[x + 1][y + 1]->set();
59 void traffic_light(int x, int y)
61 field_of_play[x - 1][y]->set();
62 field_of_play[x + 0][y]->set();
63 field_of_play[x + 1][y]->set();
67 void main(void)
69 int i, j, c;
71 init_registry();
73 for (i = 0; i < num_rows; i++)
74 for (j = 0; j < num_columns; j++)
75 field_of_play[i][j] = new site(i, j);
77 start_over:
78 traffic_light(num_rows/2 - 8, num_columns/2 - 8);
79 glider(num_rows/2 + 8, num_columns/2 + 8);
81 clear_screen();
82 while (1)
84 display();
85 if ((c = getch()) == 'q') { clear_screen(); return; }
86 if (c == 'i')
88 for (i = 0; i < num_rows; i++)
89 for (j = 0; j < num_columns; j++)
90 field_of_play[i][j]->clear();
91 goto start_over;
93 step_everybody();