#include <client_api.h> pbm_t* player; pbm_t* player_out; #define TL 1 #define TC 2 #define TR 3 #define CL 4 #define CC 5 #define CR 6 #define BL 7 #define BC 8 #define BR 9 pbm_t* bg[9]; int grid[10][9]; #define OUTLINE 2 int setup(int a) { player = f_bitmap("/player.pbm"); player_out = d_expand_bitmap(player, OUTLINE, true, true); for (int i = 0; i < 9; i++) { char bg_path[20]; sprintf(bg_path, "/bg%d.pbm", (i + 1)); bg[i] = f_bitmap(bg_path); } memset(grid, 0, sizeof(grid)); grid[0][0] = 1; for (int i = 1; i < 9; i++) grid[i][0] = 2; grid[9][0] = 3; for (int i = 1; i < 8; i++) grid[0][i] = 4; for (int i = 1; i < 8; i++) grid[9][i] = 6; grid[0][8] = 7; for (int i = 1; i < 9; i++) grid[i][8] = 8; grid[9][8] = 9; for (int i = 0; i < 9; i++) { grid[random(1, 9)][random(1, 8)] = 5; } return 0; } float x = 0; float y = 0; int rot = 0; float speed = 80; bool flipX = false, flipY = false; void d_pbm_outline(int16_t x, int16_t y, pbm_t* pbm) { for (int i = x - 1; i <= x + 1; i++) { for (int j = y - 1; j <= y + 1; j++) { d_pbm(i, j, pbm, 0, 0, 0, 0, WHITE, TRANSPARENT, R_NONE, false, false); } } } int loop(int ms) { d_clear(); for (int i = 0; i < 10; i++) { for (int j = 0; j < 9; j++) { if (grid[i][j] != 0) { d_pbm(4 + i * 16, j * 16, bg[grid[i][j] - 1], 0,0,0,0, BLACK, TRANSPARENT, R_NONE, false, false); } } } //d_fillRect(0, 0, SCREEN_W, SCREEN_H, BLACK); d_pbm((uint16_t)roundf(x) - OUTLINE, (uint16_t)roundf(y) - OUTLINE, player_out, 0, 0, 0, 0, WHITE, TRANSPARENT, rot, flipX, flipY); d_pbm((uint16_t)roundf(x), (uint16_t)roundf(y), player, 0, 0, 0, 0, BLACK, TRANSPARENT, rot, flipX, flipY); if (button_pressed(BUTTON_A)) { rot = (rot + 1) % 4; } if (button_pressed(BUTTON_B)) { flipX = !flipX; if (!flipX) { flipY = !flipY; } printf("Flip: %d %d\n", flipX, flipY); } float t = ms / 1000.0f; if (button_down(DPAD_RIGHT)) x += t * speed; if (button_down(DPAD_LEFT)) x -= t * speed; if (button_down(DPAD_DOWN)) y += t * speed; if (button_down(DPAD_UP)) y -= t * speed; return 0; }