From 8a5d8c4d909b24ccefd9e31a3ed112722aaed7d6 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Mon, 4 Mar 2019 21:13:33 -0500 Subject: add lock delay --- cetris.c | 17 ++++++++++++++--- cetris.h | 4 +++- frontend/ncurses/ncurses_ui.c | 6 +++--- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/cetris.c b/cetris.c index d1cea14..4356e86 100644 --- a/cetris.c +++ b/cetris.c @@ -117,8 +117,8 @@ void move_current(struct cetris_game* g, vec2 offset) { g->current.pos.y -= offset.y; g->current.pos.x -= offset.x; - if (check == -1) { - next_piece(g); + if (check == -1 && g->current.lock_tick == 0) { + g->current.lock_tick = g->tick + 30; } clear_move_queue(g); @@ -361,7 +361,8 @@ void init_piece_queue(struct cetris_game* g) { } memcpy(g->piece_queue[i].mat, default_matrices[i], sizeof(piece_matrix)); g->piece_queue[i].r = INIT; - g->piece_queue[i].pos = (vec2){5, 0}; + g->piece_queue[i].lock_tick = 0; + g->piece_queue[i].pos = (vec2){3, 20}; // y = 22 - 1 for matrix } } @@ -377,6 +378,15 @@ void shuffle_queue(struct cetris_game* g) { void update_game_tick(struct cetris_game* g) { if ((g->tick % CETRIS_HZ) == 0) move_down(g); + if (g->current.lock_tick && g->current.lock_tick <= g->tick) { + g->current.pos.y++; + if (check_new_matrix(g, g->current.mat) <= 0) { + next_piece(g); + } + g->current.pos.y--; + g->current.lock_tick = 0; + } + enum movements current_move = g->move_queue[g->move_queue_pos]; /* input independedent das movement */ @@ -412,6 +422,7 @@ void update_game_tick(struct cetris_game* g) { did_move = 0; break; } + //g->current.lock_tick = 0; if (g->move_queue_count != 0) g->move_queue_pos++; if (g->move_queue_pos >= 20) clear_move_queue(g); } diff --git a/cetris.h b/cetris.h index 3ca728d..cc353de 100644 --- a/cetris.h +++ b/cetris.h @@ -1,7 +1,8 @@ #pragma once #define BOARD_X 10 -#define BOARD_Y 20 +#define BOARD_Y 43 +#define BOARD_VISABLE 23 #define CETRIS_HZ 60 #define CETRIS_DAS_DELAY 11 @@ -43,6 +44,7 @@ struct tetrimino { color c; piece_matrix mat; vec2 pos; + int lock_tick; }; typedef struct { diff --git a/frontend/ncurses/ncurses_ui.c b/frontend/ncurses/ncurses_ui.c index 8eef158..9fdc83b 100644 --- a/frontend/ncurses/ncurses_ui.c +++ b/frontend/ncurses/ncurses_ui.c @@ -81,15 +81,15 @@ void curses_init() { void draw_board(struct cetris_game* g) { mvaddstr(0, 0, PLAY_FIELD_STR); for (int x = 0; x < BOARD_X; x++) { - for (int y = 0; y < BOARD_Y; y++) { + for (int y = BOARD_VISABLE; y < BOARD_Y; y++) { if (g->board[x][y].occupied) { attron(COLOR_PAIR(g->board[x][y].c)); if (g->board[x][y].remove_tick > 0) { if (g->tick % 2 == 0) { - mvaddstr(y + 1, x * 2 + X_OFFSET, BLOCK); + mvaddstr((y - BOARD_VISABLE) + 1, x * 2 + X_OFFSET, BLOCK); } } else { - mvaddstr(y + 1, x * 2 + X_OFFSET, BLOCK); + mvaddstr((y - BOARD_VISABLE) + 1, x * 2 + X_OFFSET, BLOCK); } attroff(COLOR_PAIR(g->board[x][y].c)); } -- cgit v1.2.3-101-g0448