데이터 구조 과정 설계 - 오목
11410 단어 데이터 구조
1. 먼저 게임 인 터 페 이 스 를 설계 하고 위 에 옵션 이 있어 서로 다른 기능 을 제공한다.예 를 들 어 게임 시작, 게임 종료 등 이다.
2. 2 차원 배열 로 바둑판 을 그 려 내 고 바둑판 의 상 태 를 계속 기록 하고 업데이트 한다.예 를 들 어 W [19] [19] 로 바둑판 을 표시 한다. 만약 에 W [i] [j] = 0 은 위치 (i, j) 에 자식 이 없다 는 것 을 나타 내 고 W [i] [j] = 1 은 이 위치 에 있 는 것 이 흑점 이 고 W [i] [j] = - 1 은 이 위치 에 있 는 것 이 백자 라 는 것 을 나타 낸다.
3. 키보드 로 입력 한 x, y 바둑판 의 가로 세로 좌 표를 실현 하여 바둑돌 의 타 점 을 지정 합 니 다.
4. 승부 메커니즘 이 있어 서 흑 방 이 이 기 는 지 백 방 이 이 기 는 지 판단 할 수 있 고 이번 게임 은 끝 납 니 다.
이번 게임 이 끝 난 후에 이어서 한 판 더 할 수 있다.
#include
#include
#include
#include
using namespace std;
int x,y,Step=0;
bool flag=0;//0 ,1
char Switch;
char wmap[20][20][3]={
{"┌","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┐"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},
{"└","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┘"}};
char copymap[20][20][2];
int Showboard(),Play(),Interface(),Initboard(),Judgewin(),CopyB();
bool Existed(),Overflow();
//
int Interface()
{
char a;//
cout << "
";
cout << " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;
cout << " " ; cout << " ~~ 1: ~~" << endl;
cout << " " ; cout << " ~~ 2: ~~" << endl;
cout << " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;
cout << "
:";
cin >> a;
if(a=='2')
{ cout << "
!
";
cout << " !";
getch();// ,
return 0;
}
if(a=='1') Play();
return 0;
}
//
int Initboard()
{
Step=0;
for(int i=0;i<20;i++)
for(int j=0;j<20;j++)
{
wmap[i][j][0]=copymap[i][j][0];
wmap[i][j][1]=copymap[i][j][1];
}
return 0;
}
// , , CopyB()
int CopyB()
{
for(int i=0;i<20;i++)
for(int j=0;j<20;j++)
{
copymap[i][j][0]=wmap[i][j][0];
copymap[i][j][1]=wmap[i][j][1];
}
return 0;
}
//
int Judgewin()
{
int cx,cy,dx,dy;
char a0=-95;
char a1=-16;
if(flag==0)
{
a1=-15;
}
cx=x;cy=y;dx=x;dy=y;
//
while(wmap[cx][cy][0]==a0&&wmap[cx][cy][1]==a1)
{
cx--;cy--;
if(cx<0||cy<0) break;
}
//
while(wmap[dx][dy][0]==a0&&wmap[dx][dy][1]==a1)
{
dx++;dy++;
if(dx>15||dy>15) break;
}
if(dx>=(cx+6)||dy>=(cy+6)) return 1;
cx=x;cy=y;dx=x;dy=y;
//
while(wmap[cx][cy][0]==a0&&wmap[cx][cy][1]==a1)
{
cx--;
if(cx<0) break;
}
//
while(wmap[dx][dy][0]==a0&&wmap[dx][dy][1]==a1)
{
dx++;
if(dx>15) break;
}
if(dx>=(cx+6)) return 1;
cx=x;cy=y;dx=x;dy=y;
//
while(wmap[cx][cy][0]==a0&&wmap[cx][cy][1]==a1)
{
cy--;
if(cy<0) break;
}
//
while(wmap[dx][dy][0]==a0&&wmap[dx][dy][1]==a1)
{
dy++;
if(dy>15) break;
}
if(dy>=(cy+6)) return 1;
cx=x;cy=y;dx=x;dy=y;
//
while(wmap[cx][cy][0]==a0&&wmap[cx][cy][1]==a1)
{
cx++;cy--;
if(cx>15||cy<0) break;
}
//
while(wmap[dx][dy][0]==a0&&wmap[dx][dy][1]==a1)
{
dx--;dy++;
if(dx<0||dy>15) break;
}
if(cx>=(dx+6)||dy>=(cy+6)) return 1;
return 0;
}
//
int Showboard()
{
system("CLS");// ,
cout << " ";
for(int s=1;s<=20;s++)
{
if(s>=10) cout << s<< "";
else cout << s << " ";
}
cout << endl;
for(int i=0;i<20;i++)
{
printf("%2d",i+1);
for(int j=0;j<20;j++)
cout << wmap[i][j];
if(i==6) cout << " : : 0 0 ";
if(i==8) cout << " (Step):" << Step;
if(i==10) cout << " 、 !" ;
cout << endl;
}
return(1);
}
//
bool Existed()
{
if((wmap[x-1][y-1][0]==-95&&wmap[x-1][y-1][1]==-16)||
(wmap[x-1][y-1][0]==-95&&wmap[x-1][y-1][1]==-15))
return false;
else
return true;
}
//
bool Overflow()
{
if(x>20||x<1||y>20||y<1)
{
cout << " ! :";
return true;
}
else
return false;
}
//
int Play()
{
Showboard();//
cout << " :";
while(cin >> x >> y)
{
if(x==0&&y==0)
{
Initboard();
Interface();
break;
}
if(Overflow()) continue;
if(Existed())
{
x--;y--;// 0
wmap[x][y][0]=-95;
if(flag==1)
{
wmap[x][y][1]=-16;
Step++;
Showboard();
if(Judgewin())
{
cout << "
!
" ;
cout << " ! ?(y/n)";
cin >> Switch;
if(Switch!='n')
{
Initboard();
Play();
}
else return 1;
}
cout << " :";
flag=0;
}
else
{
wmap[x][y][1]=-15;
Step++;
Showboard();
if(Judgewin())
{
cout << "
!" << endl;
cout << " ! ?(y/n)";
cin >> Switch;
if(Switch!='n')
{
Initboard();
Play();
}
else return 1;
}
cout << " :";
flag=1;
}
}
else
{
cout << " ! :";
}
}
return 0;
}
int main()
{
CopyB();// ,
Interface();//
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.