Last active
August 29, 2015 14:28
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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