add an fps limit, implement logic to not take pawns in protected fields
This commit is contained in:
@@ -57,6 +57,9 @@ void Board::initWindow() {
|
||||
"Okno planszy - Chinczyk188",
|
||||
sf::Style::Default);
|
||||
|
||||
// Ustaw rozsądny limit FPS
|
||||
this->window->setFramerateLimit(120);
|
||||
|
||||
}
|
||||
|
||||
void Board::initBoard() {
|
||||
|
||||
@@ -78,7 +78,8 @@ void Engine::nextTurn() {
|
||||
|
||||
// Wybieranie pionka
|
||||
bool pickAPlace = false;
|
||||
bool isMovePossible = checkPossibleMoves(currentPlayer.getColor(), 6) > 0;
|
||||
/*bool isMovePossible = checkPossibleMoves(currentPlayer.getColor(), 6) > 0;*/
|
||||
bool isMovePossible = checkPossibleMoves(currentPlayer.getColor(), diceRoll) > 0;
|
||||
// Wylosowanie szóstki to specjalny przypadek
|
||||
if (diceRoll == 6) {
|
||||
|
||||
@@ -353,6 +354,12 @@ short Engine::fieldToFirstPawnId(short color, short field) {
|
||||
bool Engine::isMoveLegal(short color, short pawnId, short steps) {
|
||||
// kopia tego, co jest w Engine::movePawn()
|
||||
short field = relPosToField(color, this->players[color].getRelativePawns()[pawnId]);
|
||||
// Jeśli ruch, który chcemy wykonać zbiłby pionki w chronionym polu, zwróć false.
|
||||
if (this->players[color].getRelativePawns()[pawnId] + steps < 44) {
|
||||
short newField = relPosToField(color, this->players[color].getRelativePawns()[pawnId] + steps);
|
||||
short occupyingColor = fieldToColor(newField);
|
||||
if (occupyingColor != -1 && relPosToField(occupyingColor, 0) == newField) return false;
|
||||
}
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (field == getPawnInitialPosition(color, i))
|
||||
return false;
|
||||
@@ -497,6 +504,13 @@ short Engine::takePawns(short color, short field) {
|
||||
*/
|
||||
bool Engine::movePiece(short color, short field, short steps) { // podajemy color dla sanity-checku, czy użytkownik nie chce ruszyć nie swojego pionka
|
||||
|
||||
// Jeśli ruch, który chcemy wykonać zbiłby pionki w chronionym polu, zwróć false.
|
||||
if (fieldToRelPos(color, field) + steps < 44) {
|
||||
short newField = relPosToField(color, fieldToRelPos(color, field) + steps);
|
||||
short occupyingColor = fieldToColor(newField);
|
||||
if (occupyingColor != -1 && relPosToField(occupyingColor, 0) == newField) return false;
|
||||
}
|
||||
|
||||
// Nie pozwól użytkownikowi wybrać (i w konsekwencji ruszyć) pionków w bazie
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (field == getPawnInitialPosition(color, i))
|
||||
@@ -522,7 +536,11 @@ bool Engine::movePiece(short color, short field, short steps) { // podajemy colo
|
||||
}
|
||||
}
|
||||
// - jeśli ma, musimy go (/je) zbić
|
||||
if (isNewFieldOccupied && color != occupyingColor) takePawns(occupyingColor, newField);
|
||||
short takenPawns = -1;
|
||||
if (isNewFieldOccupied && color != occupyingColor) takenPawns = takePawns(occupyingColor, newField);
|
||||
// - uwaga! jeśli nie zbiliśmy żadnego pionka, to dlatego, ponieważ pionki są w chronionym polu!!!
|
||||
// musimy to uszanować, dlatego kończymy metodę zwracając false
|
||||
if (isNewFieldOccupied && takenPawns == -1) return false;
|
||||
// - w końcu, dopisujemy pionek bieżącego gracza
|
||||
this->board.fields[newField][i] = color + 4;
|
||||
this->players[this->currentPlayerIndex].unsafeMovePiece(i, steps);
|
||||
|
||||
@@ -279,7 +279,7 @@ void Game::run() {
|
||||
|
||||
// Zapisz do pliku CSV
|
||||
this->dumpLeaderboards(this->leaderboardLocation);
|
||||
this->dumpLeaderboards("." + this->leaderboardLocation + ".old", false);
|
||||
// this->dumpLeaderboards("." + this->leaderboardLocation + ".old", false);
|
||||
|
||||
this->board.smartSleep(20000);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user