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",
|
"Okno planszy - Chinczyk188",
|
||||||
sf::Style::Default);
|
sf::Style::Default);
|
||||||
|
|
||||||
|
// Ustaw rozsądny limit FPS
|
||||||
|
this->window->setFramerateLimit(120);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Board::initBoard() {
|
void Board::initBoard() {
|
||||||
|
|||||||
@@ -78,7 +78,8 @@ void Engine::nextTurn() {
|
|||||||
|
|
||||||
// Wybieranie pionka
|
// Wybieranie pionka
|
||||||
bool pickAPlace = false;
|
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
|
// Wylosowanie szóstki to specjalny przypadek
|
||||||
if (diceRoll == 6) {
|
if (diceRoll == 6) {
|
||||||
|
|
||||||
@@ -353,6 +354,12 @@ short Engine::fieldToFirstPawnId(short color, short field) {
|
|||||||
bool Engine::isMoveLegal(short color, short pawnId, short steps) {
|
bool Engine::isMoveLegal(short color, short pawnId, short steps) {
|
||||||
// kopia tego, co jest w Engine::movePawn()
|
// kopia tego, co jest w Engine::movePawn()
|
||||||
short field = relPosToField(color, this->players[color].getRelativePawns()[pawnId]);
|
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++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
if (field == getPawnInitialPosition(color, i))
|
if (field == getPawnInitialPosition(color, i))
|
||||||
return false;
|
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
|
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
|
// Nie pozwól użytkownikowi wybrać (i w konsekwencji ruszyć) pionków w bazie
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
if (field == getPawnInitialPosition(color, 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ć
|
// - 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
|
// - w końcu, dopisujemy pionek bieżącego gracza
|
||||||
this->board.fields[newField][i] = color + 4;
|
this->board.fields[newField][i] = color + 4;
|
||||||
this->players[this->currentPlayerIndex].unsafeMovePiece(i, steps);
|
this->players[this->currentPlayerIndex].unsafeMovePiece(i, steps);
|
||||||
|
|||||||
@@ -279,7 +279,7 @@ void Game::run() {
|
|||||||
|
|
||||||
// Zapisz do pliku CSV
|
// Zapisz do pliku CSV
|
||||||
this->dumpLeaderboards(this->leaderboardLocation);
|
this->dumpLeaderboards(this->leaderboardLocation);
|
||||||
this->dumpLeaderboards("." + this->leaderboardLocation + ".old", false);
|
// this->dumpLeaderboards("." + this->leaderboardLocation + ".old", false);
|
||||||
|
|
||||||
this->board.smartSleep(20000);
|
this->board.smartSleep(20000);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user