From a2f32fba9adecfbb160d201cf0651641bd17d47e Mon Sep 17 00:00:00 2001 From: Robert Fry Date: Mon, 14 Apr 2025 17:15:05 +0100 Subject: [PATCH] feat: player movement --- src/main.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/main.c b/src/main.c index d323332..8592ab2 100644 --- a/src/main.c +++ b/src/main.c @@ -12,12 +12,16 @@ typedef struct { player_t *player_malloc(void); void player_free(player_t *player); +int player_move_by(player_t *player, int pos_dx, int pos_dy); + int screen_setup(void); int screen_teardown(void); int draw_map(void); int draw_player(player_t *player); +int on_key_pressed(player_t *player, char key); + int main(void) { player_t *player = player_malloc(); @@ -35,6 +39,7 @@ int main(void) if (key_pressed == 'q') { break; } + on_key_pressed(player, key_pressed); } screen_teardown(); @@ -88,8 +93,44 @@ void player_free(player_t *player) free(player); } +int player_move_by(player_t *player, int pos_dx, int pos_dy) +{ + player->pos_x += pos_dx; + player->pos_y += pos_dy; + return 0; +} + int draw_player(player_t *player) { mvprintw(player->pos_y, player->pos_x, "@"); return 0; } + +int on_key_pressed(player_t *player, char key) +{ + switch (key) + { + case 'w': + case 'W': + return player_move_by(player, 0, -1); + break; + + case 's': + case 'S': + return player_move_by(player, 0, +1); + break; + + case 'a': + case 'A': + return player_move_by(player, -1, 0); + break; + + case 'd': + case 'D': + return player_move_by(player, +1, 0); + break; + + default: + return 0; + } +}