你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~
🍊自我介绍
Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾” 和“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式中有关C语言的项目实战:俄罗斯方块的内容存储相关知识。
🍊俄罗斯方块数据存储
三维数组的简单介绍
承接上篇文章,我们知道最后存储方块是用了三维数组进行存储的,接下来给大家简单的介绍一下三维数组的表示形式:
我们从上面的图片中可以看出来三维数组是由多个二维数组组成的,接下来给大家看一个更为直观的表示形式:
简单介绍,上图中a[0][3][4] 中的0代表第一个二维数组,3和4代表三行四列。
俄罗斯方块数组的设计
类型的设计
int shape[7][4][18];
//7----7种图形
//4----每种图形有4种变换
//18----前16代表二维数组的数据点,第十七个数据代表距离右侧的距离,第18个数据代表距离下侧的距离。
初始值的方块库的设计
int shape[7][4][18] =
{
{
{1,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 2,2},// [][]
{1,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 2,2},// [][]
{1,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 2,2},//
{1,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 2,2},//
},
{
{1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 3,0},// [] [][][][]
{1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0.3},// []
{1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 3,0},// []
{1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0.3},// []
},
{
{0,1,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0, 1,2},// [] [] [][][] []
{1,0,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0, 2,1},// [][][] [][] [] [][]
{1,1,1,0, 0,1,0,0, 0,0,0,0, 0,0,0,0, 1,2},// [] []
{0,1,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0, 2,1},//
},
{
{1,1,0,0, 0,1,1,0, 0,0,0,0, 0,0,0,0, 1,2},// [][] []
{0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0, 2,1},// [][] [][]
{1,1,0,0, 0,1,1,0, 0,0,0,0, 0,0,0,0, 1,2},// []
{0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0, 2,1},//
},
{
{0,1,1,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 1,2},// [][] []
{1,0,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0, 2,1},// [][] [][]
{0,1,1,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 1,2},// []
{1,0,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0, 2,1},//
},
{
{0,0,1,0, 1,1,1,0, 0,0,0,0, 0,0,0,0, 1,2},// [] [] [][][] [][]
{1,0,0,0, 1,0,0,0, 1,1,0,0, 0,0,0,0, 2,1},// [][][] [] [] []
{1,1,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, 1,2},// [][] []
{1,1,0,0, 0,1,0,0, 0,1,0,0, 0,0,0,0, 2,1},//
},
{
{1,0,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0, 1,2},// [] [][] [][][] []
{1,1,0,0, 1,0,0,0, 1,0,0,0, 0,0,0,0, 2,1},// [][][] [] [] []
{1,1,1,0, 0,0,1,0, 0,0,0,0, 0,0,0,0, 1,2},// [] [][]
{0,1,0,0, 0,1,0,0, 1,1,0,0, 0,0,0,0, 2,1},//
},
}
输出指定位置的图形
void print_mode_shape(int n,int m,int x,int y,int c)
{
int i = 0;
int xx = x;
int yy =y;
for(i = 0;i < 16;i++)//横坐标的变化
{
shape[n][m][i];
if(shape[n][m][i] == 1)
{
printf("\033[%d;%dH",yy,xx);//指定坐标输出
printf("\033[%dm[]",c);//输出颜色
printf("\033[0m");//关闭属性
}
xx += 2; //这里之所以加2 是因为我们是用[]表示方格,一个 [ 代表一列
if(i != 0 && i% 4 ==0)
{
yy += 1;//我们用4 * 4 的空间来打印方格,当一行中四个方格打印完成之后,换行,横坐标重新变为初识横坐标
xx = x;
}
}
}
变量解释
n:7种图案中选择某个图案
m:4种方向中选择某个方向
x,y:坐标
c:颜色
xx += 2 解释
输出每种图形及其转换形式代码
#include <stdio.h>
int main()
{
printf("\033[2J");
int x = 6;
int y = 6;
int k = 0;//k表示七种图案
int i = 0;//i表示转换方式,
for(k = 0;k < 7;k++)
{
for(i = 0;i < 4;i++)
{
print_mode_shape(k,i,x,y,43);
x = x + 12;
}
x = 6;
y = y + 4;
getchar();//表示停顿
}
printf("\033[?25h");//消除光标
return 0;
}
输出结果: