This commit is contained in:
2025-03-03 00:26:05 +01:00
parent 1033f3a64c
commit 47d3d929db
3 changed files with 24 additions and 16 deletions

View File

@@ -192,15 +192,20 @@ void Game::nextFrame(const std::set<Action>& playerActions) {
// no need to apply gravity and lock delay if the piece was hard dropped
else {
/* GRAVITY */
// parameters.getGravity() gives the gravity for an assumed 20-line high board
int appliedGravity = this->parameters.getGravity() * std::max((double) this->board.getBoard().getBaseHeight() / 20.0, 1.0);
this->subVerticalPosition += appliedGravity;
while (this->subVerticalPosition >= SUBPX_PER_ROW) {
this->subVerticalPosition -= SUBPX_PER_ROW;
this->board.moveDown();
if (this->parameters.getLevel() >= 20) {
while (this->board.moveDown());
}
else {
// parameters.getGravity() gives the gravity for an assumed 20-line high board
int appliedGravity = this->parameters.getGravity() * std::max((double) this->board.getBoard().getBaseHeight() / 20.0, 1.0);
this->subVerticalPosition += appliedGravity;
while (this->subVerticalPosition >= SUBPX_PER_ROW) {
this->subVerticalPosition -= SUBPX_PER_ROW;
this->board.moveDown();
}
}
/* LOCK DELAY */
if (this->board.touchesGround()) {
this->totalLockDelay++;
@@ -304,10 +309,12 @@ void Game::lockPiece() {
this->totalForcedLockDelay = 0;
this->heldARR = 0;
this->leftARETime = this->parameters.getARE();
if (this->leftARETime == 0) {
this->lost = this->board.spawnNextPiece();
}
if (!this->hasWon()) {
this->leftARETime = this->parameters.getARE();
if (this->leftARETime == 0) {
this->lost = this->board.spawnNextPiece();
}
}
}
bool Game::hasWon() const {

View File

@@ -94,7 +94,7 @@ void GameParameters::updateStats() {
/* GRAVITY */
// get gravity for an assumed 20-rows board
static const int gravityPerLevel[] = {
0, // LVL0
0, // lvl0 = no gravity
1, // 60f/line, 20s total
2, // 30f/line, 10s total
3, // 20f/line, 6.66s total
@@ -113,7 +113,8 @@ void GameParameters::updateStats() {
40, // 1.5f/line, 30f total
1 * 60, // 1line/f, 20f total
2 * 60, // 2line/f, 10f total
4 * 60 // 4line/f, 5f total
4 * 60, // 4line/f, 5f total
20 * 60 // lvl20 = instant gravity
};
if (this->level < 0) {
this->gravity = gravityPerLevel[0];

View File

@@ -14,7 +14,7 @@ static const int FRAMES_PER_INPUT = FRAMES_PER_SECOND / 2;
static const int MAXIMUM_PIECE_SIZE = 10;
static const int DEFAULT_PIECE_SIZE = 4;
static const int MAXIMUM_BOARD_WIDTH = 30;
static const int MAXIMYM_BOARD_HEIGHT = 40;
static const int MAXIMUM_BOARD_HEIGHT = 40;
static const Gamemode DEFAULT_GAMEMODE = SPRINT;
@@ -103,12 +103,12 @@ void TextApp::chooseBoardSize() {
}
catch (std::exception ignored) {}
std::cout << "Choose the height of the board (from 1 to " << MAXIMYM_BOARD_HEIGHT << ")." << std::endl;
std::cout << "Choose the height of the board (from 1 to " << MAXIMUM_BOARD_HEIGHT << ")." << std::endl;
std::cout << "Choice: ";
std::getline(std::cin, answer);
try {
int selectedSize = std::stoi(answer);
if (selectedSize >= 1 && selectedSize <= MAXIMYM_BOARD_HEIGHT) {
if (selectedSize >= 1 && selectedSize <= MAXIMUM_BOARD_HEIGHT) {
this->gameMenu.setBoardHeight(selectedSize);
}
}