int time_drop(t_tetris *s) { if (move_tetrimino(s, 0, 1) == -1) { fill_matrix_with_tetrimino(s); check_complete_lines(s); if (get_current_tetrimino(s) == -1) return (-2); get_next_tetrimino(s); if (s->scene->boolnext == true) { clear_next(s); display_tetrimino(s->windows->next, *s->game.next); } if (init_tetrimino_pos(s) == -1) return (-2); } else return (0); return (0); }
static void update(Tetris *tetris) { if (tetris->key_quit) { Tetris_destroy(tetris); exit(0); } else if (tetris->key_pause) { if (tetris->game_state == RUNNING) { tetris->game_state = PAUSED; Renderer_erase_panel_labels(tetris->renderer); Renderer_erase_panel_line_counter(tetris->renderer); Renderer_erase_panel_score(tetris->renderer); Renderer_erase_panel_level(tetris->renderer); Renderer_draw_pause_message(tetris->renderer); } else if (tetris->game_state == PAUSED) { tetris->game_state = RUNNING; Renderer_erase_pause_message(tetris->renderer); Renderer_draw_panel_labels(tetris->renderer); Renderer_draw_panel_line_counter(tetris->renderer, tetris->lines_completed); Renderer_draw_panel_score(tetris->renderer, tetris->score); Renderer_draw_panel_level(tetris->renderer, tetris->level); } } if (tetris->game_state != PAUSED) { if (collision(COORDINATE_BOTTOM_COLLISION, tetris->current_block, tetris->renderer->buffer) ) { ++tetris->movement_frame_counter; if (tetris->movement_frame_counter == tetris->movement_frame_delay) { tetris->movement_frame_counter = 0; Renderer_draw_block(tetris->renderer, tetris->current_block); int complete_lines = check_complete_lines(tetris); next_block(tetris); check_game_over(tetris); update_score(tetris, complete_lines); update_level(tetris); Renderer_draw_panel_score(tetris->renderer, tetris->score); Renderer_draw_panel_level(tetris->renderer, tetris->level); tetris->renderer->buffer->dirty = 1; } } if (!collision(COORDINATE_BOTTOM_COLLISION, tetris->current_block, tetris->renderer->buffer) ) { ++tetris->gravity_frame_counter; if (tetris->gravity_frame_counter == tetris->gravity_frame_delay) { tetris->gravity_frame_counter = 0; ++tetris->current_block->y; tetris->renderer->buffer->dirty = 1; } } if (tetris->key_drop) { while (!collision(COORDINATE_BOTTOM_COLLISION, tetris->current_block, tetris->renderer->buffer) ) { ++tetris->current_block->y; tetris->score += 2; } tetris->renderer->buffer->dirty = 1; } else if (tetris->key_rotate && rotate_collision(tetris->current_block, tetris->renderer->buffer) != 1 ) { Block_rotate(tetris->current_block); if (tetris->enable_ghost_block == 1) { set_ghost_block(tetris); } tetris->renderer->buffer->dirty = 1; } else if (tetris->key_ghost_block) { if (tetris->enable_ghost_block) { tetris->enable_ghost_block = 0; } else { tetris->enable_ghost_block = 1; set_ghost_block(tetris); } tetris->renderer->buffer->dirty = 1; } else if (tetris->key_left && !collision(COORDINATE_LEFT_COLLISION, tetris->current_block, tetris->renderer->buffer) ) { --tetris->current_block->x; if (tetris->enable_ghost_block == 1) { set_ghost_block(tetris); } tetris->renderer->buffer->dirty = 1; } else if (tetris->key_right && !collision(COORDINATE_RIGHT_COLLISION, tetris->current_block, tetris->renderer->buffer) ) { ++tetris->current_block->x; if (tetris->enable_ghost_block == 1) { set_ghost_block(tetris); } tetris->renderer->buffer->dirty = 1; } else if (tetris->key_down && !collision(COORDINATE_BOTTOM_COLLISION, tetris->current_block, tetris->renderer->buffer) ) { ++tetris->current_block->y; if (tetris->enable_ghost_block == 1) { set_ghost_block(tetris); } ++tetris->score; Renderer_draw_panel_score(tetris->renderer, tetris->score); tetris->renderer->buffer->dirty = 1; } } }