Игра "Сокобан" — 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) == "quot;) {
64  Print("x");
65 }
66 At(x+vx, y+vy);
67 if (c == 0) {
68  Print("@");
69 }
70 if (c == 1) {
71  Print("quot;);
72 }
73 x = x+vx;
74 y = y+vy;
75 goto b;
2 комментария