![article thumbnail image](https://blog.kakaocdn.net/dn/dlN9y2/btqEimEvIN0/e8Posv4dTyUveIwX5qfXgk/img.png)
반응형
- 트럼프 카드 모양(♠/◆/♥/♣)을 가진 52개의 카드를 생성하고, 무작위로 섞는다. 카드 모양은 열거형, 각 카드는 구조체를 이용하였다.
- 섞은 카드 배열에서 카드 두 개(♣a, ♣b)를 차례로 꺼낸다. 이를 확인하고 플레이어는 배팅한다. 이때, 소지금을 넘는 금액을 입력하거나, 최소 배팅 금액(천 원) 미만을 입력했을 경우 정상적인 값이 들어올 때까지 재시도를 요구한다.
- 다음번에 나온 카드의 숫자가 두 카드의 숫자(a~b) 사이라면 배팅금을 두 배로 돌려받고, 그렇지 않을 경우에는 돌려받지 못한다.
- 이를 소지금이 없어지거나, 카드(52개)가 모두 소진될 때까지 반복한다.
※ 공부 중에 만들어 본 코드입니다. 코드가 매끄럽지 않으며, 검색하지 않고 최대한 알고 있는 내용으로만 구현했으니 참고용으로만 봐 주세요!
#include <iostream>
#include <time.h>
#include <Windows.h>
using namespace std;
enum SHAPE
{
SPADE,
DIAMOND,
HEART,
CLOVER
};
struct tagCard
{
int shape;
int number;
};
void printCard(tagCard card)
{
cout << "|";
switch (card.shape)
{
case 0:
cout << "♠";
break;
case 1:
cout << "◆";
break;
case 2:
cout << "♥";
break;
case 3:
cout << "♣";
}
cout << " |\n| |\n| ";
switch (card.number)
{
case 1:
cout << " A";
break;
case 11:
cout << " J";
break;
case 12:
cout << " Q";
break;
case 13:
cout << " K";
break;
default:
if (card.number != 10)
cout << " ";
cout << card.number;
}
cout << "|" << endl << endl;
}
int main()
{
srand(time(NULL));
int playerMoney = 100000;
tagCard cards[52];
{
int count = 0;
for (int i = 0; i < 52; i++)
{
if (i != 0 && i % 13 == 0)
count++;
switch (count)
{
case 0:
cards[i].shape = SPADE;
break;
case 1:
cards[i].shape = DIAMOND;
break;
case 2:
cards[i].shape = HEART;
break;
case 3:
cards[i].shape = CLOVER;
}
cards[i].number = i % 13 + 1;
}
}
int destIdx, sourIdx;
tagCard temp;
for (int i = 0; i < 100; i++)
{
destIdx = rand() % 52;
sourIdx = rand() % 52;
temp = cards[destIdx];
cards[destIdx] = cards[sourIdx];
cards[sourIdx] = temp;
}
int idx = 0;
while (true)
{
system("cls");
int dealMoney = 0;
cout << "\n\t\t\t소지금: " << playerMoney << endl;
int openCards[2];
int destIdx = idx + 2;
int i = 0;
for (idx; idx < destIdx; idx++)
{
openCards[i++] = cards[idx].number;
printCard(cards[idx]);
}
// 0: 작은 수, 1: 큰 수로 정렬해서 쉽게 비교할 수 있게끔
if (openCards[0] > openCards[1])
{
int temp;
temp = openCards[0];
openCards[0] = openCards[1];
openCards[1] = temp;
}
while (true)
{
cout << "\n배팅해 주세요. (최소 금액: 1,000) > ";
cin >> dealMoney;
if (dealMoney < 1000)
{
cout << "잘못 입력하셨습니다. " << endl;
continue;
}
else if (dealMoney > playerMoney)
{
cout << "소지금보다 많은 금액을 배팅할 수 없습니다. " << endl;
continue;
}
break;
}
cout << endl;
cout << "카드를 오픈합니다." << endl;
tagCard newOpenCard{ cards[idx].shape, cards[idx++].number };
printCard(newOpenCard);
if (newOpenCard.number > openCards[0] && newOpenCard.number < openCards[1])
{
cout << dealMoney * 2 << "를 획득하셨습니다! 축하합니다!" << endl;
playerMoney += dealMoney;
}
else
{
//cout << newOpenCard.number << " " << openCards[0] << " " << openCards[1];
cout << "배팅하신 " << dealMoney << "을 잃으셨습니다." << endl;
playerMoney -= dealMoney;
}
if (playerMoney <= 0)
{
playerMoney = 0;
break;
}
Sleep(3000);
if (idx >= 50)
{
cout << "카드를 전부 사용하였습니다." << endl;
break;
}
}
cout << "\n >> 게임 종료!! 당신의 소지금: " << playerMoney << " <<" << endl;
return 0;
}
반응형