turned ifs into switches, added win chime
This commit is contained in:
@@ -18,6 +18,11 @@ Engine::Engine(): currentPlayerIndex(0) {
|
|||||||
std::cerr << "Nie udalo sie zaladowac efektu dzwiekowego ruchu pionkow.\n\n";
|
std::cerr << "Nie udalo sie zaladowac efektu dzwiekowego ruchu pionkow.\n\n";
|
||||||
this->pawnmoveLoaded = false;
|
this->pawnmoveLoaded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!this->tadaBuffer.openFromFile("res/audio/jimhancock_tada.ogg")) {
|
||||||
|
std::cerr << "Nie udalo sie zaladowac efektu dzwiekowego wygranej.\n\n";
|
||||||
|
this->tadaLoaded = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Engine::addPlayer(const std::string& name, unsigned int seed, short color) {
|
void Engine::addPlayer(const std::string& name, unsigned int seed, short color) {
|
||||||
@@ -58,17 +63,21 @@ void Engine::nextTurn() {
|
|||||||
bool pickAPlace = false;
|
bool pickAPlace = false;
|
||||||
// Wylosowanie szóstki to specjalny przypadek
|
// Wylosowanie szóstki to specjalny przypadek
|
||||||
if (diceRoll == 6) {
|
if (diceRoll == 6) {
|
||||||
if (currentPlayer.pawnsActive == 0) {
|
|
||||||
// Musi wyjść pionkiem
|
std::string choice;
|
||||||
|
switch (currentPlayer.pawnsActive) {
|
||||||
|
|
||||||
|
// 0 pionków na planszy - musi wyjść pionkiem
|
||||||
|
case 0:
|
||||||
std::cout << currentPlayer.getName() << " wychodzi pierwszym pionkiem z bazy.\n";
|
std::cout << currentPlayer.getName() << " wychodzi pierwszym pionkiem z bazy.\n";
|
||||||
currentPlayer.pawnsAtBase--;
|
currentPlayer.pawnsAtBase--;
|
||||||
currentPlayer.pawnsActive++;
|
currentPlayer.pawnsActive++;
|
||||||
this->pawnmoveBuffer.play();
|
this->pawnmoveBuffer.play();
|
||||||
this->board.smartSleep(2000);
|
this->board.smartSleep(2000);
|
||||||
} else if (currentPlayer.pawnsActive > 0 && currentPlayer.pawnsActive < 4) {
|
break;
|
||||||
|
|
||||||
// Może wyjść z bazy albo ruszyć pionek
|
// 1, 2, 3 pionki na planszy - może wyjść z bazy albo ruszyć pionek
|
||||||
std::string choice;
|
case 1: case 2: case 3:
|
||||||
|
|
||||||
std::cout << "Co chcesz zrobic?\n";
|
std::cout << "Co chcesz zrobic?\n";
|
||||||
std::cout << "a) Wyjsc pionkiem z bazy\n"
|
std::cout << "a) Wyjsc pionkiem z bazy\n"
|
||||||
@@ -77,13 +86,9 @@ void Engine::nextTurn() {
|
|||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|
||||||
// Czyścimy bufor, aby zignorować cokolwiek, co pojawiło się po znaku
|
// getline() nie pozostawia nic w buforze wejściowym, dlatego nie musimy
|
||||||
// białym a przed \n - aby np. żaden z użytkowników nie mógł
|
// aż tak na niego uważać, jak w przypadku cin'a.
|
||||||
// napisać "a a" i potencjalnie zadecydować o ruchu oponenta.
|
|
||||||
// std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
|
||||||
|
|
||||||
// std::cin >> choice;
|
|
||||||
// std::cin.sync();
|
|
||||||
choice = this->board.asyncStrGetline();
|
choice = this->board.asyncStrGetline();
|
||||||
choice[0] |= 32;
|
choice[0] |= 32;
|
||||||
|
|
||||||
@@ -112,35 +117,57 @@ void Engine::nextTurn() {
|
|||||||
|
|
||||||
} else std::cout << "Podaj jedna z wymienionych odpowiedzi!\n> ";
|
} else std::cout << "Podaj jedna z wymienionych odpowiedzi!\n> ";
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
} else if (currentPlayer.pawnsActive == 4) {
|
// 4 pionki na planszy - musi ruszyć pionek, o ile może
|
||||||
// Musi ruszyć pionek, o ile może
|
case 4:
|
||||||
// TODO
|
// TODO
|
||||||
pickAPlace = true;
|
pickAPlace = true;
|
||||||
this->pawnmoveBuffer.play();
|
this->pawnmoveBuffer.play();
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Musi ruszyć któryś z pionków
|
// Jeśli nie wypadło 6, gracz musi ruszyć któryś z pionków
|
||||||
pickAPlace = true;
|
switch (currentPlayer.pawnsActive) {
|
||||||
if (currentPlayer.pawnsActive == 1) {
|
|
||||||
// Jedyny pionek możemy ruszyć za niego
|
// 0 pionków na planszy
|
||||||
|
case 0:
|
||||||
|
// Gracz nie może ruszyć pionków, których nie ma.
|
||||||
pickAPlace = false;
|
pickAPlace = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 1 pionek na planszy
|
||||||
|
case 1:
|
||||||
|
// Nie potrzebujemy, aby gracz wskazał jedyny pionek na planszy,
|
||||||
|
// dlatego ruszamy go za niego.
|
||||||
|
pickAPlace = false;
|
||||||
|
// TODO: znajdź ten pionek i ustaw selectedField na niego!!!
|
||||||
std::cout << currentPlayer.getName() << " rusza jedyny pionek "
|
std::cout << currentPlayer.getName() << " rusza jedyny pionek "
|
||||||
<< diceRoll << " pol do przodu.\n";
|
<< diceRoll << " pol do przodu.\n";
|
||||||
this->pawnmoveBuffer.play();
|
this->pawnmoveBuffer.play();
|
||||||
this->board.smartSleep(2000);
|
this->board.smartSleep(2000);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 2, 3, 4 pionki na planszy
|
||||||
|
case 2: case 3: case 4:
|
||||||
|
// Gracz musi wybrać pionek
|
||||||
|
pickAPlace = true;
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentPlayer.pawnsActive > 1 && pickAPlace) {
|
if (pickAPlace) {
|
||||||
std::cout << "Wybierz prosze pionek na planszy ktorym chcesz wykonac ruch.\n";
|
std::cout << "Wybierz prosze pionek na planszy ktorym chcesz wykonac ruch.\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Użytkownik wybiera pionek na planszy, którym chce się ruszyć
|
// Użytkownik wybiera pionek na planszy, którym chce się ruszyć
|
||||||
short pickStatus = 0;
|
short pickStatus = 0;
|
||||||
short selectedField = -1;
|
short selectedField = -1;
|
||||||
if (currentPlayer.pawnsActive == 0 || !pickAPlace) pickStatus = 8; // pomiń pętlę
|
if (!pickAPlace) pickStatus = 8; // pomiń pętlę
|
||||||
while (pickStatus != 8) {
|
while (pickStatus != 8) {
|
||||||
|
|
||||||
this->board.selectAField(pickStatus, selectedField);
|
this->board.selectAField(pickStatus, selectedField);
|
||||||
@@ -149,10 +176,13 @@ void Engine::nextTurn() {
|
|||||||
|
|
||||||
std::cout << "(Engine.cpp) selected: " << selectedField << "\n";
|
std::cout << "(Engine.cpp) selected: " << selectedField << "\n";
|
||||||
|
|
||||||
|
// Jeżeli gracz się ruszył, odtwórz dźwięk ruchu
|
||||||
|
if (selectedField != -1) {
|
||||||
this->pawnmoveBuffer.play();
|
this->pawnmoveBuffer.play();
|
||||||
this->board.smartSleep(1000);
|
this->board.smartSleep(1000);
|
||||||
|
}
|
||||||
|
|
||||||
// TEST
|
// Debug: odkomentuj, aby wymusić wygraną:
|
||||||
// currentPlayer.tryMovingPawn(0, 0);
|
// currentPlayer.tryMovingPawn(0, 0);
|
||||||
|
|
||||||
// if (!pickAPlace) {
|
// if (!pickAPlace) {
|
||||||
@@ -161,6 +191,7 @@ void Engine::nextTurn() {
|
|||||||
|
|
||||||
if (currentPlayer.hasWon()) {
|
if (currentPlayer.hasWon()) {
|
||||||
// Zostanie wykorzystane do zwiększenia liczby wygranych
|
// Zostanie wykorzystane do zwiększenia liczby wygranych
|
||||||
|
this->tadaBuffer.play();
|
||||||
this->winnerNickname = currentPlayer.getName();
|
this->winnerNickname = currentPlayer.getName();
|
||||||
announceWinner(currentPlayer);
|
announceWinner(currentPlayer);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -28,8 +28,10 @@ class Engine {
|
|||||||
// Audio
|
// Audio
|
||||||
bool dicerollLoaded = true;
|
bool dicerollLoaded = true;
|
||||||
bool pawnmoveLoaded = true;
|
bool pawnmoveLoaded = true;
|
||||||
|
bool tadaLoaded = true;
|
||||||
sf::Music dicerollBuffer;
|
sf::Music dicerollBuffer;
|
||||||
sf::Music pawnmoveBuffer;
|
sf::Music pawnmoveBuffer;
|
||||||
|
sf::Music tadaBuffer;
|
||||||
|
|
||||||
// Pomocnicze
|
// Pomocnicze
|
||||||
std::string winnerNickname = "";
|
std::string winnerNickname = "";
|
||||||
|
|||||||
@@ -181,6 +181,8 @@ Game::Game() {
|
|||||||
// Konstruktor klasy. Klasę Game tworzymy poprzez
|
// Konstruktor klasy. Klasę Game tworzymy poprzez
|
||||||
// ustawienie domyślnych wartości i stworzenie okna.
|
// ustawienie domyślnych wartości i stworzenie okna.
|
||||||
|
|
||||||
|
std::cout << "\033]0;" << "Chinczyk188" << "\007" << "\n";
|
||||||
|
|
||||||
this->initVariables();
|
this->initVariables();
|
||||||
this->board.initVariables();
|
this->board.initVariables();
|
||||||
this->board.initWindow();
|
this->board.initWindow();
|
||||||
@@ -292,7 +294,7 @@ void Game::run() {
|
|||||||
this->dumpLeaderboards(this->leaderboardLocation);
|
this->dumpLeaderboards(this->leaderboardLocation);
|
||||||
this->dumpLeaderboards("." + this->leaderboardLocation + ".old", false);
|
this->dumpLeaderboards("." + this->leaderboardLocation + ".old", false);
|
||||||
|
|
||||||
this->board.smartSleep(10000);
|
this->board.smartSleep(20000);
|
||||||
|
|
||||||
board.closeWindow();
|
board.closeWindow();
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ short Player::getColor() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
short Player::tryMovingPawn(short pawnID, short fields) {
|
short Player::tryMovingPawn(short pawnID, short fields) {
|
||||||
// this->pawnsFinished = 4; // do testowania, wymuszania zakończenia gry
|
// this->pawnsFinished = 4; // do debugowania, wymusza zakończenia gry
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
Chinczyk188/res/audio/jimhancock_tada.ogg
Normal file
BIN
Chinczyk188/res/audio/jimhancock_tada.ogg
Normal file
Binary file not shown.
Reference in New Issue
Block a user