//蛇长度初始是5 H代表蛇的头部 X是蛇的身体//输入行数为 n 列数为 m //0 1 2 3 分别代表右下左上#include<bits/stdc++.h>#define inf 1e9#define rep(i,l,r) for (int i=l;i<=r;i++)usingnamespacestd;
int n,m,mcnt=0,x=1,y=5,pre,rx,ry,len=5;
struct node{int x,y;};
queue<node> q;
char Map[1005][1005];
void makemap(){
puts("n=");
scanf("%d",&n);
system("cls");
puts("m=");
scanf("%d",&m);
system("cls");
rep(i,0,n+1) rep(j,0,m+1) Map[i][j]=' ';
rep(i,0,m+1) Map[0][i]=Map[n+1][i]='*';
rep(i,0,n+1) Map[i][0]=Map[i][m+1]='*';
rep(i,1,4) Map[1][i]='X',q.push((node){1,i});
Map[1][5]='H'; q.push((node){1,5});
}
void pm(){ srand(time(NULL)); int i, j; i = rand() % w + 1; j = rand() % h + 1; while (map[i][j] != ' ') { i = rand() % w + 1; j = rand() % h + 1; } map[i][j] = '$';}int getinp()//W 1 ;A 2 ;S 3 ;D 4{ int dr = 0; char c = 0; int tle = 1; int start = clock(); while (clock() - start <= diffcuilty * 50) { if (kbhit()) c = getch(); if (c != 0) { tle--; } if (c == 'w') dr = 1; if (c == 'a') dr = 2; if (c == 's') dr = 3; if (c == 'd') dr = 4; if (clock() - start > diffcuilty * 50) return dr; } if (c == 'w') dr = 1; if (c == 'a') dr = 2; if (c == 's') dr = 3; if (c == 'd') dr = 4; return dr;}void pp(){ int i, j; system("cls"); for (i = h + 1; i >= 0; --i) { FOR(j, 0, w + 1) printf("%c", map[j][i]); printf("\n"); }}void dead(){ int t; printf("Failture with the score:%d\n", len); printf("\n\n\nPress any key to exit."); getchar(); exit(0);}void trick2(){
if (x==1&&y==m) {solve(1); return;}
if (x==2&&y==1) {solve(3); return;}
if (x==1) solve(0);
else {
if (x==2) {
if (!solve(1)) solve(2);
}
elseif (x==n){
if (!solve(3)) solve(2);
}
elseif (!solve(1)) solve(3);
}
}
int main(){
srand(time(NULL));
makemap();
pre=0;
while (1){
init();
int time=clock();
while (clock()-time<100);
int mn=inf,mni=-1;
int xx=x+dx[pre],yy=y+dy[pre];
if ((n&1)==0) {trick(); goto o;}
if ((m&1)==0) {trick2(); goto o;}
if (abs(xx-rx)+abs(yy-ry)<mn&&(Map[xx][yy]==' '||Map[xx][yy]=='M')) {
mn=abs(xx-rx)+abs(yy-ry); mni=pre;
}
rep(i,0,3) {
int xx=x+dx[i],yy=y+dy[i];
if (abs(xx-rx)+abs(yy-ry)<mn&&(Map[xx][yy]==' '||Map[xx][yy]=='M')) {
mn=abs(xx-rx)+abs(yy-ry); mni=i;
}
}
solve(mni); pre=mni;
if (mni==-1) {puts("GAME OVER"); break;}
o:;
if (len==n*m) {puts("GAME OVER"); break;}
system("cls");
}
}