some more config options for tron
This commit is contained in:
parent
5ac26307a8
commit
643a25d85f
1 changed files with 17 additions and 37 deletions
|
|
@ -22,16 +22,12 @@ enum dir {
|
||||||
#define FIELD_STATE_FREE 255
|
#define FIELD_STATE_FREE 255
|
||||||
#define FIELD_STATE_CRASH 254
|
#define FIELD_STATE_CRASH 254
|
||||||
|
|
||||||
enum tron_button {
|
#define COLOR_P0 (COLOR_RGB(255, 0, 0))
|
||||||
TRON_BUTTON_P1_LEFT = 0,
|
#define COLOR_P1 (COLOR_RGB(0, 0, 255))
|
||||||
TRON_BUTTON_P1_RIGHT,
|
#define COLOR_P2 (COLOR_RGB(0, 255, 0))
|
||||||
TRON_BUTTON_P2_LEFT,
|
#define COLOR_P3 (COLOR_RGB(255, 255, 0))
|
||||||
TRON_BUTTON_P2_RIGHT,
|
#define COLOR_CRASH (COLOR_LUMA(255))
|
||||||
TRON_BUTTON_P3_LEFT,
|
#define COLOR_FREE (COLOR_LUMA(20))
|
||||||
TRON_BUTTON_P3_RIGHT,
|
|
||||||
TRON_BUTTON_P4_LEFT,
|
|
||||||
TRON_BUTTON_P4_RIGHT,
|
|
||||||
};
|
|
||||||
|
|
||||||
// max 4 players
|
// max 4 players
|
||||||
struct tron_game {
|
struct tron_game {
|
||||||
|
|
@ -52,11 +48,13 @@ struct tron_game {
|
||||||
uint8_t field[];
|
uint8_t field[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define TRON_TICK_LENGTH ((Time){ 0, NSEC_PER_SEC/10 })
|
||||||
|
|
||||||
void tron_reset_timer(struct tron_game *game) {
|
void tron_reset_timer(struct tron_game *game) {
|
||||||
void tron_step_callback(Timer *timer, void *arg);
|
void tron_step_callback(Timer *timer, void *arg);
|
||||||
|
|
||||||
Time time = time_current();
|
Time time = time_current();
|
||||||
time = time_add(time, (Time){ 0, NSEC_PER_SEC/10 });
|
time = time_add(time, TRON_TICK_LENGTH);
|
||||||
timer_set_absolute(&game->timer, time, tron_step_callback, game);
|
timer_set_absolute(&game->timer, time, tron_step_callback, game);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -110,12 +108,12 @@ static void draw_tile(struct tron_game *game, uint32_t x, uint32_t y) {
|
||||||
uint8_t state = *field_at_asserted(game, x, y);
|
uint8_t state = *field_at_asserted(game, x, y);
|
||||||
struct color col;
|
struct color col;
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case 0: col = COLOR_RGB(255, 0, 0); break;
|
case 0: col = COLOR_P0; break;
|
||||||
case 1: col = COLOR_RGB(0, 0, 255); break;
|
case 1: col = COLOR_P1; break;
|
||||||
case 2: col = COLOR_RGB(0, 255, 0); break;
|
case 2: col = COLOR_P2; break;
|
||||||
case 3: col = COLOR_RGB(255, 255, 0); break;
|
case 3: col = COLOR_P3; break;
|
||||||
case FIELD_STATE_CRASH: col = COLOR_LUMA(20); break;
|
case FIELD_STATE_CRASH: col = COLOR_CRASH; break;
|
||||||
case FIELD_STATE_FREE: col = COLOR_LUMA(50); break;
|
case FIELD_STATE_FREE: col = COLOR_FREE; break;
|
||||||
default: UNREACHABLE();
|
default: UNREACHABLE();
|
||||||
}
|
}
|
||||||
size_t mult = game->size_mult;
|
size_t mult = game->size_mult;
|
||||||
|
|
@ -136,7 +134,7 @@ void tron_init(void *self) {
|
||||||
game->winner = -1;
|
game->winner = -1;
|
||||||
memset(game->buttons, 0, sizeof(game->buttons));
|
memset(game->buttons, 0, sizeof(game->buttons));
|
||||||
memset(game->field, FIELD_STATE_FREE, game->field_width * game->field_height);
|
memset(game->field, FIELD_STATE_FREE, game->field_width * game->field_height);
|
||||||
app_draw_rect(self, COLOR_LUMA(50), NULL);
|
app_draw_rect(self, COLOR_FREE, NULL);
|
||||||
switch (game->num_players) {
|
switch (game->num_players) {
|
||||||
case 4:
|
case 4:
|
||||||
player_init(game, 3,
|
player_init(game, 3,
|
||||||
|
|
@ -167,26 +165,8 @@ void tron_init(void *self) {
|
||||||
tron_reset_timer(game);
|
tron_reset_timer(game);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_field(struct tron_game *game) {
|
|
||||||
for (uint32_t y = 0; y < game->field_height; y++) {
|
|
||||||
for (uint32_t x = 0; x < game->field_width; x++) {
|
|
||||||
char c;
|
|
||||||
switch (*field_at_asserted(game, x, y)) {
|
|
||||||
case 0: c = '0'; break;
|
|
||||||
case 1: c = '1'; break;
|
|
||||||
case 2: c = '2'; break;
|
|
||||||
case 3: c = '3'; break;
|
|
||||||
case FIELD_STATE_CRASH: c = 'X'; break;
|
|
||||||
case FIELD_STATE_FREE: c = '_'; break;
|
|
||||||
default: UNREACHABLE();
|
|
||||||
}
|
|
||||||
printf("%c", c);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void tron_step_callback(Timer *timer, void *arg) {
|
void tron_step_callback(Timer *timer, void *arg) {
|
||||||
|
(void)timer;
|
||||||
struct tron_game *game = arg;
|
struct tron_game *game = arg;
|
||||||
for (size_t idx = 0; idx < game->num_players; idx++) {
|
for (size_t idx = 0; idx < game->num_players; idx++) {
|
||||||
struct player *p = &game->players[idx];
|
struct player *p = &game->players[idx];
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue