#include #define PLAYER_SIDES 11 #define BG_COLOR 0 #define LEVEL_WIDTH 28 #define DRAW_OFFSET_Y -24 #define DRAW_OFFSET_X -27 extern image_t img_player; //player texture, 12x12 void draw_player(int old_x, int old_y, int x, int y) { if (old_x != x || old_y != y) { drect(old_x + DRAW_OFFSET_X, old_y + DRAW_OFFSET_Y, (old_x + PLAYER_SIDES) + DRAW_OFFSET_X, (old_y + PLAYER_SIDES) + DRAW_OFFSET_Y, BG_COLOR); dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_player); } } void draw_level(char level[], char upgrades[]) { dclear(BG_COLOR); extern image_t img_ground; //ground texture, 16x16 extern image_t img_spike; //spike texture, 16x16 extern image_t img_elevator; //elevator texture, 16x16 extern image_t img_ice; //ice texture, 16x8 extern image_t img_glue; //glue texture, 16x8 extern image_t img_jitem; //jump item texture, 16x16 unsigned int i = 0; unsigned int x = 0; unsigned int y = 0; while (i != LEVEL_WIDTH*17) { switch (level[i]) { case '0': dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground); break; case 'v': dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_spike); break; case '^': dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_elevator); break; case '~': dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground); dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ice); break; case '#': dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground); dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_glue); break; case 'j': if (!upgrades[0]) dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_jitem); else level[i] = '.'; break; } x += 16; if (x == 16*LEVEL_WIDTH) { x = 0; y += 16; } i++; } } void erase_tile(int x, int y, char level[]) { x = (int)(x/16); y = (int)(y/16); level[x + y * 28] = '.'; x *= 16; y *= 16; drect(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, x + 15 + DRAW_OFFSET_X, y + 15 + DRAW_OFFSET_Y, BG_COLOR); } void draw_upgrade_message(char item) { switch (item) { case 'j': { extern image_t img_jitem_popup; dimage(96 + DRAW_OFFSET_X, 160 + DRAW_OFFSET_Y, &img_jitem_popup); break; } } }