主题:一个拼图游戏
我从网上下的一个拼图的游戏,感觉里面的控制格子移动的方式反了,当然,运行结果是对的.程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int num[]={1,2,3,4,5,6,7,8,0};
main()
{
char key=0;
int pos;
clrscr();
randomize();
newGame();
while(1)
{
key=getch();
if(key==0) continue;
pos=GetTheNull();
/*************感觉下面上下左右刚好反了************/
switch(key)
{
case 72: if(pos<=5) change(pos,pos+3); break;
case 80: if(pos>=3) change(pos,pos-3); break;
case 77: if(pos%3!=0) change(pos,pos-1);break;
case 75: if(pos%3!=2) change(pos,pos+1);break;
case 110: newGame();
}
/************************************************/
update();
if(isSuccess())
{
gotoxy(26,10);
printf("\332\304\304\304\304\304\304\304\304\304\304\304\304\267");
gotoxy(26,11);
printf("\263 \272");
gotoxy(26,12);
printf("\263 Well Done! \272");
gotoxy(26,13);
printf("\263 \272");
gotoxy(26,14);
printf("\324\315\315\315\315\315\315\315\315\315\315\315\315\274\n");
getch();
newGame();
}
if(key==27) break;
} //end of while
clrscr();
} //end of main
int newGame()
{
int i,a,b;
for(i=0;i<8;i++) num[i]=i+1;
num[8]=0;
for(i=0;i<300;i++)
{
a=random(8);
b=(a+2)%8;
change(a,b);
}
update();
}
update()
{
int i,j;
for(i=0;i<=2;i++)
{
gotoxy(24,8+i*3);
for(j=0;j<=2;j++)
{
if (num[j+i*3]!=0) printf("\332\304\304\304\304\267");
else printf(" ");
}
gotoxy(24,9+i*3);
for(j=0;j<=2;j++)
{
if (num[j+i*3]!=0) printf("\263 %d \272",num[j+i*3]);
else printf(" ");
}
gotoxy(24,10+i*3);
for(j=0;j<=2;j++)
{
if (num[j+i*3]!=0) printf("\324\315\315\315\315\274");
else printf(" ");
}
printf("\n");
}
}
int isSuccess()
{
int i,ret=1;
for(i=0;i<8;i++)
ret=ret&&(num[i]==(i+1));
return ret;
}
int GetTheNull()
{
int i;
for(i=0;i<=8;i++)
{
if (num[i]==0)
return i;
}
}
change(int a,int b)
{
int temp;
temp=num[a];
num[a]=num[b];
num[b]=temp;
}
其中,pos是内容为0,显示为空的一格. 当按键为下的时候(键值为72),应该是空格在第二第三行才能移动,也就是说条件应该是 if(pos>=3) ,但程序刚好相反,其它的也同样.
请问高手,这个怎么回事呀?
谢谢
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int num[]={1,2,3,4,5,6,7,8,0};
main()
{
char key=0;
int pos;
clrscr();
randomize();
newGame();
while(1)
{
key=getch();
if(key==0) continue;
pos=GetTheNull();
/*************感觉下面上下左右刚好反了************/
switch(key)
{
case 72: if(pos<=5) change(pos,pos+3); break;
case 80: if(pos>=3) change(pos,pos-3); break;
case 77: if(pos%3!=0) change(pos,pos-1);break;
case 75: if(pos%3!=2) change(pos,pos+1);break;
case 110: newGame();
}
/************************************************/
update();
if(isSuccess())
{
gotoxy(26,10);
printf("\332\304\304\304\304\304\304\304\304\304\304\304\304\267");
gotoxy(26,11);
printf("\263 \272");
gotoxy(26,12);
printf("\263 Well Done! \272");
gotoxy(26,13);
printf("\263 \272");
gotoxy(26,14);
printf("\324\315\315\315\315\315\315\315\315\315\315\315\315\274\n");
getch();
newGame();
}
if(key==27) break;
} //end of while
clrscr();
} //end of main
int newGame()
{
int i,a,b;
for(i=0;i<8;i++) num[i]=i+1;
num[8]=0;
for(i=0;i<300;i++)
{
a=random(8);
b=(a+2)%8;
change(a,b);
}
update();
}
update()
{
int i,j;
for(i=0;i<=2;i++)
{
gotoxy(24,8+i*3);
for(j=0;j<=2;j++)
{
if (num[j+i*3]!=0) printf("\332\304\304\304\304\267");
else printf(" ");
}
gotoxy(24,9+i*3);
for(j=0;j<=2;j++)
{
if (num[j+i*3]!=0) printf("\263 %d \272",num[j+i*3]);
else printf(" ");
}
gotoxy(24,10+i*3);
for(j=0;j<=2;j++)
{
if (num[j+i*3]!=0) printf("\324\315\315\315\315\274");
else printf(" ");
}
printf("\n");
}
}
int isSuccess()
{
int i,ret=1;
for(i=0;i<8;i++)
ret=ret&&(num[i]==(i+1));
return ret;
}
int GetTheNull()
{
int i;
for(i=0;i<=8;i++)
{
if (num[i]==0)
return i;
}
}
change(int a,int b)
{
int temp;
temp=num[a];
num[a]=num[b];
num[b]=temp;
}
其中,pos是内容为0,显示为空的一格. 当按键为下的时候(键值为72),应该是空格在第二第三行才能移动,也就是说条件应该是 if(pos>=3) ,但程序刚好相反,其它的也同样.
请问高手,这个怎么回事呀?
谢谢