急求一个用C语言写的小游戏运行...
# include & ltstdio.h & gt
# include & ltstdlib.h & gt/*使用int random(int a)其中:
生成一个介于0和-1之间的整数。
和randomize():重置随机生成器*/
# include & ltconio.h & gt/*使用gotoxy(int x,int y):
将光标移动到屏幕上的X (1 ~ 80)和Y (1 ~ 25/50)处*/
/*和clrscr():清除屏幕*/
int num[]={1,2,3,4,5,6,7,8,0 };/*框中的数字*/
main(){
char key = 0;/*键盘代码*/
int pos/*空间在九个正方形中的位置*/
clr SCR();/*清空屏幕*/
randomize();/*初始化随机生成器*/
new game();
for(;;){
key = getch();/*获取键盘输入*/
if(key==0)继续;
pos = GetTheNull();/*获取空格*/
开关(键){ /*测试键*/
案例72: /* Press */
如果(pos & lt=5)改变(pos,pos+3);
打破;
案例80: /* Press */
if(pos & gt;=3)改变(pos,pos-3);
打破;
案例77: /*向左按*/
如果(位置%3!=0)改变(pos,pos-1);
打破;
案例75: /*按右*/
如果(位置%3!=2)改变(pos,pos+1);
打破;
案例110: /*按“n”创建新游戏*/
new game();
}
update();/*更新*/
If(isSuccess()){ /*看游戏是否成功*/
gotoxy(26,10);/*成功,输出一条消息说干得好!*/
printf(" \ 332 \ 304 \ 304 \ 304 \ 304 \ 304 \ 304 \ 304 \ 304 \ 304 \ 304 \ 267 ");
gotoxy(26,11);
printf(" \ 263 \ 272 ");
gotoxy(26,12);
printf("\263干得好!\272");
gotoxy(26,13);
printf(" \ 263 \ 272 ");
gotoxy(26,14);
printf(" \ 324 \ 315 \ 315 \ 315 \ 315 \ 315 \ 315 \ 315 \ 315 \ 315 \ 315 \ 315 \ 315
getch();
new game();/*新游戏*/
}
if(key = = 27)break;/*退出*/
}
clr SCR();/*清空屏幕*/
}
NewGame(){ /*创建一个新游戏,其实就是用数字把八个方块打散。
这个效果的实现是随机两两交换,但为什么不与空的交换呢?
这就涉及到有没有解决方案的问题。
反正九格游戏的最终结果只有两个:
123 | 123
456 | 456
78 | 87(证据省略)
但是,要两两交换并总是有解,就必须(从原序列)相邻交换的个数是偶数。
但是我们用一种更有效的方法:
每个总是与下一个交换。
0,1的第7和第8次交换,只要交换次数多一些,还是可以达到同样的效果。
这些的前提是0不能和它的奇数交换奇数次。
为了省事,不处理0。...
原因,请你自己想。
*/
int i,a,b;
for(I = 0;我& lt8;i++)num[I]= I+1;
num[8]= 0;/*恢复数组*/
for(I = 0;我& lt300;i++){
a =随机(8);/*生成随机数*/
b =(a+2)% 8;/*获取下一个第二个数组下标*/
变化(a,b);/*交换*/
}
update();
}
Update(){ /*在屏幕上画出整个九宫格图像,自己分析定位问题*/
int i,j;
for(I = 0;我& lt=2;i++){
gotoxy(24,8+I * 3);
for(j = 0;j & lt=2;j++){
if (num[j+i*3]!=0)
printf(" \ 332 \ 304 \ 304 \ 304 \ 267 ");
其他
printf(" ");
}
gotoxy(24,9+I * 3);
for(j = 0;j & lt=2;j++){
if (num[j+i*3]!=0)
printf("\263 %d \272 ",num[j+I * 3]);
其他
printf(" ");
}
gotoxy(24,10+I * 3);
for(j = 0;j & lt=2;j++){
if (num[j+i*3]!=0)
printf(" \ 324 \ 315 \ 315 \ 315 \ 315 \ 274 ");
其他
printf(" ");
}
printf(" \ n ");
}
}
Int isSuccess(){ /*判断是否播放*/
int i,ret = 1;
for(I = 0;我& lt8;i++)
ret = ret & amp& amp(num[I]= =(I+1));
返回ret
}
Int GetTheNull(){ /*获取空格的位置*/
int I;
for(I = 0;我& lt=8;i++){
if (num[i]==0)
返回I;
}
}
Change(int a,int b){ /* exchange num[a],num[b]*/
内部温度;
temp = num[a];
数字[a]=数字[b];
num[b]= temp;
}