전편에 이어서 카드게임을 만들어 볼거에요.

 

일단 적용할 블랙잭의 룰을 생각해봅시다.

 

  • 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);
	}
}

마지막으로 승리시 배팅시만큼의 금액을, 패배시 배팅 금액을 더하거나 빼줍니다.

 

전체 코드는 아래 압축파일에 있습니다.

 

CardGame.zip
0.00MB

'프로그래밍 > 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
Posted by 서융
: