Skip to content

Instantly share code, notes, and snippets.

@utgwkk
Last active August 29, 2015 14:28
Show Gist options
  • Save utgwkk/47d784bf0a55c536e8aa to your computer and use it in GitHub Desktop.
Save utgwkk/47d784bf0a55c536e8aa to your computer and use it in GitHub Desktop.
Blackjack-like game. Requires C++11. >g++ -std=gnu++11 -o blackjack ./blackjack.cpp
#include <cstdio>
#include <vector>
#include <algorithm>
#include <random>
#include <string>
#define FOR(i,m,n) for(int i=m;i<(int)(n);i++)
#define REP(i,n) FOR(i,0,n)
#define ALL(v) (v).begin(),(v).end()
using namespace std;
vector<int> range(int end){
vector<int> res;
REP(i,end)
res.push_back(i);
return res;
}
int getCardNum(int num){
return num % 13 + 1;
}
int getCard(vector<int>& from){
int card = from.front();
from.erase(from.begin());
return card;
}
int getPoint(int num){
int card = getCardNum(num);
if(card >= 10) return 10;
else return card;
}
int main(){
vector<int> cards = range(52); // without joker.
vector<int> playerHands, enemyHands;
int playerPoint, enemyPoint;
random_device rd;
mt19937 g(rd());
shuffle(ALL(cards), g);
REP(i,2){
playerHands.push_back(getCard(cards));
enemyHands.push_back(getCard(cards));
}
// player's turn.
printf("It's your turn.\n");
printf("One of enemy's hands is %d.\n",getCardNum(enemyHands.front()));
bool turnEnd = false;
while(!turnEnd){
char input;
playerPoint = 0;
printf("You have ");
REP(i,playerHands.size()){
printf("%d",getCardNum(playerHands[i]));
playerPoint += getPoint(playerHands[i]);
if(i < playerHands.size()-1) printf(",");
}
printf(".\nYour point is %d.\n",playerPoint);
if(playerPoint > 21){
printf("Burst!!\nYou lose!!\n");
playerPoint = 0;
return 0;
}
printf("Choose what you do.\nh: Hit. s: Stand.\n > ");
input = getchar();
switch(input){
case 'h':
printf("You hit.\n");
playerHands.push_back(getCard(cards));
break;
case 's':
printf("You stood.\n");
turnEnd = true;
break;
default:
break;
}
}
// enemy's turn.
printf("\nIt's enemy's turn.\n");
turnEnd = false;
while(!turnEnd){
enemyPoint = 0;
REP(i,enemyHands.size())
enemyPoint += getPoint(enemyHands[i]);
if(enemyPoint > 21){
printf("Burst!! His point is %d!!\nYou win!!\n",enemyPoint);
return 0;
}
if(enemyPoint <= playerPoint){
printf("He hit.\n");
enemyHands.push_back(getCard(cards));
continue;
}else{
printf("He stood.\n");
turnEnd = true;
}
}
printf("\nYour point is %d.\n", playerPoint);
printf("Enemy's point is %d.\n\n", enemyPoint);
if(playerPoint < enemyPoint)
printf("You lose!!\n");
else if(playerPoint > enemyPoint)
printf("You win!!\n");
else
printf("Draw!!\n");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment