c语言方块排列游戏

付费节点推荐


免费节点


节点使用教程


假设有九个格子,其中八个格子为1~8的互不相同的数字,另外一个为空,用0表示,现在我们需要将1~8这些数字排列成1,2,3,4,5,6,7,8,0  就像手机上的拼图游戏一样。

[t]程序设计思想:[/t]

1) 定义一个结构体,结构体成员为一个二维数组和“0”(空格)的坐标x,y

2)当我们进行上下左右操作时,程序应该交换0和其他数字的位置,编写上下左右函数实现交换,并应控制好越界问题。

3)另外每次交换数字之前,我们都要获取“0”的位置。 对应 find_xy() 函数。

4)获取上下左右键盘的asccii码。

#define UP 72

#define DOWN 80

#define LEFT 75

#define RIGHT 77

5) 随机生成0~8的互不相同数字。

6)打印图形界面

[t]程序如下:[/t]

#include
#include
#include

#define N 3

#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77

typedef struct {
int a[3][3];
int x;
int y;
}node;

void paint(node *p)
{
int row,col;
printf("0相当于空位,移动数字至这个空位,将数字排列成n1 2 3n4 5 6n7 8 0 就赢了!ttt作者:bcoder.cnn");
printf("┌");
for (col = 0; col <N-1; col++) //输出一行
printf("─┬");
printf("─┐n");

for(row=0;row<N;row++)
{
printf("│"); //输出行号
for(col=0;col<N;col++)
{
printf("%2d│",p->a[row][col]);
}

printf("n");

if (row < N - 1)
{
printf("├"); //输出交叉线
for (col = 0; col < N - 1; col++) //输出一行
printf("─┼");
printf("─┤n");
}
}
printf("└");

for (col = 0; col < N - 1; col++) //最后一行的横线
printf("─┴");
printf("─┘n");

}

void find_xy(node *p){
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(p->a[i][j]==0)
{
p->x=i;
p->y=j;
}

}

void xia(node *p)
{
int t;
find_xy(p);
if(p->x-1>=0)
{
t=p->a[p->x][p->y];
p->a[p->x][p->y]=p->a[p->x-1][p->y];
p->a[p->x-1][p->y]=t;
}
else
;

}

void shang(node *p)
{
int t;
find_xy(p);
if(p->x+1<N)
{
t=p->a[p->x][p->y];
p->a[p->x][p->y]=p->a[p->x+1][p->y];
p->a[p->x+1][p->y]=t;
}
else
;

}

void you(node *p)
{
int t;
find_xy(p);
if((p->y)-1>=0)
{
t=p->a[p->x][p->y];
p->a[p->x][p->y]=p->a[p->x][p->y-1];
p->a[p->x][p->y-1]=t;
}
else
;

}

void zuo(node *p)
{
int t;
find_xy(p);
if(p->y+1<N)
{
t=p->a[p->x][p->y];
p->a[p->x][p->y]=p->a[p->x][p->y+1];
p->a[p->x][p->y+1]=t;
}
else
;

}

void vin(node *p)
{
int i;
for(i=0;i<N*N-1;)
{
if(*(*(p->a)+i)==i+1)
i++;
else
break;
if(i==N*N-1)
printf("you win !");
}

}

void srand_num(node *p)
{
int i,index,b[N*N];

for(i=0;i<N*N;i++)
b[i]=i;
srand((unsigned)time(0));
for(i=0;i<N*N;)
{
index=rand()%9; //生成0~8的不重复随机数
if(b[index]!=-1)
{
*(*(p->a)+i)=b[index];
b[index]=-1;
++i;
}

}

}

void play(node *p)
{
int key;
while(1)
{

vin(p);
key=getch();

switch(key){
case UP: shang(p); system("cls"); paint(p); break;
case DOWN: xia(p); system("cls"); paint(p); break;
case LEFT: zuo(p); system("cls"); paint(p); break;
case RIGHT: you(p); system("cls"); paint(p); break;
default: ; break;

}

}
}

void main()
{

node p;
srand_num(&p);
paint(&p);
printf("n");
play(&p);

}

c语言拼图游戏

c语言拼图游戏

未经允许不得转载:Bcoder资源网 » c语言方块排列游戏

相关推荐

更多优质资源关注微信公众号: bcoder

bcoder
赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册