기존의 월남뽕 게임에서 조금 변환한 느낌인데, 다른 점이라면 11, 12, 13 출력 시 J, Q, K로 나온다는 점이다.
숫자를 문자로 바꿔서 출력시켜야하는 부분에서 정말 많은 고민이 있었다...ㅠㅠ
#include<iostream>
#include<iomanip> //setw를 사용하기 위해 선언
#include<time.h>
using namespace std;
int main() {
srand(time(NULL));
int deck[52];
int money = 10000, betting, count = 0, input;
//카드 덱 만들기
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 13; j++)
{
deck[i * 13 + j] = j + 1;
}
}
restart: //재시작 시, 코드의 시작지점
//카드 섞어주기(셔플)
for (int i = 0; i < 1000; i++)
{
int num1 = rand() % 52;
int num2 = rand() % 52;
int temp = deck[num1];
deck[num1] = deck[num2];
deck[num2] = temp;
}
cout << "~~~~로우하이세븐 게임~~~~" << endl <<setw(3);
while (true)
{
//뽑은 6장의 카드 출력하기(본문)
for (int i = count; i < (count + 5); i++)
{
switch (deck[i]) //11,12,13일 때 문자, 아니면 숫자
{
case 11:
cout << "J" << setw(4);
break;
case 12:
cout << "Q" << setw(4);
break;
case 13:
cout << "K" << setw(4);
break;
default:
cout << deck[i] << setw(4);
break;
}
}
cout << "??" << endl; //히든카드 숨기기
cout << "내 소지금 : " << money << endl;
cout << "하이(1), 로우(2), 세븐(3)" << endl << "당신의 선택은? : ";
cin >> input;
cout << "배팅금을 입력하세요 : ";
cin >> betting;
//승패 결과처리
switch (input)
{
case 1: //하이 선택 시
if (deck[count + 5] > 7)
{
cout << "히든카드 : " << deck[count + 5] << endl;
cout << "이겼다." << endl << endl;
money += betting;
break;
}
else
{
cout << "히든카드 : " << deck[count + 5] << endl;
cout << "졌다." << endl << endl;
money -= betting;
break;
}
case 2: //로우 선택 시
if (deck[count + 5] < 7)
{
cout << "히든카드 : " << deck[count + 5] << endl;
cout << "이겼다." << endl << endl;
money += betting;
break;
}
else
{
cout << "히든카드 : " << deck[count + 5] << endl;
cout << "졌다." << endl << endl;
money -= betting;
break;
}
case 3: //세븐 선택 시
if (deck[count + 5] == 7)
{
cout << "히든카드 : " << deck[count + 5] << endl;
cout << "이겼다." << endl << endl;
money += betting;
break;
}
else
{
cout << "히든카드 : " << deck[count + 5] << endl;
cout << "졌다." << endl << endl;
money -= betting;
break;
}
default: //그외의 번호 입력 시
cout << "다시 입력하세요" << endl << endl;
continue;
}
count += 6; //반복할 때마다 6씩 증가
//종료조건 확인
if (count > 47 || money <= 0)
{
cout << "게임 끝" << endl << "1.다시시작" << endl << "2.그만하기" << endl << "입력 : ";
cin >> input;
if (input == 1) //다시시작 선택 시
{
count = 0;
money = 10000;
cout << endl;
goto restart;
}
else //그외 선택시
return 0;
}
}
}
2.0 ver Patch Note
배팅금액 예외처리 추가(최저 배팅금 설정 및 소지금 초과배팅 제거)
#include <string> 및 구조체 추가
트럼프카드 문양 추가
setw를 \t로 변환(#include <iomanip> 제거)
#include<iostream>
#include<string>
#include<time.h>
using namespace std;
struct Deck
{
string shape;
int number;
};
int main() {
srand(time(NULL));
Deck card[52];
string shape[4];
int money = 10000, betting, count = 0, input;
//문양저장
for (int i = 0; i < 4; i++)
{
switch (i)
{
case 0:
shape[i] = "♠";
break;
case 1:
shape[i] = "♥";
break;
case 2:
shape[i] = "♣";
break;
case 3:
shape[i] = "◆";
break;
}
}
//카드 덱 만들기
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 13; j++)
{
card[i * 13 + j].shape = shape[i];
card[i * 13 + j].number = j + 1;
}
}
restart: //재시작 시, 코드의 시작지점
//카드 섞어주기
for (int i = 0; i < 1000; i++)
{
int num1 = rand() % 52;
int num2 = rand() % 52;
//문양섞기
string temp1 = card[num1].shape;
card[num1].shape = card[num2].shape;
card[num2].shape = temp1;
//숫자섞기
int temp2 = card[num1].number;
card[num1].number = card[num2].number;
card[num2].number = temp2;
}
cout << "~~~~로우하이세븐 게임~~~~" << endl;
while (true)
{
//뽑은 6장의 카드 출력하기(본문)
for (int i = count; i < (count + 5); i++)
{
switch (card[i].number) //11,12,13,1일 때 문자, 아니면 숫자
{
case 11:
cout << "J" << card[i].shape << "\t";
break;
case 12:
cout << "Q" << card[i].shape << "\t";
break;
case 13:
cout << "K" << card[i].shape << "\t";
break;
case 1:
cout << "A" << card[i].shape << "\t";
break;
default:
cout << card[i].number << card[i].shape << "\t";
break;
}
}
cout << "??" << endl; //히든카드 숨기기
cout << "내 소지금 : " << money << endl;
cout << "하이(1), 로우(2), 세븐(3)" << endl << "당신의 선택은? : ";
cin >> input;
cout << "배팅금을 입력하세요 : ";
cin >> betting;
//배팅금 입력 예외처리
if (betting < 1000) {
cout << "1000원 이상 배팅해주세요." << endl << endl;
continue;
}
else if (betting > money) {
cout << "소지금에 맞게 배팅해주세요." << endl << endl;
continue;
}
//승패 결과처리
switch (input)
{
case 1: //하이 선택 시
if (card[count + 5].number > 7)
{
cout << "히든카드 : " << card[count + 5].number << card[count + 5].shape << endl;
cout << "이겼다." << endl << endl;
money += betting;
break;
}
else
{
cout << "히든카드 : " << card[count + 5].number << card[count + 5].shape << endl;
cout << "졌다." << endl << endl;
money -= betting;
break;
}
case 2: //로우 선택 시
if (card[count + 5].number < 7)
{
cout << "히든카드 : " << card[count + 5].number << card[count + 5].shape << endl;
cout << "이겼다." << endl << endl;
money += betting;
break;
}
else
{
cout << "히든카드 : " << card[count + 5].number << card[count + 5].shape << endl;
cout << "졌다." << endl << endl;
money -= betting;
break;
}
case 3: //세븐 선택 시
if (card[count + 5].number == 7)
{
cout << "히든카드 : " << card[count + 5].number << card[count + 5].shape << endl;
cout << "이겼다." << endl << endl;
money += betting;
break;
}
else
{
cout << "히든카드 : " << card[count + 5].number << card[count + 5].shape << endl;
cout << "졌다." << endl << endl;
money -= betting;
break;
}
default: //그외의 번호 입력 시
cout << "다시 입력하세요" << endl << endl;
continue;
}
count += 6; //반복할 때마다 6씩 증가
//종료조건 확인
if (count > 47 || money <= 0)
{
cout << "게임 끝" << endl << "1.다시시작" << endl << "2.그만하기" << endl << "입력 : ";
cin >> input;
if (input == 1) //다시시작 선택 시
{
count = 0;
money = 10000;
cout << endl;
goto restart;
}
else //그외 선택시
return 0;
}
}
}
3.0 ver Patch Note
히든카드 문양출력이 안되던 부분 수정
반복해서 사용되는 코드 함수로 만들어 코드 간편화
enum을 사용하여 코드 가독성 향상
#include<iostream>
#include<string>
#include<time.h>
using namespace std;
struct Deck
{
string shape;
int number;
};
enum NUM
{
A = 1,
J = 11,
Q,
K
};
enum SHAPE
{
SPADE,
HEART,
CLOVER,
DIA
};
Deck card[52];
void Shuffle()
{
for (int i = 0; i < 1000; i++)
{
int num1 = rand() % 52;
int num2 = rand() % 52;
Deck temp = card[num1];
card[num1] = card[num2];
card[num2] = temp;
}
}
void Print(int cardIndex)
{
switch (card[cardIndex].number) //11,12,13,1일 때 문자, 아니면 숫자
{
case J:
cout << "J" << card[cardIndex].shape << "\t";
break;
case Q:
cout << "Q" << card[cardIndex].shape << "\t";
break;
case K:
cout << "K" << card[cardIndex].shape << "\t";
break;
case A:
cout << "A" << card[cardIndex].shape << "\t";
break;
default:
cout << card[cardIndex].number << card[cardIndex].shape << "\t";
break;
}
}
int main() {
srand(time(NULL));
int money = 10000, betting, count = 0, input;
//덱 초기화
for (int i = 0; i < 52; i++)
{
card[i].number = i % 13 + 1;
switch (i / 13)
{
case SPADE:
card[i].shape = "♠";
break;
case HEART:
card[i].shape = "♥";
break;
case CLOVER:
card[i].shape = "♣";
break;
case DIA:
card[i].shape = "◆";
break;
}
}
restart: //재시작 시, 코드의 시작지점
//카드 섞어주기
Shuffle();
cout << "~~~~로우하이세븐 게임~~~~" << endl;
while (true)
{
//뽑은 6장의 카드 출력하기(본문)
for (int i = 0; i < 5; i++)
{
Print(i + count);
}
cout << "??" << endl; //히든카드 숨기기
cout << "내 소지금 : " << money << endl;
cout << "하이(1), 로우(2), 세븐(3)" << endl << "당신의 선택은? : ";
cin >> input;
cout << "배팅금을 입력하세요 : ";
cin >> betting;
//배팅금 입력 예외처리
if (betting < 1000 || betting > money) {
cout << "다시 입력해주세요." << endl << endl;
continue;
}
cout << "히든카드 : ";
Print(5 + count);
//승패 결과처리
switch (input)
{
case 1: //하이 선택 시
if (card[count + 5].number > 7)
{
cout << "이겼다." << endl << endl;
money += betting;
break;
}
else
{
cout << "졌다." << endl << endl;
money -= betting;
break;
}
case 2: //로우 선택 시
if (card[count + 5].number < 7)
{
cout << "이겼다." << endl << endl;
money += betting;
break;
}
else
{
cout << "졌다." << endl << endl;
money -= betting;
break;
}
case 3: //세븐 선택 시
if (card[count + 5].number == 7)
{
cout << "이겼다." << endl << endl;
money += betting;
break;
}
else
{
cout << "졌다." << endl << endl;
money -= betting;
break;
}
default: //그외의 번호 입력 시
cout << "다시 입력하세요" << endl << endl;
continue;
}
count += 6; //반복할 때마다 6씩 증가
//종료조건 확인
if (count > 47 || money <= 0)
{
cout << "게임 끝" << endl << "1.다시시작" << endl << "2.그만하기" << endl << "입력 : ";
cin >> input;
if (input == 1) //다시시작 선택 시
{
count = 0;
money = 10000;
cout << endl;
goto restart;
}
else //그외 선택시
return 0;
}
}
}
'코딩' 카테고리의 다른 글
빙고 게임 (0) | 2022.10.25 |
---|---|
슬라이드 게임 (0) | 2022.10.24 |
월남뽕 게임 (2) | 2022.10.18 |
별찍기 / 숫자야구게임 (0) | 2022.10.18 |
로또번호 자동 생성기 (2) | 2022.10.15 |