App: re-add cmakelists directive, add cardgame example
This commit is contained in:
parent
61b9558c47
commit
a5f1298567
3
App/.gitignore
vendored
3
App/.gitignore
vendored
@ -1 +1,2 @@
|
||||
/build
|
||||
/build
|
||||
/Examples/*.exe
|
||||
@ -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)
|
||||
|
||||
108
App/Examples/Cardgame.cpp
Normal file
108
App/Examples/Cardgame.cpp
Normal file
@ -0,0 +1,108 @@
|
||||
// Taken from: https://www.youtube.com/watch?v=b8V-WIjlScA
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include <random>
|
||||
#include <ctime>
|
||||
|
||||
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<Card>(static_cast<Rank>(rank), static_cast<Suit>(suit)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void shuffledeck() {
|
||||
random_device rd;
|
||||
mt19937 g(rd());
|
||||
shuffle(cards_.begin(), cards_.end(), g);
|
||||
}
|
||||
|
||||
unique_ptr<Card> drawCard() {
|
||||
if (cards_.empty()) {
|
||||
return nullptr;
|
||||
}
|
||||
unique_ptr<Card> card = std::move(cards_.back());
|
||||
cards_.pop_back();
|
||||
return card;
|
||||
}
|
||||
|
||||
private:
|
||||
vector<unique_ptr<Card> > cards_;
|
||||
};
|
||||
|
||||
class Player {
|
||||
public:
|
||||
void addCard(unique_ptr<Card> 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<unique_ptr<Card> > 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;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user