|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2997 [복사]
#include<stdio.h>
#include<conio.h>
int bak[20][20]={0};
int dolBTF, dolBTS, dolWTS, dolWTF, doli, dolj, cnte=0;
///////////////////////////////////////////////////////////////////////////////////////////////////
int gameb(int dolBF, int dolBS)
{
int dolcnt=0;
dolBF=dolBTF;
dolBS=dolBTS;
if(cnte>0)
{
if(bak[dolBF][dolBS]==1)
{
cnte++;
if(cnte==5)
{
return 25;
}
dolBTF=dolBF+doli;
dolBTS=dolBS+dolj;
gameb(dolBF, dolBS);
}
}
if(dolcnt<7)
{
cnte=1;
if(dolcnt==0)
{
doli=-1;
dolj=-1;
gameb(dolBF, dolBS);
}
else if(dolcnt==1)
{
doli=-1;
dolj=0;
gameb(dolBF, dolBS);
}
else if(dolcnt==2)
{
doli=-1;
dolj=1;
gameb(dolBF, dolBS);
}
else if(dolcnt==3)
{
doli=0;
dolj=-1;
gameb(dolBF, dolBS);
}
else if(dolcnt==4)
{
doli=0;
dolj=1;
gameb(dolBF, dolBS);
}
else if(dolcnt==5)
{
doli=1;
dolj=-1;
gameb(dolBF, dolBS);
}
else if(dolcnt==6)
{
doli=1;
dolj=0;
gameb(dolBF, dolBS);
}
else
{
doli=1;
dolj=1;
gameb(dolBF, dolBS);
}
dolcnt++;
}
return 10;
}
////////////////////////////////////////////////////////////////////////////////////////////////
int gamew(int dolWF, int dolWS)
{
int dolcnt=0, cnt=0;
dolWF=dolWTF;
dolWS=dolWTS;
if(cnte>0)
{
if(bak[dolWF][dolWS]==2)
{
cnte++;
if(cnte==5)
{
return 25;
}
dolWTF=dolWF+doli;
dolWTS=dolWS+dolj;
gamew(dolWF, dolWS);
}
}
if(dolcnt<7)
{
cnte=1;
if(dolcnt==0)
{
doli=-1;
dolj=-1;
gamew(dolWF, dolWS);
}
else if(dolcnt==1)
{
doli=-1;
dolj=0;
gamew(dolWF, dolWS);
}
else if(dolcnt==2)
{
doli=-1;
dolj=1;
gamew(dolWF, dolWS);
}
else if(dolcnt==3)
{
doli=0;
dolj=-1;
gamew(dolWF, dolWS);
}
else if(dolcnt==4)
{
doli=0;
dolj=1;
gamew(dolWF, dolWS);
}
else if(dolcnt==5)
{
doli=1;
dolj=-1;
gamew(dolWF, dolWS);
}
else if(dolcnt==6)
{
doli=1;
dolj=0;
gamew(dolWF, dolWS);
}
else
{
doli=1;
dolj=1;
gamew(dolWF, dolWS);
}
dolcnt++;
}
return 10;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
select:
char menu;
int i, j, cnt=0;
int dolBF, dolBS, dolWF, dolWS, B=0, W=0;
int change=0;
int asd=0, qwe=0;
printf("Game Start : S \n");
printf("Game Rules : R \n");
printf("Game Use System : U \n");
printf("Game End : E \n");
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf("Select : ");
menu = getche();
printf("\n\n\n");
if(menu=='S')
goto Start;
else if(menu=='E')
return 0;
else if(menu=='R' || menu=='U')
{
printf("\t 준비중 \n\n\n");
goto select;
}
else
{
printf(" ERROR : 존재하지 않는 명령어 입니다.\n\n\n");
goto select;
}
Start:
printf(" "); // 게임 시작
for(i=1 ; i<=19 ; i++)
{
printf("%2d", i);
}
printf("\n");
for(i=1 ; i<=19 ; i++)
{
printf("%3d ", i);
for(j=1 ; j<=19 ; j++)
{
printf("┼"); // 바둑알, 바둑판 출력
}
putchar('\n');
}
while(1)
{
printf("\n───────────────────────\n");
if(change % 2 == 0) // 흑돌 턴
{
printf("흑돌 차례 입니다. (기권 : 좌표(100 100) )\n");
scanf("%d %d", &dolBF, &dolBS);
if(bak[dolBF][dolBS]==0)
bak[dolBF][dolBS]=1;
else
{
printf("\n그곳엔 바둑돌이 있습니다. 다시 두십시오\n");
continue;
}
if(bak[100][100]==1) // 흑 기권, 백 승
{
W++;
break;
}
}
else // 백돌 턴
{
printf("백돌 차례 입니다. (기권 : 좌표(100 100) )\n");
scanf("%d %d", &dolWF, &dolWS);
if(bak[dolWF][dolWS]==0)
bak[dolWF][dolWS]=2;
else
{
printf("\n그곳엔 바둑돌이 있습니다. 다시 두십시오\n");
continue;
}
if(bak[100][100]==2) // 백 기권, 흑 승
{
B++;
break;
}
}
printf("\n───────────────────────\n");
printf(" ");
for(i=1 ; i<=19 ; i++)
{
printf("%2d", i);
}
printf("\n");
for(i=1 ; i<=19 ; i++)
{
printf("%3d ", i);
for(j=1 ; j<=19 ; j++)
{
if(bak[i][j]==1)
printf("○"); // 바둑알, 바둑판 출력
else if(bak[i][j]==2)
printf("●");
else
printf("┼");
}
putchar('\n');
}
if(change % 2 == 0) // 누가누가 이겼나 (흑)
{
qwe=gameb(dolBF, dolBS);
if(qwe==25)
{
B++;
break;
}
}
else // 누가누가 이겼나 (백)
{
asd=gamew(dolWF, dolWS);
if(asd==25)
{
W++;
break;
}
}
cnte=0;
change++;
}
/////////////////////////////////////////////////////////////////////////////////////////////////
if(B>W)
printf("흑 승");
else
printf("백 승");
printf("\n메뉴로 돌아가시겠습니까? Y/N : ");
menu = getche();
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
if(menu=='Y')
goto select;
return 0;
}
하하하하....
친구한테 제가 컴퓨터 공부 시작했다고 했더니
친구가 게임 만들줄 아냐? 라기에
아니라고 했지만
오목이라도 만들어오면 점심 쏜다고 해서
지금 몇시간째 씨름하고 있는데 (엄청난 노가다로 인해)
마지막에서 스택 오버플로우를 보고는 좌절에 빠졌습니다.
제, 제길! 다왔는데!
오버플로우에 빠진곳은 딱 봐도 아시겠지만
분명히 제가 만든 함수에서 발생했을 것입니다.
아마 앞에 전역변수들
int bak[20][20]={0};
int dolBTF, dolBTS, dolWTS, dolWTF, doli, dolj, cnte=0;
때문에 그런가요?
아, 잘 모르겠네.;;
시험 끝나고 띵가띵가 놀다가 몇달만에 컴퓨터를 잡았는데
실제론 처음보는 오버플로우가 뜨다니!
좀 해결해주세요 ㅠㅠㅠ 점심 외식 하고 싶어요ㅠㅠ
복사해서 컴파일 해보시구 오류 해결해주셔두 되요 ㅠㅠ
좀 부탁드려요 ㅠㅠ |
Hit : 10516 Date : 2011/05/13 07:19
|