From 6d4f3834edd7d22e3a001749455656b86ead53b0 Mon Sep 17 00:00:00 2001 From: MrEidam Date: Fri, 13 Mar 2026 13:21:31 +0100 Subject: [PATCH] Innitial - V1 --- .gitignore | 2 + main.cpp | 209 +++++++++++++++++++++++++++++++++++++++++++++++++++++ run.sh | 2 + 3 files changed, 213 insertions(+) create mode 100644 .gitignore create mode 100644 main.cpp create mode 100755 run.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3d16727 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +bin +*~ \ No newline at end of file diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..1453c43 --- /dev/null +++ b/main.cpp @@ -0,0 +1,209 @@ +#include +#include +#include +#include +#include +#include +#include + +int ran(int num0, int num1) { + std::random_device dev; + std::mt19937 rng(dev()); + std::uniform_int_distribution dist(num0, num1); + return dist(rng); +} +int addScore(std::vector&deck); + +std::vector playerCards = {}; +std::vector dealerCards = {}; + +int playerscore = addScore(playerCards); +int dealerScore = addScore(dealerCards); + +// Club +// Dimon +// <3 +// Shovels + +std::vector> fullDeck = { + { + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'X', + 'A', + 'J', + 'K', + 'Q', + }, + { + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'X', + 'A', + 'J', + 'K', + 'Q', + }, + { + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'X', + 'A', + 'J', + 'K', + 'Q', + }, + { + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'X', + 'A', + 'J', + 'K', + 'Q', + }, +}; +std::vector> emptyDeck = {{},{},{},{}}; +std::vector> currentDeck = fullDeck; + +int cardsleft(std::vector>& deck){ + return deck[0].size()+deck[1].size()+deck[2].size()+deck[3].size(); +} + +// usage: playerscore = addScore(playerCards); +int addScore(std::vector& deck) { + int out = 0; + bool ac = false; + for (int i = 0; i < deck.size(); i++) { + if (deck[i] == 'A') { + ac = true; + out++; + }else if(deck[i] == 'X' || deck[i] == 'J' || deck[i] == 'Q' || deck[i] == 'K'){ + out += 10; + }else{ + out += deck[i] - '0'; + } + } + return (ac && (out <= 11)) ? out + 10 : out; +} + +void addCard(std::vector& deck) { + int cate = ran(0, 3); + if (currentDeck[cate].empty()) { + addCard(deck); + return; + } + + int ca = ran(0, currentDeck[cate].size() - 1); + deck.push_back(currentDeck[cate][ca]); + currentDeck[cate].erase(currentDeck[cate].begin() + ca); +} +// usage: cardsAvail(deck, score): num +void cardsAvail(std::vector& deck, int& score) { + if (currentDeck == emptyDeck) { + // Reshuffle + currentDeck = fullDeck; + } + + addCard(deck); + score = addScore(deck); +} + +void dealerLogic() { + if (playerscore > 21) { + cardsAvail(dealerCards, dealerScore); + return; + } + while(dealerScore < 17){ + cardsAvail(dealerCards, dealerScore); + } +} + +void status() { + std::system("clear"); + std::cout << "Welcome to Blackjack!\n\nTo exit type: " + "[0] [q] [quit] [exit]"; + std::cout << "\n----------------\n"; + std::cout << " Decksize: " << cardsleft(currentDeck); + std::cout << "\n----------------"; + //std::cout << "\nSize P: " << playerCards.size(); + std::cout << "\nPlayer: " << addScore(playerCards); + //std::cout << "\nSize D: " << dealerCards.size(); + std::cout << "\nDealer: " << addScore(dealerCards) + << ((dealerCards.size() == 1) ? " + ?\n" : "\n"); + +} + + + +int main() { + using namespace std::this_thread; + using namespace std::chrono_literals; + using std::chrono::system_clock; + + cardsAvail(dealerCards, dealerScore); + cardsAvail(playerCards, playerscore); + cardsAvail(playerCards, playerscore); + std::string inp; + + status(); + while (inp != "q" && inp != "0" && inp != "quit" && inp != "exit") { + if (playerscore == 21 && dealerCards.size() == 1) { + inp = "q"; + status(); + std::cout << "!!!BLACKJACK!!!\n"; + } else { + std::cout << "[1]Hit or [2]Stand?\n"; + std::getline(std::cin, inp); + } + if (inp == "hit" || inp == "1") { + cardsAvail(playerCards, playerscore); + if (playerscore > 21) { + dealerLogic(); + inp = "q"; + std::cout << "los\n"; + } + status(); + } else if (inp == "stand" || inp == "2"){ + dealerLogic(); + status(); + if (playerscore <= 21 && playerscore > dealerScore) { + std::cout << "win\n"; + } else if (dealerScore <= 21 && playerscore < dealerScore) { + std::cout << "lose\n"; + } else if (dealerScore <= 21 && dealerScore == playerscore) { + std::cout << "push\n"; + } + inp = "q"; + }else if(inp != "q"){ + status(); + } + // sleep_for(5s); + //std::getline(std::cin, inp); + } + //std::cout << std::endl; +} diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..e399d35 --- /dev/null +++ b/run.sh @@ -0,0 +1,2 @@ +mkdir bin/ -p +g++ main.cpp -obin/main && clear && ./bin/main