"Сапер" в 89 строк на C++
В этой игре не используются массивы, а все состояние хранится прямо на экране, все мины в самом начале игры рисуются звездочками. Но, чтобы игрок не видел, где они находятся, мины рисуются цветом, совпадающим с цветом фона.
Характерной особенностью этой программы является то, что для ее понимания достаточно знать всего 3 ключевых слова языка С++: goto, if и int и 12 простых функций библиотеки Arctic Engine, см. справочник.
1 begin:
2 Cls();
3 int m = 0;
4 int n = 0;
5 int k = 40;
6 int r = 16 * 16 - k;
7 add:
8 int x = Random32(8, 23);
9 int y = Random32(1, 16);
10 if (Screen(x, y) != "*") {
11 At(x, y);
12 Print("*");
13 k = k - 1;
14 }
15 if (k > 0) {
16 goto add;
17 }
18 x = 8;
19 xl:
20 y = 1;
21 yl:
22 At(x, y);
23 Paper(9);
24 Ink(9);
25 if ((x + y) % 2 == 0) {
26 Paper(19);
27 Ink(19);
28 }
29 Print(Screen(x, y));
30 y = y + 1;
31 if (y <= 16) {
32 goto yl;
33 }
34 x = x + 1;
35 if (x <= 23) {
36 goto xl;
37 }
38 loop:
39 x = MouseX() / 8;
40 y = MouseY() / 8;
41 Paper(0);
42 Ink(8);
43 At(1, 17);
44 Print("Remaining: ");
45 Print(r);
46 Print(" ");
47 Ink(1);
48 if (r == 0) {
49 Print("You win!");
50 Input();
51 goto begin;
52 }
53 if (x >= 8 && x <= 23 && y >= 1 && y <= 16) {
54 At(x, y);
55 if (IsKey(kKeyMouseLeft)) {
56 if (Screen(x, y) == "*") {
57 Print("*");
58 Input();
59 goto begin;
60 }
61 if (Screen(x, y) == " ") {
62 k = 0;
63 m = -1;
64 ml:
65 n = -1;
66 nl:
67 if (Screen(x + m, y + n) == "*") {
68 k = k + 1;
69 }
70 n = n + 1;
71 if (n <= 1) {
72 goto nl;
73 }
74 m = m + 1;
75 if (m <= 1) {
76 goto ml;
77 }
78 Ink(5);
79 Print(k);
80 r = r - 1;
81 }
82 }
83 if (IsKey(kKeyMouseRight)&&(Screen(x,y)==" "||Screen(x,y)=="*")) {
84 Paper(1);
85 Print(Screen(x, y));
86 }
87 }
88 Show();
89 goto loop;
31 комментарий