tetris: different colors for different levels

pull/426/head
nick black 4 years ago
parent 5b7e2f574c
commit 925e416b8d
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC

@ -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);

Loading…
Cancel
Save