急求一个用C语言写的小游戏运行...

益智游戏,能在TC下正常运行,已经试过,请补充。

# 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;

}