diff --git a/src/game.h b/src/game.h new file mode 100644 index 0000000..c317f17 --- /dev/null +++ b/src/game.h @@ -0,0 +1,26 @@ +#ifndef PLAYER_H +#define PLAYER_H + +#include +#include +#include"player.h" + +#define PLAYER_COUNT 2 + +typedef struct game_s{ + uint16_t time; // seconds since game start + uint8_t winner_id; + uint8_t host_id; + player_t player[PLAYER_COUNT]; + + enum{ + running, + ended + } state; + +} game_t; + +void game_init(game_t* game); +void game_step(game_t* game, uint16_t time_delta); + +#endif /* PLAYER_H */ diff --git a/src/main.c b/src/main.c index eeafc9e..25d977f 100644 --- a/src/main.c +++ b/src/main.c @@ -26,6 +26,9 @@ #include #include #include +#include "player.h" +#include "game.h" +#include "uart.h" #define SPEED 500000 diff --git a/src/player.h b/src/player.h new file mode 100644 index 0000000..43d85d7 --- /dev/null +++ b/src/player.h @@ -0,0 +1,34 @@ +#ifndef PLAYER_H +#define PLAYER_H + + +#include +#include + +#define max_positions 320 + +typedef struct point_s{ + uint16_t x; + uint8_t y; +} point_t; + +typedef struct player_s { + + uint8_t id; + uint16_t color; + uint16_t num_positions; + + enum{ + dead, + alive, + }state; + + point_t past_positions[max_positions]; + point_t curr_position; + +} player_t; + +void player_init(player_t* player); // reset all fields +void player_append_position(player_t* player, point_t point); // updates num_position and adds current position to the list + +#endif /* PLAYER_H */ diff --git a/src/uart.h b/src/uart.h new file mode 100644 index 0000000..efc7d1f --- /dev/null +++ b/src/uart.h @@ -0,0 +1,24 @@ +#ifndef UART_H +#define UART_H + +#include +#include +#include + +typedef struct uart_message_s{ + uint16_t message_length; + uint8_t *message_data; + + // Internal, do not touch! + bool __deleted; +} uart_message_t; + +void uart_init(void); +void uart_transmit(uart_message_t *message); // transmit a message and frees it +bool uart_has_message(void); // checks if there is at least one msg available +void uart_message_free(uart_message_t *message); // frees a message + +uart_message_t *uart_message_allocate(void); // allocate storage for a new message +uart_message_t *receive_message(void); // returns a message if available else null + +#endif /* UART_H */