본문 바로가기

Study/C / C++

Black Jack ver.2

블로그 이전 진행중

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


텍스트 파일에 점수 저장 기능

이름으로 사용자 구분


같은 이름이면 자동으로 점수 불러오기


#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <string.h>


void gameload(char *filename);

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 gameSave(char *filename);


int GameScore = 1000;

int Bgold = 0;

char name[20],number[20];


void main()

{

int Card[52];

int DealerC[10],PlayerC[10];

int gameSet = 0, i = 0;


char filename[20];

char txt[5];


// 사용자 확인

printf("이름을 입력 :: ");

scanf("%s",filename);

strcpy(name,filename);


printf("전화번호를 입력하시오 ::");

scanf("%s",number);


strcpy(txt,".txt");

strcat(filename,txt);


while(Bgold<10 || Bgold>100){

printf("배팅 금액을 선택 ( 10 ~ 100) :: ");

scanf("%d",&Bgold);

}



// 게임 정보 저장 / 불러오기

gameload(filename);


while(1)

{

printf("////////////////////////////////////////\n");

printf("//////////////BLACK JACK////////////////\n");

printf("////////////////////////////////////////\n");

printf("사용자 :: %s 님 전화번호 :: %s \n",name,number);

printf("현재 게임 스코어      %d      입니다.\n\n",GameScore);

// game start

init(Card);

cardSet(DealerC,PlayerC,Card);

gameSet = gameStart(DealerC,PlayerC);

GameFinish(gameSet);

// game end


printf("\n\nOne More 1 / Game Exit 2  :: ");

scanf("%d",&i);


if(i == 2)

{

printf("Thanks.\n");

gameSave(filename);

break;

} else if(i!=1){

printf("reTry.\n");

printf("\n\nOne More 1 / Game Exit 2  :: ");

scanf("%d",&i);

}


if(GameScore < 0) {

printf("스코어를 모두 사용하여 게임을 진행 하실수 없습니다.");

exit(1);

}


system("cls");


}


}


void gameSave(char *filename)

{

FILE *fp;


fp = fopen(filename,"w");

if(fp == NULL)

{

printf("file write fail\n");

exit(1);

}

fprintf(fp,"%d %s %s\n",GameScore,name,number);

fclose(fp);


}

void gameload(char *filename)

{


int flag=0;

FILE *fp;


fp = fopen(filename,"r");

if(fp == NULL)

{

printf("저장 정보 없음\n");

printf("새로 시작 1번 / 종료 2번\n");

printf("입력 :: ");

scanf("%d",&flag);

if(flag == 1){ 

fp = fopen(filename,"w");

fprintf(fp,"%d %s %s\n",GameScore,name,number);

}

else{ exit(1); }

}


fscanf(fp,"%d %s %s\n",&GameScore,name,number);


fclose(fp);


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");

GameScore += Bgold;

else if (gameSet == -1)

{

printf("\n\n//////////////\n");

printf("Player Lose !!!\n");

printf("//////////////\n\n");

GameScore -= Bgold;

}

else

{

printf("\n\n//////////////\n");

printf("Player Drow !!!\n");

printf("//////////////\n\n");

}


}



BlackJack.exe


main.cpp


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

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