mirror of
https://github.com/dankamongmen/notcurses
synced 2025-03-10 01:29:05 -04:00
tetris: curpiece is now a Visual, not a Plane #558
This commit is contained in:
parent
a2888f2c75
commit
803296fb80
@ -1,5 +1,5 @@
|
|||||||
bool LockPiece(){ // returns true if game has ended by reaching level 16
|
bool LockPiece(){ // returns true if game has ended by reaching level 16
|
||||||
curpiece_->mergedown(*board_);
|
curpiece_->get_plane()->mergedown(*board_);
|
||||||
int bdimy, bdimx;
|
int bdimy, bdimx;
|
||||||
board_->get_dim(&bdimy, &bdimx);
|
board_->get_dim(&bdimy, &bdimx);
|
||||||
int cleared; // how many contiguous lines were cleared
|
int cleared; // how many contiguous lines were cleared
|
||||||
|
@ -63,7 +63,7 @@ private:
|
|||||||
ncpp::NotCurses& nc_;
|
ncpp::NotCurses& nc_;
|
||||||
uint64_t score_;
|
uint64_t score_;
|
||||||
std::mutex mtx_; // guards msdelay_
|
std::mutex mtx_; // guards msdelay_
|
||||||
std::unique_ptr<ncpp::Plane> curpiece_;
|
std::unique_ptr<ncpp::Visual> curpiece_;
|
||||||
std::unique_ptr<ncpp::Plane> board_;
|
std::unique_ptr<ncpp::Plane> board_;
|
||||||
std::unique_ptr<ncpp::Visual> backg_;
|
std::unique_ptr<ncpp::Visual> backg_;
|
||||||
ncpp::Plane* stdplane_;
|
ncpp::Plane* stdplane_;
|
||||||
@ -79,7 +79,7 @@ private:
|
|||||||
if(!curpiece_){
|
if(!curpiece_){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
curpiece_->get_yx(y, x);
|
curpiece_->get_plane()->get_yx(y, x);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
bool MoveDown() { // returns true if the game has ended as a result of this move
|
bool MoveDown() { // returns true if the game has ended as a result of this move
|
||||||
int y, x;
|
int y, x;
|
||||||
if(PrepForMove(&y, &x)){
|
if(PrepForMove(&y, &x)){
|
||||||
if(!curpiece_->move(y + 1, x)){
|
if(!curpiece_->get_plane()->move(y + 1, x)){
|
||||||
throw TetrisNotcursesErr("move()");
|
throw TetrisNotcursesErr("move()");
|
||||||
}
|
}
|
||||||
if(InvalidMove()){
|
if(InvalidMove()){
|
||||||
if(!curpiece_->move(y, x)){
|
if(!curpiece_->get_plane()->move(y, x)){
|
||||||
throw TetrisNotcursesErr("move()");
|
throw TetrisNotcursesErr("move()");
|
||||||
}
|
}
|
||||||
if(y <= board_top_y_ - 1){
|
if(y <= board_top_y_ - 1){
|
||||||
|
@ -2,11 +2,11 @@ void MoveLateral(int direction) { // pass in -1 for left, 1 for right
|
|||||||
int shift = 2 * direction;
|
int shift = 2 * direction;
|
||||||
int y, x;
|
int y, x;
|
||||||
if(PrepForMove(&y, &x)){
|
if(PrepForMove(&y, &x)){
|
||||||
if(!curpiece_->move(y, x + shift)){
|
if(!curpiece_->get_plane()->move(y, x + shift)){
|
||||||
throw TetrisNotcursesErr("move()");
|
throw TetrisNotcursesErr("move()");
|
||||||
}
|
}
|
||||||
if(InvalidMove()){
|
if(InvalidMove()){
|
||||||
if(!curpiece_->move(y, x)){
|
if(!curpiece_->get_plane()->move(y, x)){
|
||||||
throw TetrisNotcursesErr("move()");
|
throw TetrisNotcursesErr("move()");
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// tidx is an index into tetriminos. yoff and xoff are relative to the
|
// tidx is an index into tetriminos. yoff and xoff are relative to the
|
||||||
// terminal's origin. returns colored north-facing tetrimino on a plane.
|
// terminal's origin. returns colored north-facing tetrimino on a plane.
|
||||||
std::unique_ptr<ncpp::Plane> NewPiece() {
|
std::unique_ptr<ncpp::Visual> NewPiece() {
|
||||||
// "North-facing" tetrimino forms (form in which they are released from the top) are expressed in terms of
|
// "North-facing" tetrimino forms (form in which they are released from the top) are expressed in terms of
|
||||||
// two rows having between 2 and 4 columns. We map each game column to four columns and each game row to two
|
// two rows having between 2 and 4 columns. We map each game column to four columns and each game row to two
|
||||||
// rows. Each byte of the texture maps to one 4x4 component block (and wastes 7 bits).
|
// rows. Each byte of the texture maps to one 4x4 component block (and wastes 7 bits).
|
||||||
@ -16,7 +16,8 @@ std::unique_ptr<ncpp::Plane> NewPiece() {
|
|||||||
int y, x;
|
int y, x;
|
||||||
stdplane_->get_dim(&y, &x);
|
stdplane_->get_dim(&y, &x);
|
||||||
const int xoff = x / 2 - BOARD_WIDTH + 2 * (random() % (BOARD_WIDTH / 2));
|
const int xoff = x / 2 - BOARD_WIDTH + 2 * (random() % (BOARD_WIDTH / 2));
|
||||||
std::unique_ptr<ncpp::Plane> n = std::make_unique<ncpp::Plane>(2, cols, board_top_y_ - 1, xoff, nullptr);
|
/* FIXME
|
||||||
|
std::unique_ptr<ncpp::Visual> n = std::make_unique<ncpp::Visual>(2, cols, board_top_y_ - 1, xoff, nullptr);
|
||||||
if(n){
|
if(n){
|
||||||
uint64_t channels = 0;
|
uint64_t channels = 0;
|
||||||
channels_set_bg_alpha(&channels, CELL_ALPHA_TRANSPARENT);
|
channels_set_bg_alpha(&channels, CELL_ALPHA_TRANSPARENT);
|
||||||
@ -38,4 +39,6 @@ std::unique_ptr<ncpp::Plane> NewPiece() {
|
|||||||
throw TetrisNotcursesErr("render()");
|
throw TetrisNotcursesErr("render()");
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
|
*/
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
bool InvalidMove() { // a bit wasteful, but piece are tiny
|
bool InvalidMove() { // a bit wasteful, but piece are tiny
|
||||||
int dy, dx;
|
int dy, dx;
|
||||||
curpiece_->get_dim(&dy, &dx);
|
curpiece_->get_plane()->get_dim(&dy, &dx);
|
||||||
while(dy--){
|
while(dy--){
|
||||||
int x = dx;
|
int x = dx;
|
||||||
while(x--){
|
while(x--){
|
||||||
ncpp::Cell c, b;
|
ncpp::Cell c, b;
|
||||||
if(curpiece_->get_at(dy, x, &c) < 0){
|
if(curpiece_->get_plane()->get_at(dy, x, &c) < 0){
|
||||||
throw TetrisNotcursesErr("get_at()");
|
throw TetrisNotcursesErr("get_at()");
|
||||||
}
|
}
|
||||||
if(c.is_simple()){
|
if(c.is_simple()){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
curpiece_->release(c);
|
curpiece_->get_plane()->release(c);
|
||||||
int transy = dy, transx = x; // need game area coordinates via translation
|
int transy = dy, transx = x; // need game area coordinates via translation
|
||||||
curpiece_->translate(*board_, &transy, &transx);
|
curpiece_->get_plane()->translate(*board_, &transy, &transx);
|
||||||
if(transy < 0 || transy >= board_->get_dim_y() || transx < 0 || transx >= board_->get_dim_x()){
|
if(transy < 0 || transy >= board_->get_dim_y() || transx < 0 || transx >= board_->get_dim_x()){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user