+// Player\r
+struct Player {\r
+ bool left = false;\r
+ int x, y;\r
+ int x_spawn, y_spawn;\r
+ int jumping = 0;\r
+\r
+ void clear() {\r
+ int pos = get_pos(x, y);\r
+ select_length(pos, 1);\r
+ replace({ map[pos], 0 });\r
+ }\r
+ \r
+ void draw() {\r
+ int pos = get_pos(x, y);\r
+ select_length(pos, 1);\r
+ replace({ left ? '<' : '>', 0 });\r
+ }\r
+\r
+ void move_to(int x, int y) {\r
+ clear();\r
+ if (this->x > x) left = true;\r
+ if (this->x < x) left = false;\r
+ this->x = x;\r
+ this->y = y;\r
+ draw();\r
+ }\r
+\r
+ void move(int dx, int dy) {\r
+ move_to(x + dx, y + dy);\r
+ }\r
+\r
+ bool collision_x(int n) {\r
+ if (x + n < 0 || x + n >= WIDTH)\r
+ return true;\r
+ for (int i = 0; i != n; i += (n < 0 ? -1 : 1))\r
+ if (get_block(x + i + (n < 0 ? -1 : 1), y) == 'X')\r
+ return true;\r
+ return false;\r
+ }\r
+ bool collision_y(int n) {\r
+ if (y + n < 0 || y + n >= HEIGHT)\r
+ return true;\r
+ for (int i = 0; i != n; i += (n < 0 ? -1 : 1))\r
+ if (get_block(x, y + i + (n < 0 ? -1 : 1)) == 'X')\r
+ return true;\r
+ return false;\r
+ }\r
+};\r
+Player player { 0, 0 };\r
+\r
+// Lvl\r