블로그 이전 진행중
https://sloth-cat.tistory.com/1
<조건>
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] = 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 |