From effcb445ce47714c34e8e970e033f877a025e2cf Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Fri, 14 Oct 2022 19:19:44 +0300 Subject: [PATCH] update minesweeper https://github.com/panki27/minesweeper --- .../plugins/minesweeper/minesweeper.c | 122 +++++------------- 1 file changed, 30 insertions(+), 92 deletions(-) diff --git a/applications/plugins/minesweeper/minesweeper.c b/applications/plugins/minesweeper/minesweeper.c index 6d29bab2d..d3a5207f9 100644 --- a/applications/plugins/minesweeper/minesweeper.c +++ b/applications/plugins/minesweeper/minesweeper.c @@ -42,10 +42,7 @@ typedef enum { TileTypeMine } TileType; -typedef enum { - FieldEmpty, // <-- same goes for this - FieldMine -} Field; +typedef enum { FieldEmpty, FieldMine } Field; typedef struct { Field minefield[PLAYFIELD_WIDTH][PLAYFIELD_HEIGHT]; @@ -99,6 +96,8 @@ static void render_callback(Canvas* const canvas, void* ctx) { furi_string_printf(timeStr, "%01d:%02d", minutes, seconds); canvas_draw_str_aligned(canvas, 128, 0, AlignRight, AlignTop, furi_string_get_cstr(timeStr)); + uint8_t* tile_to_draw; + for(int y = 0; y < PLAYFIELD_HEIGHT; y++) { for(int x = 0; x < PLAYFIELD_WIDTH; x++) { if(x == minesweeper_state->cursor_x && y == minesweeper_state->cursor_y) { @@ -106,114 +105,53 @@ static void render_callback(Canvas* const canvas, void* ctx) { } switch(minesweeper_state->playfield[x][y]) { case TileType0: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_0_bits); + tile_to_draw = tile_0_bits; break; case TileType1: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_1_bits); + tile_to_draw = tile_1_bits; break; case TileType2: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_2_bits); + tile_to_draw = tile_2_bits; break; case TileType3: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_3_bits); + tile_to_draw = tile_3_bits; break; case TileType4: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_4_bits); + tile_to_draw = tile_4_bits; break; case TileType5: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_5_bits); + tile_to_draw = tile_5_bits; break; case TileType6: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_6_bits); + tile_to_draw = tile_6_bits; break; case TileType7: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_7_bits); + tile_to_draw = tile_7_bits; break; case TileType8: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_8_bits); + tile_to_draw = tile_8_bits; break; case TileTypeFlag: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_flag_bits); + tile_to_draw = tile_flag_bits; break; case TileTypeUncleared: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_uncleared_bits); + tile_to_draw = tile_uncleared_bits; break; case TileTypeMine: - canvas_draw_xbm( - canvas, - x * TILE_HEIGHT, // x - 8 + (y * TILE_WIDTH), // y - TILE_WIDTH, - TILE_HEIGHT, - tile_mine_bits); + tile_to_draw = tile_mine_bits; + break; + default: + // this should never happen + tile_to_draw = tile_mine_bits; break; } + canvas_draw_xbm( + canvas, + x * TILE_HEIGHT, // x + 8 + (y * TILE_WIDTH), // y + TILE_WIDTH, + TILE_HEIGHT, + tile_to_draw); if(x == minesweeper_state->cursor_x && y == minesweeper_state->cursor_y) { canvas_invert_color(canvas); } @@ -479,25 +417,25 @@ int32_t minesweeper_app(void* p) { case InputKeyUp: minesweeper_state->cursor_y--; if(minesweeper_state->cursor_y < 0) { - minesweeper_state->cursor_y = 0; + minesweeper_state->cursor_y = PLAYFIELD_HEIGHT - 1; } break; case InputKeyDown: minesweeper_state->cursor_y++; if(minesweeper_state->cursor_y >= PLAYFIELD_HEIGHT) { - minesweeper_state->cursor_y = PLAYFIELD_HEIGHT - 1; + minesweeper_state->cursor_y = 0; } break; case InputKeyRight: minesweeper_state->cursor_x++; if(minesweeper_state->cursor_x >= PLAYFIELD_WIDTH) { - minesweeper_state->cursor_x = PLAYFIELD_WIDTH - 1; + minesweeper_state->cursor_x = 0; } break; case InputKeyLeft: minesweeper_state->cursor_x--; if(minesweeper_state->cursor_x < 0) { - minesweeper_state->cursor_x = 0; + minesweeper_state->cursor_x = PLAYFIELD_WIDTH - 1; } break; case InputKeyOk: