From a5f12985671fefbd1ca1b0c94f8795826d49fd36 Mon Sep 17 00:00:00 2001 From: Eero Holmala Date: Sun, 30 Apr 2023 17:33:24 +0300 Subject: [PATCH] App: re-add cmakelists directive, add cardgame example --- App/.gitignore | 3 +- App/App/CMakeLists.txt | 1 + App/Examples/Cardgame.cpp | 108 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 App/Examples/Cardgame.cpp diff --git a/App/.gitignore b/App/.gitignore index 42afabf..e8dc96c 100644 --- a/App/.gitignore +++ b/App/.gitignore @@ -1 +1,2 @@ -/build \ No newline at end of file +/build +/Examples/*.exe \ No newline at end of file diff --git a/App/App/CMakeLists.txt b/App/App/CMakeLists.txt index 22c6610..ef03082 100644 --- a/App/App/CMakeLists.txt +++ b/App/App/CMakeLists.txt @@ -22,6 +22,7 @@ target_link_libraries(App PRIVATE GLEW::GLEW ) +target_include_directories(App PUBLIC "${CMAKE_SOURCE_DIR}/App/include/") target_include_directories(App PUBLIC "${CMAKE_SOURCE_DIR}/AppLib/include/AppLib") if (CMAKE_VERSION VERSION_GREATER 3.12) diff --git a/App/Examples/Cardgame.cpp b/App/Examples/Cardgame.cpp new file mode 100644 index 0000000..2cfd8c3 --- /dev/null +++ b/App/Examples/Cardgame.cpp @@ -0,0 +1,108 @@ +// Taken from: https://www.youtube.com/watch?v=b8V-WIjlScA + +#include +#include +#include +#include +#include + +using namespace std; + +enum Rank { + ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING +}; + +enum Suit { + HEARTS, DIAMONDS, CLUBS, SPADES +}; + +class Card { +public: + Card(Rank rank, Suit suit) : rank_(rank), suit_(suit) {} + + Rank getRank() const { return rank_; } + Suit getSuit() const { return suit_; } + +private: + Rank rank_; + Suit suit_; +}; + +class Deck { +public: + Deck() { + for (int suit = HEARTS; suit <= SPADES; ++suit) { + for (int rank = ACE; rank <= KING; ++rank) { + cards_.push_back(make_unique(static_cast(rank), static_cast(suit))); + } + } + } + + void shuffledeck() { + random_device rd; + mt19937 g(rd()); + shuffle(cards_.begin(), cards_.end(), g); + } + + unique_ptr drawCard() { + if (cards_.empty()) { + return nullptr; + } + unique_ptr card = std::move(cards_.back()); + cards_.pop_back(); + return card; + } + +private: + vector > cards_; +}; + +class Player { +public: + void addCard(unique_ptr card) { + hand_.push_back(std::move(card)); + } + + int getHandValue() const { + int value = 0; + int aces = 0; + for (const auto& card : hand_) { + int cardValue = card->getRank(); + if (cardValue >= 10) { + cardValue = 10; + } else if (cardValue == ACE) { + aces++; + cardValue = 11; + } + value += cardValue; + } + + while (value > 21 && aces > 0) { + value -= 10; + aces--; + } + return value; + } + +private: + vector > hand_; +}; + +int main() { + Deck deck; + deck.shuffledeck(); + + Player player; + Player dealer; + + player.addCard(deck.drawCard()); + player.addCard(deck.drawCard()); + + dealer.addCard(deck.drawCard()); + dealer.addCard(deck.drawCard()); + + cout << "Player hand value: " << player.getHandValue() << endl; + cout << "Dealer hand value: " << dealer.getHandValue() << endl; + + return 0; +} \ No newline at end of file