diff options
author | Juan J. Martinez <jjm@usebox.net> | 2023-06-15 22:35:39 +0100 |
---|---|---|
committer | Juan J. Martinez <jjm@usebox.net> | 2023-06-15 22:35:39 +0100 |
commit | 07e829e591394fa182e75ecab86051f1fb850ce7 (patch) | |
tree | e3b59887aaa463400392040ccf601eab862eba82 | |
parent | 671803751cc9487ea781eb264ab2d76575c345e8 (diff) | |
download | gold-mine-run-07e829e591394fa182e75ecab86051f1fb850ce7.tar.gz gold-mine-run-07e829e591394fa182e75ecab86051f1fb850ce7.zip |
Started with the game
Added hud (WIP)
-rw-r--r-- | TODO.md | 17 | ||||
-rw-r--r-- | src/game.c | 85 | ||||
-rw-r--r-- | src/game.h | 16 | ||||
-rw-r--r-- | src/main.c | 10 |
4 files changed, 109 insertions, 19 deletions
@@ -1,19 +1,12 @@ # TODO -- map - - collision detection - - deadly blocks - entity system - free/used lists - player -- hud - - lives - - score - - time - - stage - - hi-score - - gold left? - - pickaxe? +- timer + - clock +- map + - entities - pick ups - gold - extra time @@ -38,4 +31,6 @@ # REVIEW +- hud + - pickaxe? - use dosemu instead of dosbox? diff --git a/src/game.c b/src/game.c new file mode 100644 index 0000000..70c3235 --- /dev/null +++ b/src/game.c @@ -0,0 +1,85 @@ +#include <stdint.h> +#include <stdio.h> + +#include "keyb.h" +#include "vga.h" +#include "text.h" +#include "map.h" +#include "data.h" + +#include "game.h" + +static uint32_t hiscore = 15000; + +static uint8_t hud; + +/* game variables */ +static uint8_t lives; +static uint32_t score; +static uint8_t stage; +static uint8_t gold; + +void hud_render() +{ + char b[32]; + + if (hud & HUD_ALL) + { + Rect src = { 128, 32, 144, 144}; + Rect dst = { 0, 0, 16, 16}; + + /* lives */ + blitrc(binary_sprites_start, &src, &dst); + + put_text(132, 4, "TIME"); + put_text(256, 4, "STAGE"); + } + + if (hud & HUD_LIVES) + { + sprintf(b, "%d", lives); + put_text(14, 4, b); + } + + if (hud & HUD_SCORE) + { + sprintf(b, "%06li", score); + put_text(30, 4, b); + } + + if (hud & HUD_TIME) + { + sprintf(b, "%02d", 0); + put_text(172, 4, b); + } + + if (hud & HUD_STAGE) + { + sprintf(b, "%02d", stage); + put_text(304, 4, b); + } + + hud = HUD_CLEAN; +} + +void run_game() +{ + lives = GAME_LIVES_START; + score = 0; + stage = 0; + gold = 30; + + hud = HUD_ALL; + + map_init(binary_stage_start); + map_render(); + + while (!keys[KEY_ESC]) + { + if (hud) + hud_render(); + + wait_vsync(); + blit_update(); + } +} diff --git a/src/game.h b/src/game.h new file mode 100644 index 0000000..e8c270e --- /dev/null +++ b/src/game.h @@ -0,0 +1,16 @@ +#ifndef _GAME_H +#define _GAME_H + +#define GAME_LIVES_START 3 +#define GAME_LIVES_MAX 9 + +#define HUD_CLEAN 0 +#define HUD_LIVES 1 +#define HUD_SCORE 2 +#define HUD_STAGE 4 +#define HUD_TIME 8 +#define HUD_ALL 255 + +void run_game(); + +#endif /* _GAME_H */ @@ -6,9 +6,8 @@ #include "keyb.h" #include "vga.h" -#include "text.h" -#include "map.h" #include "data.h" +#include "game.h" /* disable paging because our int handlers are written in C */ int _crt0_startup_flags = _CRT0_FLAG_LOCK_MEMORY; @@ -36,14 +35,9 @@ int main(int argc, char *argv[]) blit_erase(0); wait_vsync(); - - map_init(binary_stage_start); - map_render(); - blit_update(); - while (!keys[KEY_ESC]) - wait_vsync(); + run_game(); set_mode(3); close_framebuffer(); |