본문 바로가기

Study/C / C++

C언어를 이용한 Black Jack 게임

블로그 이전 진행중

https://sloth-cat.tistory.com/1



<조건>

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

2. Hit or Stay 선택

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

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

5. 딜러 턴 시작

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

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

8. 값이 21이 되면 블랙잭

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

 

 

 

BlackJack.exe


main.cpp



 

 

 

#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] = false;
 }

 srand(time(NULL));
 while(w < 52) {
  r = rand() % 52;
  if(swit[r] == false) {
   swit[r] = true;
   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");
 }

}

'Study > C / C++' 카테고리의 다른 글

API 비행기 출력 소스  (0) 2014.09.12
API 도형 그리기  (0) 2014.09.11
Cpp / 스택을 이용한 주소록  (0) 2014.09.05
C언어 링크드 리스트를 이용한 학생 정보 저장  (0) 2014.09.04
Black Jack ver.2  (0) 2014.09.04