Пример #1
0
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);
}
Пример #2
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;
        }
    }
}