You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
notcurses/src/tetris/main.cpp

90 lines
2.0 KiB
C++

#define NCPP_EXCEPTIONS_PLEASE
#include <mutex>
#include <array>
#include <atomic>
#include <thread>
#include <chrono>
#include <vector>
#include <cstdlib>
#include <clocale>
#include <unistd.h>
#include <cinttypes>
#include <ncpp/NotCurses.hh>
#include <ncpp/Visual.hh>
#include "compat/compat.h"
#include "builddef.h"
#include "version.h"
std::mutex ncmtx;
const std::string BackgroundFile = notcurses_data_path(nullptr, "tetris-background.jpg");
const std::string LogoFile = notcurses_data_path(nullptr, "notcurses.png");
using namespace std::chrono_literals;
class Tetris {
public:
Tetris(ncpp::NotCurses& nc, std::atomic_bool& gameover) :
nc_(nc),
score_(0),
curpiece_(nullptr),
board_(nullptr),
backg_(nullptr),
stdplane_(nc_.get_stdplane()),
scoreplane_(nullptr),
gameover_(gameover),
level_(1),
linescleared_(0),
msdelay_(Gravity(level_))
{
DrawBoard();
curpiece_ = NewPiece();
}
// 0.5 cell aspect: 1 board height == one row. 1 board width == two columns.
static constexpr auto BOARD_WIDTH = 10;
static constexpr auto BOARD_HEIGHT = 20;
#include "gravity.h"
#include "ticker.h"
#include "score.h"
#include "clear.h"
#include "stain.h"
#include "lock.h"
#include "movedown.h"
#include "movelateral.h"
#include "rotate.h"
private:
ncpp::NotCurses& nc_;
uint64_t score_;
std::mutex mtx_; // guards msdelay_
std::unique_ptr<ncpp::Plane> curpiece_;
std::unique_ptr<ncpp::Plane> board_;
std::unique_ptr<ncpp::Plane> logop_;
std::unique_ptr<ncpp::Visual> backg_;
ncpp::Plane* stdplane_;
std::unique_ptr<ncpp::Plane> scoreplane_;
std::atomic_bool& gameover_;
int board_top_y_;
int level_;
int linescleared_;
std::chrono::milliseconds msdelay_;
// Returns true if there's a current piece which can be moved
auto PrepForMove(int* y, int* x) -> bool {
if(!curpiece_){
return false;
}
curpiece_->get_yx(y, x);
return true;
}
#include "background.h"
#include "stuck.h"
#include "newpiece.h"
};
#include "main.h"