コード例 #1
0
ファイル: engine.c プロジェクト: SkyPrayerStudio/yetris
/** Calls all drawing routines in order */
void engine_draw(game_s* g)
{
    WINDOW* board = engine.screen.board.win;
    werase(board);

    switch (g->state)
    {
    case PLAYING:
        engine_draw_board(&(g->board));
        engine_draw_piece(&(g->piece_ghost), board);
        engine_draw_piece(&(g->piece_current), board);
        if (global.game_next_no > 0)
            engine_draw_next_pieces(g);
        if (global.game_can_hold)
            engine_draw_hold(g);
        engine_draw_score(g);
        engine_draw_info(g);
        break;

    case PAUSED:
        engine_draw_board(&(g->board));
        engine_draw_pause();
        engine_draw_info(g); /* refresh the current time */
        break;

    case GAME_OVER:
        engine_draw_board(&(g->board));
        engine_draw_gameover();
        engine_draw_info(g);
        break;

    case HELP:
        engine_draw_board(&(g->board));
        engine_draw_info(g);
        engine_draw_help();
        break;

    case HSCORES:
        engine_draw_board(&(g->board));
        engine_draw_info(g);
        engine_draw_hscores();
        break;

    default: /* Umm... Nothing, I guess...? */ break;
    }
    wnoutrefresh(board);
    doupdate();
}
コード例 #2
0
ファイル: board.c プロジェクト: gitforhf/yetris
/** Deletes all the lines specified by the array #lines.
 *
 *  @note I know this function's ugly... I'll fix that later
 */
void board_delete_lines(board_s* b, bool lines[])
{
	int i, j, k;
	char clear1, clear2;

	/* The appearance of the line just before it's deleted */
	if (global.theme_clear_line[0] != '\0')
	{
		clear1 = global.theme_clear_line[0];
		clear2 = global.theme_clear_line[1];
	}
	else
	{
		clear1 = ':';
		clear2 = ':';
	}

	/* loop through all lines, doing something only on those marked 'true' */
	for (k = 0; k < BOARD_HEIGHT; k++)
	{
		if (!lines[k]) continue;

		/* A nice little animation for destroyed lines */
		for (i = 0; i < BOARD_WIDTH; i++)
		{
			b->block[i][k].theme[0] = clear1;
			b->block[i][k].theme[1] = clear2;
			b->block[i][k].color    = engine_get_color(WHITE_BLACK, true);
		}
	}

	engine_draw_board(b);
	wrefresh(engine.screen.board.win);
	usleep(200 * 1000);

	for (k = 0; k < BOARD_HEIGHT; k++)
	{
		if (!lines[k]) continue;

		/* Moves all upper lines one row down */
		for (j = k; j > 0; j--)
		{
			for (i = 0; i < BOARD_WIDTH; i++)
			{
				b->block[i][j] = b->block[i][j - 1];
				b->block[i][j].y += 1;
			}
		}
	}
}