C,C++ 응용 - 콘솔 카드게임 만들기(후편)
프로그래밍/C, C++ 2020. 12. 7. 00:53 |전편에 이어서 카드게임을 만들어 볼거에요.
일단 적용할 블랙잭의 룰을 생각해봅시다.
- 21 이상이면 버스트
- J, Q, K 카드는 10
- A 카드는 1
- 합이 더 크면 승
전 위와 같은 룰로 제작을 해 볼거에요.
//코인 부족 체크
if (coin < 10)
{
if (AskRegame())
{
reGame = true;
return false;
}
return false;
}
먼저 낙장불입을 막아줄게요.
//카드 부족 체크
if (Remain <= 0)
{
if (AskRegame())
reGame = true;
return false;
}
게임할 때 카드가 부족하면 안되겠죠?
printf("Your Bet Coin : ");
scanf_s("%d", &m_betCoin);
if (m_betCoin < 0)
m_betCoin = 0;
이제 베팅 부분인데, 아래에 if문은 만약 마이너스 값을 입력하는 바보같은 경우를 미리 차단해둔 거에요.
m_die = true;
coin -= (m_betCoin + 1);
혹시 다이를 선택하는 경우도 있으니 미리 체크해둡니다.
bool Cardcompare(int temp[5])
{
}
카드를 비교할 함수를 만들어줍니다.
이제 남은건 카드의 비교겠져?
int m_temp[5];
for (int i = 0; i < 5; i++)
{
m_temp[i] = temp[i] % 13 + 1;
if (m_temp[i] == 1)
m_temp[i] = 10;
if (m_temp[i] == 13)
m_temp[i] = 10;
if (m_temp[i] == 12)
m_temp[i] = 10;
}
카드가 총 52장으로 모양별로 13장씩 4모양이니까 13으로 나머지계산을 한 후 +1을 해줍니다.
13(K)을 13으로 나눌 경우 0이 되니까 그 부분과 Q, J 카드도 10으로 처리해줍니다.
for (int i = 0; i < 3; i++)
{
if (temp[i] == -1)
{
}
else
{
m_psum += m_temp[i];
}
}
카드를 뽑을때 -1로 초기화해둔 temp 의 배열을 바꿔주었기 때문에 뽑지 않았을 경우 건너뛰도록 해줍니다.
for (int i = 3; i < 5; i++)
{
m_dsum += m_temp[i];
}
딜러는 간단하게 두장만 합쳐줍니다.
//버스트 체크
bool m_pbust = false, m_dbust = false;
if (m_psum > 21)
m_pbust = true;
if (m_dsum > 21)
m_dbust = true;
if (m_dsum < 15)
m_dbust = true;
if (m_dbust)
return true;
if (m_pbust)
return false;
카드 숫자 합이 21을 넘어가게 되었을 때, 혹은 딜러가 15보다 낮을때 버스트인지 체크해줍니다.
//합 숫자 비교
bool win = false;
if (m_psum >= m_dsum)
win = true;
else
win = false;
return win;
이제 양쪽이 버스트가 아닐때 승리처리를 해 준 후 리턴을 해줍니다.
//카드 비교하기
if (!m_die)
{
if (Cardcompare(temp))
{
coin += (m_betCoin + 1);
}
else
{
coin -= (m_betCoin + 1);
}
}
마지막으로 승리시 배팅시만큼의 금액을, 패배시 배팅 금액을 더하거나 빼줍니다.
전체 코드는 아래 압축파일에 있습니다.
'프로그래밍 > C, C++ ' 카테고리의 다른 글
C,C++ 응용 - 콘솔 카드게임 만들기(전편) (0) | 2020.12.02 |
---|---|
C, C++ 기초 - 생성자, 소멸자 (0) | 2020.05.06 |
C,C++ 기초 - 클래스 (0) | 2020.05.06 |
C, C++ 기초 - 포인터 (0) | 2020.04.20 |
C, C++ 기초 - 함수 (0) | 2019.08.25 |