C언어 간단한 소스 분석 부탁드립니다.
푸른들
질문 제목 : 블랙잭 소스분석진행도중에 종료현상질문 내용 : 제가 복학하게 되면서 이전에 만들었던 블랙잭게임을 돌려봤습니다. 그러한데 배팅금액을 입력을 하고 난 후에 바로 종료되는 현상이 일어나서 소스를 살펴보니 왜그런지 문제점을 찾을수가 없어서 선배님들의 가르침을 구하고자 글을 올립니다.#includestdio.h
#includewindows.h
#includestdlib.h
#includetime.h
int deck=52;//카드장수
int card[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};//카드종류 a,2,3,4,5,6,7,8,9,10,j,q,k
int c1=4;//a카드
int c2=4;//2카드
int c3=4;//3카드
int c4=4;//4카드
int c5=4;//5카드
int c6=4;//6카드
int c7=4;//7카드
int c8=4;//8카드
int c9=4;//9카드
int c10=16;//10,j,q,k카드
int gold=10000;//소지금액
int bat=0;//배팅금
int player=0;//플래이어의 숫자 합
int dealer=0;//딜러의 숫자합
int choice=0;//화면 선택 숫자
int qd=0;//딜러의 카운트
int pd=0;//딜러의 두번째 카운트
int q=0;//플레이어의 카운트
int p=0;//플레이어의 두번째 카운트
char yn;//yes 또는 no 선택 변수
void menu()
{
system(mode con:cols=45 lines=8);
printf(\n\n ┌──────────┐\n);
printf( │꿈가사 의 블 랙 잭│\n);
printf( └──────────┘\n);
printf( [1]시작 [2]설명 [3]종료 \n);
scanf(%d,&choice);
}
void explain()//게임 설명 화면 함
{
do
{
system(cls);
printf(1.처음 시작시 배팅을 한후 카드를 받습니다.\n);
printf(2.배팅후 카드를 두장 받고 숫자를 확인합니다.(딜러의 카드는 1장만 확인가능)\n);
printf(3.여기서 카드를 더 받을수도 있고 그만 끝낼수도 있습니다.\n);
printf(4.숫자 21에 가까운 쪽이 승리~!(21이 되면 위너위너 치킨디너~배팅금액의 2배를 획득)\n);
printf([4]뒤로가기);
scanf(%d,&choice);
}while(choice4 || choice4);
}
void game()//게임시작 화면 함수
{
do
{
gold=gold-bat;
bat=0;system(cls);
printf(현재 남은 배팅금액:%d\n,gold);
printf(얼만큼 배팅하시겠습니까?\n);
printf((최소 100$이상));
scanf(%d,&bat);
}while(bat100);//배팅금액이 100이하일경우 무한반복
if(bat=100)
{
srand((unsigned)time(null));//초단위로 랜덤값을 바꿔줌
q=rand()%12;//11까지의 수를 랜덤으로 추출
p=rand()%12;//11까지의 수를 랜덤으로 추출
qd=rand()%12;
pd=rand()%12;system(cls);switch(card[q])
{
case 1:
c1--;
deck--;
break;
case 2:
c2--;
deck--;
break;
case 3:
c3--;
deck--;
break;
case 4:
c4--;
deck--;
break;
case 5:
c5--;
deck--;
break;
case 6:
c6--;
deck--;
break;
case 7:
c7--;
deck--;
break;
case 8:
c8--;
deck--;
break;
case 9:
c9--;
deck--;
break;
case 10:
c10--;br /--;
deck--;
break;
case 11:
c10--;
deck--;
break;
case 12:
c10--;
deck--;
break;
case 13:
c10--;
deck--;
break;
}
switch(card[p])
{
case 1:
c1--;
deck--;
break;
case 2:
c2--;
deck--;
break;
case 3:
c3--;
deck--;
break;
case 4:
c4--;
deck--;
break;
case 5:
c5--;
deck--;
break;
case 6:
c6--;
deck--;
break;
case 7:
c7--;
deck--;
break;
case 8:
c8--;
deck--;
break;
case 9:
c9--;
deck--;
break;
case 10:
c10--;
deck--;
break;
case 11:
c10--;
deck--;
break;
case 12:
c10--;
deck--;
break;
case 13:
c10--;
deck--;
break;
}
switch(card[qd])
{
case 1:
c1--;
deck--;
break;
case 2:
c2--;
deck--;
break;
case 3:
c3--;
deck--;
break;
case 4:
c4--;
deck--;
break;
case 5:
c5--;
deck--;
break;
case 6:
c6--;
deck--;
break;
case 7:
c7--;
deck--;
break;
case 8:
c8--;
deck--;
break;
case 9:
c9--;
deck--;
break;
case 10:
c10--;
deck--;
break;
case 11:
c10--;
deck--;
break;
case 12:
c10--;
deck--;
break;
case 13:
c10--;
deck--;
break;
}
switch(card[pd])
{
case 1:
c1--;
deck--;
break;
case 2:
c2--;
deck--;
break;
case 3:
c3--;
deck--;
break;
case 4:
c4--;
deck--;
break;
case 5:
c5--;
deck--;
break;
case 6:
c6--;
deck--;
break;
case 7:
c7--;
deck--;
break;
case 8:
c8--;
deck--;
break;
case 9:
c9--;
deck--;
break;
case 10:
c10--;
deck--;
break;
case 11:
c10--;
deck--;
break;
case 12:
c10--;
deck--;
break;
case 13:
c10--;
deck--;
break;
}
printf(dealer의 점수:%d\n,card[qd]);
printf(player의 점수:%d\n,card[q]+card[p]);if(card[q]+card[p]21)
{
printf(카드를 더 받으시겠습니까?[y/n]);scanf(%c,&yn);
printf(%c,yn);
}
}
}
void main()
{
do
{
menu();if(choice==1)
{
system(cls);
game();
}
else if(choice==2)
{
system(cls);
explain();}
else if(choice==3)
{
exit(0);
}
}while(choice3 || choice1);
}
-
연블랙
아 ㅎㅎ;;저혼자볼때는 몰랏는데 지적해주시니 엉망으로 짯다는게 보이네요..지적감사합니다. 일단 말씀하신건 다 수정해놓았구 학교다녀와서 다시한번 살펴본다음에 종료되는 문제를 해결해보겠습니다 고맙습니다! (_ _ )꾸벅
-
달빛
아직 베팅을 하지도 않았는데 gold=gold-bat를 사고 있네요.
-
로지
맞습니다.
-
들빛
아 그럼 if에 들어잇는 srand 함수를 main함수쪽으로 옮겨도 다 적용된다는 말씀이신건가요??
-
새얀
srand 함수는 main 함수 처음에 한 번만 있으면 됩니다.
-
에드워드
배트는 영어로 bat이고 박쥐라는 뜻입니다. 배트맨이 여기에 해당됩니다.
\걸다\에 해당하는 영어는 \bet\이고 \베팅\이라고 써야 됩니다. -
김예쁨
네 맞아요 ㅠㅠ.. game()호출후에 배팅금액 입력하면 카드값만 정해지고 바로 종료가되버려서..ㅠㅠ..
-
설희
choice 를 1로하면 main에서 while문이 game() 호출 직후 종료되지 않나요?
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2701377 | 훌로트형 변수를, 서식문자 %d로 읽기 vs 인트형 포인터로 참조하기 | LetMeGo | 2025-07-13 |
2701291 | 콘솔에서 종료시킬때 메시지를 안띄우려면 어떻게 해야하나요? (1) | 세실 | 2025-07-12 |
2701262 | 씨언어 좀 봐주세요 | 아담 | 2025-07-12 |
2701211 | 토큰추출 | 겨루 | 2025-07-12 |
2701159 | 연산자문제 알려주세요 | 도1도캣 | 2025-07-11 |
2701130 | 중적분문제입니다. 적분구간에 변수가 들어갈순 없나요??ㅡㅜ | 풀큰 | 2025-07-11 |
2701098 | 난수에 질문드립니다. | 큰뫼 | 2025-07-11 |
2701070 | 또다른 시험문제 질문올립니다 | 채련 | 2025-07-10 |
2701042 | 뭐가 잘못된건지 잘 모르겠습니다.;; | 지은 | 2025-07-10 |
2700986 | 뭐가 잘못된건지좀 봐주세요. | 우주 | 2025-07-10 |
2700932 | 도와주세요 ㅠㅠ 모르겟어요 ㅠ | 유희 | 2025-07-09 |
2700900 | 반복문 도움요청..!!합니다. (1) | 두힘 | 2025-07-09 |
2700875 | (유효성검사)프로그램 짜는데 질문이 잇습니다. | 휑하니 | 2025-07-09 |
2700852 | 링크드 리스트 구현시 malloc 관련 에러 입니다. | 삐용삐용 | 2025-07-08 |
2700828 | 7/4 와 7/4.0 의 차이 | 발랄한그1녀 | 2025-07-08 |
2700771 | 아스키값 질문입니다. (+추가 임베디드 다른것도!) (3) | 찰스 | 2025-07-08 |
2700746 | 코드 오류 질문드립니다 | 차분 | 2025-07-07 |
2700721 | 배열 프로그래밍 입니다. (1) | 크나 | 2025-07-07 |
2700695 | 간단한 메모장 구현을 할려고 하는데요 (9) | 늘솜 | 2025-07-07 |
2700668 | c언어 질문입니다. 도와주세요~ (3) | 가자 | 2025-07-07 |