From 7649bf08fe950563a6ac4c7816f3bf187779c38a Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Thu, 14 Mar 2019 21:32:20 -0400 Subject: fix build errors --- frontend/ncurses/ncurses_ui.c | 14 +++++++------- frontend/sdl/sdl_ui.c | 4 ++-- meson.build | 7 +++---- src/cetris.c | 39 ++++++++++++++++++++------------------- src/cetris.h | 19 ++++++++++--------- src/input.c | 34 ++++++++++++++++++++-------------- src/input.h | 20 ++------------------ src/matrix.c | 12 +++++++----- src/matrix.h | 3 +-- src/test.c | 4 ++-- src/types.h | 19 +++++++++++++++++++ 11 files changed, 93 insertions(+), 82 deletions(-) create mode 100644 src/types.h diff --git a/frontend/ncurses/ncurses_ui.c b/frontend/ncurses/ncurses_ui.c index 98f2b4b..9c95227 100644 --- a/frontend/ncurses/ncurses_ui.c +++ b/frontend/ncurses/ncurses_ui.c @@ -35,17 +35,17 @@ " \\--------------------/" #else #define BLOCK "[]" -#define PLAY_FIELD_STR " ┏━━━━━━━━━━━┓ ┏━━━━━━━━━\n"\ +#define PLAY_FIELD_STR " ┏━━━━━━━━━━━━━━━━━━━━┓ ┏━━━━━━━━━━━━━━━┓ \n"\ " ┃ ┃ ┃ ┃ \n"\ - " ┃ ┃ ━━━━━━━━━┛ \n"\ + " ┃ ┃ ┗━━━━━━━━━━━━━━━┛ \n"\ " ┃ ┃ \n"\ " ┃ ┃ \n"\ - " ┃ ┃ ┏━━━━━━┓ \n"\ + " ┃ ┃ ┏━━━━━━━━━━━┓ \n"\ " ┃ ┃ ┃ ┃ \n"\ " ┃ ┃ ┃ ┃ \n"\ " ┃ ┃ ┃ ┃ \n"\ " ┃ ┃ ┃ ┃ \n"\ - " ┃ ┃ ┗━━━━━━┛ \n"\ + " ┃ ┃ ┗━━━━━━━━━━━┛ \n"\ " ┃ ┃ \n"\ " ┃ ┃ \n"\ " ┃ ┃ \n"\ @@ -56,7 +56,7 @@ " ┃ ┃ \n"\ " ┃ ┃ \n"\ " ┃ ┃ \n"\ - " ┗━━━━━━━━━━━┛ " + " ┗━━━━━━━━━━━━━━━━━━━━┛ " #endif #define X_OFFSET 8 @@ -105,7 +105,7 @@ void draw_board() { attron(COLOR_PAIR(game.piece_queue[index].c)); for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { - if (game.piece_queue[index].mat[y][x]) { + if (game.piece_queue[index].m[y][x]) { if (game.piece_queue[index].t == I) { mvaddstr(6 + y, (x * 2) + 36, BLOCK); } else { @@ -162,7 +162,7 @@ int main(void) { } break; default: - clear_held_key(&game.input); + clear_held_key(&game); } update_game_tick(&game); erase(); diff --git a/frontend/sdl/sdl_ui.c b/frontend/sdl/sdl_ui.c index c5c9917..40f7aab 100644 --- a/frontend/sdl/sdl_ui.c +++ b/frontend/sdl/sdl_ui.c @@ -95,7 +95,7 @@ void draw_stuff() { SDL_Rect p = {294, 20, 25, 25}; for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { - if (g.piece_queue[index].mat[y][x]) { + if (g.piece_queue[index].m[y][x]) { p.x = 319 + (x * 25); p.y = 30 + (y * 25); if (g.piece_queue[index].t == I) { @@ -204,7 +204,7 @@ int main(void) { case SDLK_DOWN: case SDLK_SPACE: case SDLK_UP: - clear_held_key(&g.input); + clear_held_key(&g); break; } break; diff --git a/meson.build b/meson.build index 9fe6a8c..e1a243c 100644 --- a/meson.build +++ b/meson.build @@ -4,7 +4,7 @@ project('cetris', 'c', compiler = meson.get_compiler('c') -src = ['src/input.c', 'src/matrix.c', 'src/cetris.c'] +src = ['src/cetris.c', 'src/input.c', 'src/matrix.c'] inc = include_directories('src') if host_machine.system() != 'windows' @@ -15,12 +15,11 @@ endif src += ['src/test.c'] sdlinc = [] -sdlttfinc = [] if get_option('build_frontends') == true if host_machine.system() == 'windows' sdlinc += include_directories('_win\SDL2-2.0.5\include') - sdlttfinc += include_directories('_win\SDL2_ttf-2.0.14\include') + sdlinc += include_directories('_win\SDL2_ttf-2.0.14\include') curses = compiler.find_library('pdcurses', dirs: [meson.source_root() + '/_win/pdcurses']) sdl2 = compiler.find_library('SDL2', dirs: [meson.source_root() + '/_win/SDL2-2.0.5/lib/x86']) sdl2_ttf = compiler.find_library('SDL2_ttf', dirs: [meson.source_root() + '/_win/SDL2_ttf-2.0.14/lib/x86']) @@ -34,7 +33,7 @@ if get_option('build_frontends') == true include_directories: inc, install : false) executable('cetris_sdl', [src, 'frontend/sdl/sdl_ui.c'], - include_directories: [inc, sdlttfinc, sdlinc], + include_directories: [inc, sdlinc], dependencies: [sdl2, sdl2_ttf], install : false) endif diff --git a/src/cetris.c b/src/cetris.c index 7adf5b1..419fdaf 100644 --- a/src/cetris.c +++ b/src/cetris.c @@ -6,6 +6,9 @@ #include #include "cetris.h" +#include "types.h" +#include "matrix.h" +#include "input.h" #ifdef BUILD_TESTS #include "test.h" @@ -15,8 +18,6 @@ static void init_piece_queue(struct cetris_game* g); static void shuffle_queue(struct cetris_game* g); -static void next_piece(struct cetris_game* g); -static void wipe_board(struct cetris_game* g); static void set_constants(struct cetris_game* g); /* LEVEL DROP SPEED VALUES */ @@ -41,11 +42,11 @@ void init_game(struct cetris_game* g) { g->current_index = 0; - g->input.held_move = 0; - g->input.prev_move = 0; - g->input.next_move_tick = 0; - g->input.can_rotate = 0; - g->input.can_hard_drop = 0; + g->held_move = 0; + g->prev_move = 0; + g->next_move_tick = 0; + g->can_rotate = 0; + g->can_hard_drop = 0; g->lines = 0; g->level = 1; @@ -233,43 +234,43 @@ void wipe_board(struct cetris_game* g) { /* MOVEMENT FUNCTIONS */ void move_down(struct cetris_game* g) { - if (g->input.held_move != DOWN) { + if (g->held_move != DOWN) { move_current(g, basic_movements[DOWN]); } - g->input.held_move = DOWN; + g->held_move = DOWN; } void move_right(struct cetris_game* g) { - if (g->input.held_move != RIGHT) { + if (g->held_move != RIGHT) { move_current(g, basic_movements[RIGHT]); } - g->input.held_move = RIGHT; + g->held_move = RIGHT; } void move_left(struct cetris_game* g) { - if (g->input.held_move != LEFT) { + if (g->held_move != LEFT) { move_current(g, basic_movements[LEFT]); } - g->input.held_move = LEFT; + g->held_move = LEFT; } void move_hard_drop(struct cetris_game* g) { - if (g->input.held_move != HARD_DROP) { + if (g->held_move != HARD_DROP) { hard_drop(g); } - g->input.held_move = HARD_DROP; + g->held_move = HARD_DROP; } void rotate_clockwise(struct cetris_game* g) { - if (g->input.held_move != ROTATE_CW) { + if (g->held_move != ROTATE_CW) { rotate_matrix(g, 1); } - g->input.held_move = ROTATE_CW; + g->held_move = ROTATE_CW; } void rotate_counterclockwise(struct cetris_game* g) { - if (g->input.held_move != ROTATE_CCW) { + if (g->held_move != ROTATE_CCW) { rotate_matrix(g, 0); } - g->input.held_move = ROTATE_CCW; + g->held_move = ROTATE_CCW; } diff --git a/src/cetris.h b/src/cetris.h index 1afc7ef..2690163 100644 --- a/src/cetris.h +++ b/src/cetris.h @@ -2,8 +2,7 @@ #include -#include "input.h" -#include "matrix.h" +#include "types.h" #define CETRIS_BOARD_X 10 #define CETRIS_BOARD_Y 43 @@ -16,12 +15,6 @@ #define CETRIS_LINE_CLEAR_DELAY 40 #define CETRIS_WAIT_ON_CLEAR 0 -typedef struct { - int8_t x; - int8_t y; -} vec2; - - typedef enum { O, I, S, Z, L, J, T } type; @@ -71,7 +64,12 @@ struct cetris_game { struct tetrimino current; uint8_t current_index; - struct input_manager input; + /* input_manager */ + input_t held_move; + input_t prev_move; + int next_move_tick; + uint8_t can_rotate; + uint8_t can_hard_drop; /* internal game tick */ int tick; @@ -90,6 +88,9 @@ struct cetris_game { long int score; }; +void next_piece(struct cetris_game* g); +void wipe_board(struct cetris_game* g); + /* API PROTOTYPES FUNCTIONS */ void init_game(struct cetris_game* g); diff --git a/src/input.c b/src/input.c index a77f4df..e3b61b8 100644 --- a/src/input.c +++ b/src/input.c @@ -1,21 +1,27 @@ +#include + #include "input.h" +#include "types.h" +#include "matrix.h" +#include "cetris.h" + uint8_t handle_inputs(struct cetris_game* g) { uint8_t did_move = 0; - if (g->input.held_move && !g->input.next_move_tick) { - if (g->input.held_move == RIGHT || g->input.held_move == LEFT) { - if (g->input.prev_move == g->input.held_move) { - g->input.next_move_tick = g->tick + CETRIS_DAS_PERIOD; + if (g->held_move && !g->next_move_tick) { + if (g->held_move == RIGHT || g->held_move == LEFT) { + if (g->prev_move == g->held_move) { + g->next_move_tick = g->tick + CETRIS_DAS_PERIOD; } else { - g->input.next_move_tick = g->tick + CETRIS_DAS_DELAY; + g->next_move_tick = g->tick + CETRIS_DAS_DELAY; } } else { - g->input.next_move_tick = g->tick + CETRIS_DROP_PERIOD; + g->next_move_tick = g->tick + CETRIS_DROP_PERIOD; } } - if (g->input.next_move_tick && g->tick >= g->input.next_move_tick) { - switch (g->input.held_move) { + if (g->next_move_tick && g->tick >= g->next_move_tick) { + switch (g->held_move) { case DOWN: g->score++; move_current(g, basic_movements[DOWN]); @@ -31,14 +37,14 @@ uint8_t handle_inputs(struct cetris_game* g) { } if (did_move) { - g->input.next_move_tick = 0; - g->input.prev_move = g->input.held_move; + g->next_move_tick = 0; + g->prev_move = g->held_move; } return did_move; } -void clear_held_key(struct input_manager* input) { - input->prev_move = 0; - input->held_move = 0; - input->next_move_tick = 0; +void clear_held_key(struct cetris_game* g) { + g->prev_move = 0; + g->held_move = 0; + g->next_move_tick = 0; } diff --git a/src/input.h b/src/input.h index 188ca71..9fceabe 100644 --- a/src/input.h +++ b/src/input.h @@ -2,24 +2,8 @@ #include +#include "types.h" #include "cetris.h" -typedef enum { - DOWN = 1, - RIGHT = 2, - LEFT = 3, - ROTATE_CCW = 4, - ROTATE_CW = 5, - HARD_DROP = 6 -} input_t; - -struct input_manager { - input_t held_move; - input_t prev_move; - int next_move_tick; - uint8_t can_rotate; - uint8_t can_hard_drop; -}; - uint8_t handle_inputs(struct cetris_game* g); -void clear_held_key(struct input_manager* input); +void clear_held_key(struct cetris_game* g); diff --git a/src/matrix.c b/src/matrix.c index 796b4a8..1fabdce 100644 --- a/src/matrix.c +++ b/src/matrix.c @@ -1,6 +1,8 @@ #include #include "matrix.h" +#include "types.h" +#include "cetris.h" /* SRS WALL KICK VALUES */ @@ -90,7 +92,7 @@ void move_current(struct cetris_game* g, vec2 offset) { g->current.pos.y += offset.y; g->current.pos.x += offset.x; - int8_t check = check_new_matrix(g, g->current.mat); + int8_t check = check_new_matrix(g, g->current.m); if (check <= 0) { g->current.pos.y -= offset.y; g->current.pos.x -= offset.x; @@ -107,7 +109,7 @@ void overlay_current_matrix(struct cetris_game* g) { for (uint8_t y = 0; y < 4; y++) { for (uint8_t x = 0; x < 4; x++) { vec2 r = (vec2){x + g->current.pos.x, y + g->current.pos.y}; - if (g->current.mat[y][x]) { + if (g->current.m[y][x]) { g->board[r.x][r.y].occupied = 1; g->board[r.x][r.y].c = g->current.c; } @@ -123,7 +125,7 @@ void hard_drop(struct cetris_game* g) { while (!drop) { g->current.pos.y++; drop_count++; - int8_t check = check_new_matrix(g, g->current.mat); + int8_t check = check_new_matrix(g, g->current.m); if (check <= 0) { g->current.pos.y--; drop_count--; @@ -181,7 +183,7 @@ void rotate_matrix(struct cetris_game* g, int clockwise) { for (uint8_t x = 0; x < 4; x++) { for (uint8_t y = 0; y < 4; y++) { - if (g->current.mat[y][x]) { + if (g->current.m[y][x]) { uint8_t new_x = (clockwise) ? 1 - (y - 2) : 1 + (y - 2); uint8_t new_y = (clockwise) ? 2 + (x - 1) : 2 - (x - 1); @@ -256,7 +258,7 @@ void rotate_matrix(struct cetris_game* g, int clockwise) { } g->current.r = next; - memcpy(g->current.mat, m, sizeof(piece_matrix)); + memcpy(g->current.m, m, sizeof(piece_matrix)); wipe_board(g); } } diff --git a/src/matrix.h b/src/matrix.h index 57166cc..f75e1e0 100644 --- a/src/matrix.h +++ b/src/matrix.h @@ -2,10 +2,9 @@ #include +#include "types.h" #include "cetris.h" -typedef uint8_t piece_matrix[4][4]; - const piece_matrix default_matrices[7]; const vec2 basic_movements[4]; diff --git a/src/test.c b/src/test.c index fa7aaa8..cbd8424 100644 --- a/src/test.c +++ b/src/test.c @@ -58,9 +58,9 @@ void apply_test_board(struct cetris_game* g, enum tests t) { default: return; } - for (int y = BOARD_VISABLE; y < BOARD_Y; y++) { + for (int y = CETRIS_BOARD_VISABLE; y < CETRIS_BOARD_Y; y++) { for (int x = 0; x < 10; x++) { - if ((*board)[y - BOARD_VISABLE][x]) { + if ((*board)[y - CETRIS_BOARD_VISABLE][x]) { g->board[x][y].occupied = 1; g->board[x][y].constant = 1; g->board[x][y].c = COLOR_I; diff --git a/src/types.h b/src/types.h new file mode 100644 index 0000000..2ce97c7 --- /dev/null +++ b/src/types.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +typedef uint8_t piece_matrix[4][4]; + +typedef struct { + int8_t x; + int8_t y; +} vec2; + +typedef enum { + DOWN = 1, + RIGHT = 2, + LEFT = 3, + ROTATE_CCW = 4, + ROTATE_CW = 5, + HARD_DROP = 6 +} input_t; -- cgit v1.2.3-101-g0448