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";
|
||||
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) {
|
||||
@@ -58,89 +63,111 @@ void Engine::nextTurn() {
|
||||
bool pickAPlace = false;
|
||||
// Wylosowanie szóstki to specjalny przypadek
|
||||
if (diceRoll == 6) {
|
||||
if (currentPlayer.pawnsActive == 0) {
|
||||
// Musi wyjść pionkiem
|
||||
std::cout << currentPlayer.getName() << " wychodzi pierwszym pionkiem z bazy.\n";
|
||||
currentPlayer.pawnsAtBase--;
|
||||
currentPlayer.pawnsActive++;
|
||||
this->pawnmoveBuffer.play();
|
||||
this->board.smartSleep(2000);
|
||||
} else if (currentPlayer.pawnsActive > 0 && currentPlayer.pawnsActive < 4) {
|
||||
|
||||
// Może wyjść z bazy albo ruszyć pionek
|
||||
std::string choice;
|
||||
std::string choice;
|
||||
switch (currentPlayer.pawnsActive) {
|
||||
|
||||
std::cout << "Co chcesz zrobic?\n";
|
||||
std::cout << "a) Wyjsc pionkiem z bazy\n"
|
||||
<< "b) Wykonac ruch wyciagnietym wczesniej pionkiem\n"
|
||||
<< "> ";
|
||||
// 0 pionków na planszy - musi wyjść pionkiem
|
||||
case 0:
|
||||
std::cout << currentPlayer.getName() << " wychodzi pierwszym pionkiem z bazy.\n";
|
||||
currentPlayer.pawnsAtBase--;
|
||||
currentPlayer.pawnsActive++;
|
||||
this->pawnmoveBuffer.play();
|
||||
this->board.smartSleep(2000);
|
||||
break;
|
||||
|
||||
while (true) {
|
||||
// 1, 2, 3 pionki na planszy - może wyjść z bazy albo ruszyć pionek
|
||||
case 1: case 2: case 3:
|
||||
|
||||
// Czyścimy bufor, aby zignorować cokolwiek, co pojawiło się po znaku
|
||||
// białym a przed \n - aby np. żaden z użytkowników nie mógł
|
||||
// napisać "a a" i potencjalnie zadecydować o ruchu oponenta.
|
||||
// std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
||||
std::cout << "Co chcesz zrobic?\n";
|
||||
std::cout << "a) Wyjsc pionkiem z bazy\n"
|
||||
<< "b) Wykonac ruch wyciagnietym wczesniej pionkiem\n"
|
||||
<< "> ";
|
||||
|
||||
// std::cin >> choice;
|
||||
// std::cin.sync();
|
||||
choice = this->board.asyncStrGetline();
|
||||
choice[0] |= 32;
|
||||
while (true) {
|
||||
|
||||
if (choice[0] == 'a') {
|
||||
// getline() nie pozostawia nic w buforze wejściowym, dlatego nie musimy
|
||||
// aż tak na niego uważać, jak w przypadku cin'a.
|
||||
|
||||
pickAPlace = false;
|
||||
std::cout << currentPlayer.getName() << " wychodzi "
|
||||
<< currentPlayer.pawnsActive + 1 << ". pionkiem z bazy.\n";
|
||||
currentPlayer.pawnsAtBase--;
|
||||
currentPlayer.pawnsActive++;
|
||||
this->pawnmoveBuffer.play();
|
||||
this->board.smartSleep(2000);
|
||||
break;
|
||||
choice = this->board.asyncStrGetline();
|
||||
choice[0] |= 32;
|
||||
|
||||
} else if (choice[0] == 'b') {
|
||||
if (choice[0] == 'a') {
|
||||
|
||||
if (currentPlayer.pawnsActive > 1) {
|
||||
pickAPlace = true;
|
||||
} else {
|
||||
std::cout << currentPlayer.getName() << " rusza jedyny pionek "
|
||||
<< diceRoll << " pol do przodu.\n";
|
||||
this->pawnmoveBuffer.play();
|
||||
pickAPlace = false;
|
||||
std::cout << currentPlayer.getName() << " wychodzi "
|
||||
<< currentPlayer.pawnsActive + 1 << ". pionkiem z bazy.\n";
|
||||
currentPlayer.pawnsAtBase--;
|
||||
currentPlayer.pawnsActive++;
|
||||
this->pawnmoveBuffer.play();
|
||||
this->board.smartSleep(2000);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
} else std::cout << "Podaj jedna z wymienionych odpowiedzi!\n> ";
|
||||
}
|
||||
} else if (choice[0] == 'b') {
|
||||
|
||||
if (currentPlayer.pawnsActive > 1) {
|
||||
pickAPlace = true;
|
||||
} else {
|
||||
std::cout << currentPlayer.getName() << " rusza jedyny pionek "
|
||||
<< diceRoll << " pol do przodu.\n";
|
||||
this->pawnmoveBuffer.play();
|
||||
this->board.smartSleep(2000);
|
||||
}
|
||||
break;
|
||||
|
||||
} else std::cout << "Podaj jedna z wymienionych odpowiedzi!\n> ";
|
||||
}
|
||||
break;
|
||||
|
||||
// 4 pionki na planszy - musi ruszyć pionek, o ile może
|
||||
case 4:
|
||||
// TODO
|
||||
pickAPlace = true;
|
||||
this->pawnmoveBuffer.play();
|
||||
break;
|
||||
|
||||
} else if (currentPlayer.pawnsActive == 4) {
|
||||
// Musi ruszyć pionek, o ile może
|
||||
// TODO
|
||||
pickAPlace = true;
|
||||
this->pawnmoveBuffer.play();
|
||||
}
|
||||
|
||||
} else {
|
||||
// Musi ruszyć któryś z pionków
|
||||
pickAPlace = true;
|
||||
if (currentPlayer.pawnsActive == 1) {
|
||||
// Jedyny pionek możemy ruszyć za niego
|
||||
pickAPlace = false;
|
||||
std::cout << currentPlayer.getName() << " rusza jedyny pionek "
|
||||
<< diceRoll << " pol do przodu.\n";
|
||||
this->pawnmoveBuffer.play();
|
||||
this->board.smartSleep(2000);
|
||||
// Jeśli nie wypadło 6, gracz musi ruszyć któryś z pionków
|
||||
switch (currentPlayer.pawnsActive) {
|
||||
|
||||
// 0 pionków na planszy
|
||||
case 0:
|
||||
// Gracz nie może ruszyć pionków, których nie ma.
|
||||
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 "
|
||||
<< diceRoll << " pol do przodu.\n";
|
||||
this->pawnmoveBuffer.play();
|
||||
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";
|
||||
}
|
||||
|
||||
// Użytkownik wybiera pionek na planszy, którym chce się ruszyć
|
||||
short pickStatus = 0;
|
||||
short selectedField = -1;
|
||||
if (currentPlayer.pawnsActive == 0 || !pickAPlace) pickStatus = 8; // pomiń pętlę
|
||||
if (!pickAPlace) pickStatus = 8; // pomiń pętlę
|
||||
while (pickStatus != 8) {
|
||||
|
||||
this->board.selectAField(pickStatus, selectedField);
|
||||
@@ -149,10 +176,13 @@ void Engine::nextTurn() {
|
||||
|
||||
std::cout << "(Engine.cpp) selected: " << selectedField << "\n";
|
||||
|
||||
this->pawnmoveBuffer.play();
|
||||
this->board.smartSleep(1000);
|
||||
// Jeżeli gracz się ruszył, odtwórz dźwięk ruchu
|
||||
if (selectedField != -1) {
|
||||
this->pawnmoveBuffer.play();
|
||||
this->board.smartSleep(1000);
|
||||
}
|
||||
|
||||
// TEST
|
||||
// Debug: odkomentuj, aby wymusić wygraną:
|
||||
// currentPlayer.tryMovingPawn(0, 0);
|
||||
|
||||
// if (!pickAPlace) {
|
||||
@@ -161,6 +191,7 @@ void Engine::nextTurn() {
|
||||
|
||||
if (currentPlayer.hasWon()) {
|
||||
// Zostanie wykorzystane do zwiększenia liczby wygranych
|
||||
this->tadaBuffer.play();
|
||||
this->winnerNickname = currentPlayer.getName();
|
||||
announceWinner(currentPlayer);
|
||||
} else {
|
||||
|
||||
@@ -28,8 +28,10 @@ class Engine {
|
||||
// Audio
|
||||
bool dicerollLoaded = true;
|
||||
bool pawnmoveLoaded = true;
|
||||
bool tadaLoaded = true;
|
||||
sf::Music dicerollBuffer;
|
||||
sf::Music pawnmoveBuffer;
|
||||
sf::Music tadaBuffer;
|
||||
|
||||
// Pomocnicze
|
||||
std::string winnerNickname = "";
|
||||
|
||||
@@ -181,6 +181,8 @@ Game::Game() {
|
||||
// Konstruktor klasy. Klasę Game tworzymy poprzez
|
||||
// ustawienie domyślnych wartości i stworzenie okna.
|
||||
|
||||
std::cout << "\033]0;" << "Chinczyk188" << "\007" << "\n";
|
||||
|
||||
this->initVariables();
|
||||
this->board.initVariables();
|
||||
this->board.initWindow();
|
||||
@@ -292,7 +294,7 @@ void Game::run() {
|
||||
this->dumpLeaderboards(this->leaderboardLocation);
|
||||
this->dumpLeaderboards("." + this->leaderboardLocation + ".old", false);
|
||||
|
||||
this->board.smartSleep(10000);
|
||||
this->board.smartSleep(20000);
|
||||
|
||||
board.closeWindow();
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ short Player::getColor() const {
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
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