c语言方块排列游戏
来源:互联网 发布:stc89c52rc单片机 编辑:程序博客网 时间:2024/05/17 01:02
假设有九个格子,其中八个格子为1~8的互不相同的数字,另外一个为空,用0表示,现在我们需要将1~8这些数字排列成1,2,3,4,5,6,7,8,0 就像手机上的拼图游戏一样。
程序设计思想:
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)打印图形界面
程序如下:
2
3
#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 3\n4 5 6\n7 8 0 就赢了!\t\t\t作者:bcoder.cn\n”);
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语言Window控制台实现弹弹方块(单个方块,多个方块)
- C语言 - 移动的小方块
- C语言全排列
- C语言 全排列
- 【C语言训练】排列
- 打方块游戏
- 一款新方块游戏
- 方块游戏—题解
- 方块消除游戏
- 全排列C语言实现
- C语言实现全排列
- C语言实现全排列
- YTUOJ-C语言实验-排列
- C语言实现全排列
- C的语言游戏
- c语言拆字游戏
- c语言 迷宫游戏
- 多个客户端与一个服务器端通信的问题
- codecolor代码高亮插件下载
- Java本地文件操作-新建、删除、重命名、属性
- 【分享】极客学院视频教程下载
- Linux目录结构
- c语言方块排列游戏
- 巩固基础-类似tab的翻页效果,上一页下一页
- vbcrlf相关 及其 回车与换行的区别
- iOS证书--生产证书(Production)的申请
- ActionBar 样式详解 -- 样式 主题 简介 Actionbar 的 icon logo 标题 菜单样式修改
- A40J U盘启动设置
- 编程之美——2.20 程序理解和时间分析
- hdu 1171
- 彻底搞懂const,volatile, mutable的用法