/*软件名称: 拼图游戏
/*开发平台: microsoft Visual 6.0
/*测试环境: microsoft Visual 6.0
/*开 发 者: lin_miao
/*开发时间: 2008年10月23日 23:19——2008年10月24日 0:42
/*联系方式: lin_miao0818@126.com
*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
const int max=5;
const char UP='w';
const char DOWN='s';
const char LEFT='a';
const char RIGHT='d';
const char EXIT='E';
char Level;
int Column,Row;
int flag_Column,flag_Row;
int Screen[max][max];
void UpdataScreen()
{
int i,j;
system("cls");
for(i=0;i<Row;i++)
{
printf("/n/n/t");
for(j=0;j<Column;j++)
Screen[i][j]==0?printf("/t"):printf("%d/t",Screen[i][j]);
}
printf("/n/n/n%c--UP %c--DOWN %c--LEFT %c--RIGHT %c--EXIT",UP,DOWN,LEFT,RIGHT,EXIT);
}
char ScanKey()
{
char ch;
do
{
ch=getch();
}while(ch!=UP&&ch!=DOWN&&ch!=LEFT&&ch!=RIGHT&&ch!=EXIT);
return ch;
}
bool play(char c)
{
switch(c)
{
case UP:
if(flag_Row!=Row-1)
{
Screen[flag_Row][flag_Column]=Screen[flag_Row+1][flag_Column];
flag_Row=flag_Row+1;
Screen[flag_Row][flag_Column]=0;
return true;
}break;
case DOWN:
if(flag_Row!=0)
{
Screen[flag_Row][flag_Column]=Screen[flag_Row-1][flag_Column];
flag_Row=flag_Row-1;
Screen[flag_Row][flag_Column]=0;
return true;
}break;
case LEFT:
if(flag_Column!=Column-1)
{
Screen[flag_Row][flag_Column]=Screen[flag_Row][flag_Column+1];
Screen[flag_Row][flag_Column+1]=0;
flag_Column=flag_Column+1;
return true;
}break;
case RIGHT:
if(flag_Column!=0)
{
Screen[flag_Row][flag_Column]=Screen[flag_Row][flag_Column-1];
Screen[flag_Row][flag_Column-1]=0;
flag_Column=flag_Column-1;
return true;
}break;
case EXIT:
exit(0);
}
return false;
}
void init()
{
int i,j,k=1;
printf("请输入级别:1--低级 2--中级 3--高级/n");
while((Level=getch()),(Level<'1'||Level>'3'))
{
printf("选择错误! 请再次选择!/a/n");
}
switch(Level)
{
case '1':Row=3;Column=3;break;
case '2':Row=4;Column=4;break;
case '3':Row=5;Column=5;break;
}
for(i=0;i<Row;i++)
for(j=0;j<Column;j++)
Screen[i][j]=k++;
Screen[Row-1][Column-1]=0;
flag_Row=Row-1;
flag_Column=Column-1;
srand((unsigned)time(NULL));
for(i=0;i<Row*Column*10;i++)
{
switch(rand()%4)
{
case 0:play(UP);break;
case 1:play(DOWN);break;
case 2:play(LEFT);break;
case 3:play(RIGHT);break;
}
}
}
bool iswin()
{
int i,j,k=0;
for(i=0;i<Row;i++)
for(j=0;j<Column;j++)
if(++k!=Screen[i][j]&&k<Row*Column)
return false;
return true;
}
void main()
{
init();
UpdataScreen();
while(true)
{
if(play(ScanKey()))
{
UpdataScreen();
if(iswin())
break;
}
}
printf("/n/n/n/t你赢了!/n请按任意键结束!/a");
}