Innitial - V1
This commit is contained in:
209
main.cpp
Normal file
209
main.cpp
Normal file
@@ -0,0 +1,209 @@
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <random>
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
int ran(int num0, int num1) {
|
||||
std::random_device dev;
|
||||
std::mt19937 rng(dev());
|
||||
std::uniform_int_distribution<std::mt19937::result_type> dist(num0, num1);
|
||||
return dist(rng);
|
||||
}
|
||||
int addScore(std::vector<char>&deck);
|
||||
|
||||
std::vector<char> playerCards = {};
|
||||
std::vector<char> dealerCards = {};
|
||||
|
||||
int playerscore = addScore(playerCards);
|
||||
int dealerScore = addScore(dealerCards);
|
||||
|
||||
// Club
|
||||
// Dimon
|
||||
// <3
|
||||
// Shovels
|
||||
|
||||
std::vector<std::vector<char>> 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<std::vector<char>> emptyDeck = {{},{},{},{}};
|
||||
std::vector<std::vector<char>> currentDeck = fullDeck;
|
||||
|
||||
int cardsleft(std::vector<std::vector<char>>& deck){
|
||||
return deck[0].size()+deck[1].size()+deck[2].size()+deck[3].size();
|
||||
}
|
||||
|
||||
// usage: playerscore = addScore(playerCards);
|
||||
int addScore(std::vector<char>& 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<char>& 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<char>& 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;
|
||||
}
|
||||
Reference in New Issue
Block a user