블로그 이전 진행중
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");
}
}
'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 |