Игра "Сокобан" — 75 строк на С++
Игра на C++ и Arctic Engine, подробнее о нем и о goto-ориентированном C++ читайте в предыдущих постах. Если вы снова хотите поговорить о goto, то лучше сделайте это в комментариях к предыдущему посту, в котором детально разобрано, почему goto это не плохо и даже хорошо.
1 int x = 11;
2 int y = 9;
3 Print("....#####\n");
4 Print("....#...#\n");
5 Print("....#O..#\n");
6 Print("..###..O##\n");
7 Print("..#..O.O.#\n");
8 Print("###.#.##.#...######\n");
9 Print("#...#.##.#####..xx#\n");
10 Print("#.O..O..........xx#\n");
11 Print("#####.###.#.##..xx#\n");
12 Print("....#.....#########\n");
13 Print("....#######\n\n");
14 Print("Level 1\n");
15 b:
16 Show();
17 int vx = 0;
18 int vy = 0;
19 int c = 0;
20 if (IsKey(4)) {
21 vx = -1;
22 }
23 if (IsKey(5)) {
24 vx = 1;
25 }
26 if (IsKey(6)) {
27 vx = 0;
28 vy = 1;
29 }
30 if (IsKey(7)) {
31 vx = 0;
32 vy = -1;
33 }
34 if (Screen(x+vx, y+vy) == ".") {
35 goto ok;
36 }
37 if (Screen(x+vx, y+vy) == "x") {
38 c = 1;
39 goto ok;
40 }
41 if (Screen(x+vx, y+vy) == "O") {
42 goto box;
43 }
44 if (Screen(x+vx, y+vy) == "%") {
45 c = 1;
46 box:
47 At(x+vx*2, y+vy*2);
48 if (Screen(x+vx*2, y+vy*2) == ".") {
49 Print("O");
50 goto ok;
51 }
52 if (Screen(x+vx*2, y+vy*2) == "x") {
53 Print("%");
54 goto ok;
55 }
56 }
57 goto b;
58 ok:
59 At(x, y);
60 if (Screen(x, y) == "@") {
61 Print(".");
62 }
63 if (Screen(x, y) == "$") {
64 Print("x");
65 }
66 At(x+vx, y+vy);
67 if (c == 0) {
68 Print("@");
69 }
70 if (c == 1) {
71 Print("$");
72 }
73 x = x+vx;
74 y = y+vy;
75 goto b;
2 комментария