"Сапер" в 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;
2.9K2.9K показов
395395 открытий
31 комментарий

Ахахаха, опять goto, с Бейсика программирование учить начинал?

Ответить
Автор

В этой программе понадобились бы объявление функций, while, for и return просто для того, чтобы заменить goto. Хотя, конечно, она от этого стала бы короче.

Ответить

Я на самом деле уважаю использование приколюх в демо кодах. Ток не понял где в коде кресты, если это обычный си

Ответить

C++ и "goto"

Ответить
Автор

то есть C++ и auto тебя не смущает, а вот C++ и goto - смущает?

Ответить

А что за видео режим такой? Это какая-то ретро железка? Или используется какая-то библиотека?

Ответить