From 925e416b8da37a2ded188a9cd23699646296f51b Mon Sep 17 00:00:00 2001 From: nick black Date: Thu, 26 Mar 2020 20:19:57 -0400 Subject: [PATCH] tetris: different colors for different levels --- src/tetris/lock.h | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/tetris/lock.h b/src/tetris/lock.h index 24c35dd89..fdee35e4b 100644 --- a/src/tetris/lock.h +++ b/src/tetris/lock.h @@ -1,22 +1,27 @@ +void StainBoard(int dimy, int dimx){ + if(!board_->cursor_move(0, 1)){ + throw TetrisNotcursesErr("cursor_move()"); + } + int high = 0xff - level_ * 16, low = level_ * 16; // rgb calculation limits us to 16 levels (0--15) + uint64_t tl = 0, tr = 0, bl = 0, br = 0; + channels_set_fg_rgb(&tl, high, 0, low); channels_set_bg_alpha(&tl, CELL_ALPHA_TRANSPARENT); + channels_set_fg_rgb(&tr, low, high, 0); channels_set_bg_alpha(&tr, CELL_ALPHA_TRANSPARENT); + channels_set_fg_rgb(&bl, 0, low, high); channels_set_bg_alpha(&bl, CELL_ALPHA_TRANSPARENT); + channels_set_fg_rgb(&br, 0, high, low); channels_set_bg_alpha(&br, CELL_ALPHA_TRANSPARENT); + if(!board_->stain(dimy - 2, dimx - 2, tl, tr, bl, br)){ + throw TetrisNotcursesErr("stain()"); + } +} + void LockPiece(){ curpiece_->mergedown(*board_); int bdimy, bdimx; board_->get_dim(&bdimy, &bdimx); int cleared; // how many contiguous lines were cleared do{ - uint64_t tl = 0, tr = 0, bl = 0, br = 0; - channels_set_fg(&tl, 0xff0000); channels_set_bg_alpha(&tl, CELL_ALPHA_TRANSPARENT); - channels_set_fg(&tr, 0x00ff00); channels_set_bg_alpha(&tr, CELL_ALPHA_TRANSPARENT); - channels_set_fg(&bl, 0x0000ff); channels_set_bg_alpha(&bl, CELL_ALPHA_TRANSPARENT); - channels_set_fg(&br, 0x00ffff); channels_set_bg_alpha(&br, CELL_ALPHA_TRANSPARENT); - if(!board_->cursor_move(0, 1)){ - throw TetrisNotcursesErr("cursor_move()"); - } - if(!board_->stain(bdimy - 2, bdimx - 2, tl, tr, bl, br)){ - throw TetrisNotcursesErr("stain()"); - } cleared = 0; int y; + StainBoard(bdimy, bdimx); for(y = bdimy - 2 ; y > 0 ; --y){ // get the lowest cleared area if(LineClear(y)){ ++cleared; @@ -44,6 +49,7 @@ void LockPiece(){ static constexpr int points[] = {50, 150, 350, 1000}; score_ += (level_ + 1) * points[cleared - 1]; level_ = linescleared_ / 10; + StainBoard(bdimy, bdimx); UpdateScore(); } }while(cleared);