programming/C \ C++

[ series ] C언어로 만든 BlackJack 카드 게임 [ 1 / 2 ]

slothCat 2019. 11. 19. 15:16
728x90

IDE : Visual Studio 2019

 

<조건>

1. 플레이어는 2장의 카드를 받은후 시작

2. Hit or Stay 선택

3. Hit을  하면 플레이어는 한장더 받음

4. Stay 를 하면 플레이어 종료

5. 딜러 턴 시작

6. 딜러는 두장을 받은후 플레이어보다 값이 적을시 한장더 받음

7. 플레이어 와 딜러 모두 21이 넘으면 game over

8. 값이 21이 되면 블랙잭

 추가적인 조건 블랙잭과 동일

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void init(int* Card);
void cardSet(int* DealerC, int* PlayerC, int* Card);
int gameStart(int* DealerC, int* PlayerC);
int cardPrt(int* Card, int* i, int* Aa);
void GameFinish(int gameSet);


void main()
{
	int Card[52];
	int DealerC[10], PlayerC[10];
	int gameSet = 0, i = 0;

	while (1)
	{
		init(Card);
		cardSet(DealerC, PlayerC, Card);
		gameSet = gameStart(DealerC, PlayerC);
		GameFinish(gameSet);

		printf("\n\nOne More 1 / Game Exit 2  :: ");
		scanf("%d", &i);

		if (i == 2)
		{
			printf("Thanks.\n");
			break;
		}
		else if (i != 1) {
			printf("reTry.\n");
			printf("\n\nOne More 1 / Game Exit 2  :: ");
			scanf("%d", &i);
		}

		system("cls");

	}

}

void init(int* Card)
{
	// 카드 랜덤 셋팅
	int w = 0, r = 0;
	int swit[52];

	for (int i = 0; i < 52; i++) {
		swit[i] = 0;
	}

	srand(time(NULL));
	while (w < 52) {
		r = rand() % 52;
		if (swit[r] == 0) {
			swit[r] = 1;
			Card[w] = r + 1;
			w++;
		}
	}
}

void cardSet(int* DealerC, int* PlayerC, int* Card)
{
	for (int i = 0; i < 10; i++)
	{
		DealerC[i] = Card[i];
		PlayerC[i] = Card[i + 10];
	}

}

int gameStart(int* DealerC, int* PlayerC)
{
	int i = 0, d = 0;
	int Aa = 0, Ab = 0, gg = 0; // A구분자 A가 있으면 1 없으면 0
	int HS, Cnt = 2, Dsum = 0, Psum = 0;
	int GameSet = -1;

	//gmae start

	printf("Black Jack Start !\n");


	//player card open start

	printf("Player Card Open !!\n");
	Psum = Psum + cardPrt(PlayerC, &i, &Aa);
	Psum = Psum + cardPrt(PlayerC, &i, &Aa);

	while (1) {
		printf("\nHit(1) or Stay(2) :: ");
		scanf("%d", &HS);

		if (HS == 1)
		{
			for (int j = 0; j < Cnt; ) cardPrt(PlayerC, &j, &gg);

			Psum = Psum + cardPrt(PlayerC, &i, &Aa);
			Cnt++;



			if (Aa == 1 && Psum > 21) {
				Psum = Psum - 10; // A가 있고 21이 넘으면 -10;
				Aa = 0;
			}

			if (Psum == 21) {
				GameSet = 1;
				printf("\n///////////////////\nPlayer Black Jack\n///////////////////\n");
				break;
			}

			if (Psum > 21)
			{
				GameSet = -1;
				break;
			}



		}
		else { break; }  // if hs == stay break;

	}


	//Dealer card open start.



	printf("\n\n\nDealer Card Open !!\n");
	Dsum = Dsum + cardPrt(DealerC, &d, &Ab);
	Dsum = Dsum + cardPrt(DealerC, &d, &Ab);

	if (Dsum < Psum && Psum <= 21) {
		Dsum = Dsum + cardPrt(DealerC, &d, &Ab);
		if (Dsum > 21) GameSet = 1;
	}

	if (Ab == 1 && Dsum > 21) {
		Dsum = Dsum - 10; // A가 있고 21이 넘으면 -10;
		Ab = 0;
	}

	if (Dsum == 21) {
		printf("\n///////////////////\nDealer Black Jack\n///////////////////\n");
		GameSet = -1;
	}


	// win or lose or drow

	if (Psum == Dsum) GameSet = 0;
	if (Psum > Dsum&& Psum <= 21) GameSet = 1;


	return GameSet;
}


int cardPrt(int* Card, int* i, int* Aa)
{
	int pattern, num, Snum;

	pattern = (Card[*i] - 1) / 13;

	switch (pattern) {
	case 0:
		printf("♠ ");
		break;
	case 1:
		printf("◆ ");
		break;
	case 2:
		printf("♥ ");
		break;
	case 3:
		printf("♣ ");
		break;
	}

	//숫자 및 알파벳 구분
	num = (Card[*i] - 1) % 13;

	switch (num) {
	case 0:
		printf("A \t");
		Snum = 11;
		*Aa = 1;
		break;
	case 10:
		printf("J \t");
		Snum = 10;
		break;
	case 11:
		printf("Q \t");
		Snum = 10;
		break;
	case 12:
		printf("K \t");
		Snum = 10;
		break;
	default:
		printf("%d \t", num + 1);
		Snum = num + 1;
	}

	*i = *i + 1;

	return Snum;

}


void GameFinish(int gameSet)
{
	if (gameSet == 1)
	{
		printf("\n\n//////////////\n");
		printf("Player Win !!!\n");
		printf("//////////////\n\n");
	}
	else if (gameSet == -1)
	{
		printf("\n\n//////////////\n");
		printf("Player Lose !!!\n");
		printf("//////////////\n\n");
	}
	else
	{
		printf("\n\n//////////////\n");
		printf("Player Drow !!!\n");
		printf("//////////////\n\n");
	}

}

 

 

반응형