#include #define PLAYER_SIDES 5 #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 * 2 + DRAW_OFFSET_X, old_y * 2 + DRAW_OFFSET_Y, (old_x + PLAYER_SIDES) * 2 + 1 + DRAW_OFFSET_X, (old_y + PLAYER_SIDES) * 2 + 1 + DRAW_OFFSET_Y, BG_COLOR); dimage(x * 2 + DRAW_OFFSET_X, y * 2 + 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_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 * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_ground); break; case 'v': dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_spike); break; case '^': dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_elevator); break; case 'j': if (!upgrades[0]) dimage(x*2 + DRAW_OFFSET_X, y*2 + DRAW_OFFSET_Y, &img_jitem); else level[i] = '.'; } x += 8; if (x == 8*LEVEL_WIDTH) { x = 0; y += 8; } i++; } } void erase_tile(int x, int y, char level[]) { x = (int)(x/8); y = (int)(y/8); 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; } } }