手记

【养成记】【九月打卡】嵌入式挑战第一天俄罗斯方块之图形绘制

#include<stdio.h>
// 7种图形
// 4个方向
// 前16个是二维数组数据点,第17个是代表距离右侧距离,第18个代表距离下侧距离
//7----7种图案
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)
{   
    // 标记初始x坐标
    int initial_x = x;
    for (int i = 0; i < 16; i++)
    {
        // 4 x 4 方格每经过1行,纵坐标y+1,横坐标回归初始坐标 从第二行开始
        if (i != 0 && i % 4 == 0)
        {
            y += 1;
            x = initial_x;
        }
        // 打印图形
        if (shape[n][m][i] == 1)
        {
            //指定坐标输出
            printf("\033[%d;%dH",y,x);
            //输出背景颜色
            printf("\033[%d;%dm[]",c,c-10);
            //关闭背景颜色
            printf("\033[0m");
        }
        // 因为[]占两个位置所以x要移动2位
        x += 2;
        
    }
    
}
 int main()
 {
    // 清屏幕
    printf("\033[2J");
    // 设置光标初始位置
    int x = 6,y = 4;
    for (int i = 0; i < 7; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            print_mode_shape(i,j,x,y,43);
            x += 12;
        }
        // 每打印一组图案 x 回到初始位置,y向下移动5个位置
        x = 6;
        y = y + 4;
        printf("\n");
    }
    // 显示光标
    printf("\033[?25h");
    
    return 0;
 }
0人推荐
随时随地看视频
慕课网APP