88 lines
2.6 KiB
C
88 lines
2.6 KiB
C
#ifndef GAME_H
|
|
#define GAME_H
|
|
|
|
#include<stdint.h>
|
|
#include<stdlib.h>
|
|
#include<stdbool.h>
|
|
#include"player.h"
|
|
|
|
// Player definitions
|
|
#define PLAYER_COUNT 2
|
|
#define PLAYER_WIDTH 0 // Don't change
|
|
|
|
// Speed definitions
|
|
#define SPEED_SLOW 75
|
|
#define SPEED_FAST 5
|
|
|
|
// Button definitions
|
|
#define BTN_START 0
|
|
#define BTN_PLAYER_1_LEFT 3
|
|
#define BTN_PLAYER_1_RIGHT 2
|
|
#define BTN_PLAYER_2_LEFT 1
|
|
#define BTN_PLAYER_2_RIGHT 0
|
|
|
|
// Display definitions
|
|
#define TG_FIELD_TOP 20
|
|
#define TG_FIELD_BOTTOM 5
|
|
#define TG_FIELD_LEFT 5
|
|
#define TG_FIELD_RIGHT 5
|
|
#define TG_FIELD_START_OFFSET 10
|
|
#define TG_HEADER_TIME_X 5
|
|
#define TG_HEADER_TIME_Y 3
|
|
#define TG_HEADER_PLAYER_X 100
|
|
#define TG_HEADER_PLAYER_Y 3
|
|
#define TG_HEADER_PLAYER_WIDTH 100
|
|
#define TG_START_X 10
|
|
#define TG_START_Y 10
|
|
#define TG_START_BLOCK_HEIGHT 20
|
|
#define TG_START_BLOCK_SPACING 5
|
|
#define TG_START_FONT_OFFSET_Y 5
|
|
#define TG_START_FONT_HEIGHT 10
|
|
#define TG_START_COL2_X 90
|
|
#define TG_START_COL2_WIDTH 100
|
|
|
|
|
|
|
|
/**
|
|
* @brief Game data type which contains all game data and players.
|
|
*
|
|
*/
|
|
typedef struct game_s{
|
|
//public section ahead
|
|
|
|
uint16_t time; // Seconds since game start
|
|
uint16_t ticks_per_sec; // Number of game ticks per second
|
|
int8_t winner_id; // Player who won the previous round
|
|
uint8_t ticks_per_pixel; // Ticks that are needed to move the player by one pixel
|
|
player_t player[PLAYER_COUNT];
|
|
|
|
enum{ // Current state of the game
|
|
init,
|
|
prestart,
|
|
running,
|
|
ended
|
|
} state;
|
|
|
|
//private section ahead
|
|
uint16_t ticks_leftover; // Ticks which were not used in the last round, to advance the pixels
|
|
uint16_t ticks_sum_sec; // Ticks which were not used in the last round, to advance the seconds
|
|
} game_t;
|
|
|
|
/**
|
|
@brief Initializes the game object
|
|
@param game Game object
|
|
@param ticks_per_sec Number of game ticks per second
|
|
*/
|
|
void game_init(game_t* game, uint16_t ticks_per_sec);
|
|
|
|
/**
|
|
* @brief Calculates one step of the game
|
|
*
|
|
* @param game Game to calculate a step for
|
|
* @param deltaTime Time that passed since the last call to this method (in ticks)
|
|
* @return true if the next call to this method should be made with a delta time of zero.
|
|
*/
|
|
bool game_step(game_t* game, uint64_t deltaTime);
|
|
|
|
#endif /* GAME_H */
|