diff --git a/src/tetris/moveleft.h b/src/tetris/moveleft.h index e0c9d0be1..6b046cc76 100644 --- a/src/tetris/moveleft.h +++ b/src/tetris/moveleft.h @@ -20,16 +20,19 @@ void MoveLeft() { } if(lx < curpiece_->get_dim_x()){ // otherwise, nothing on this row ncpp::Cell b; - int cmpy = ly, cmpx = lx - 1; - curpiece_->translate(*board_, &cmpy, &cmpx); - if(board_->get_at(cmpy, cmpx, &b)){ - if(b.get().gcluster && b.get().gcluster != ' '){ - return; // move is blocked + for(int xdelt = 1 ; xdelt < 3 ; ++xdelt){ + int cmpy = ly, cmpx = lx - xdelt; + curpiece_->translate(*board_, &cmpy, &cmpx); + if(board_->get_at(cmpy, cmpx, &b)){ + // FIXME deal with e.g. lower half sliding under upper half + if(b.get().gcluster && b.get().gcluster != ' '){ + return; // move is blocked + } } } } } - --x; + x -= 2; if(!curpiece_->move(y, x) || !nc_.render()){ // FIXME needs y? throw TetrisNotcursesErr("move() or render()"); } diff --git a/src/tetris/moveright.h b/src/tetris/moveright.h index f8ca95922..d16f0656d 100644 --- a/src/tetris/moveright.h +++ b/src/tetris/moveright.h @@ -20,16 +20,18 @@ void MoveRight() { } if(lx >= 0){ // otherwise, nothing on this row ncpp::Cell b; - int cmpy = ly, cmpx = lx + 1; - curpiece_->translate(*board_, &cmpy, &cmpx); - if(board_->get_at(cmpy, cmpx, &b)){ - if(b.get().gcluster && b.get().gcluster != ' '){ - return; // move is blocked + for(int xdelt = 1 ; xdelt < 3 ; ++xdelt){ + int cmpy = ly, cmpx = lx + xdelt; + curpiece_->translate(*board_, &cmpy, &cmpx); + if(board_->get_at(cmpy, cmpx, &b)){ + if(b.get().gcluster && b.get().gcluster != ' '){ + return; // move is blocked + } } } } } - ++x; + x += 2; if(!curpiece_->move(y, x) || !nc_.render()){ // FIXME needs y? throw TetrisNotcursesErr("move() or render()"); }