summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2019-03-04 21:13:33 -0500
committerAndrew Opalach <andrew@akon.city> 2019-03-04 21:13:33 -0500
commit8a5d8c4d909b24ccefd9e31a3ed112722aaed7d6 (patch)
treec31d4a7d570a8ba8c9d279c6ae70213339f2e711
parentc25557f0637046c85f46678ca58a0f9f60d25db7 (diff)
downloadcetris-8a5d8c4d909b24ccefd9e31a3ed112722aaed7d6.tar.gz
cetris-8a5d8c4d909b24ccefd9e31a3ed112722aaed7d6.tar.bz2
cetris-8a5d8c4d909b24ccefd9e31a3ed112722aaed7d6.zip
add lock delay
-rw-r--r--cetris.c17
-rw-r--r--cetris.h4
-rw-r--r--frontend/ncurses/ncurses_ui.c6
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));
}