华为昇腾310嵌入式开发重力小球迷宫的部分源码

这篇文章详细展示了在华为昇腾310平台上进行的嵌入式实验中,涉及的重力小迷宫游戏的部分源码,包括球体移动、清除点以及地图绘制等函数。代码揭示了如何利用硬件加速器处理传感器数据并更新游戏逻辑。
摘要由CSDN通过智能技术生成

华为昇腾310开发板重力小球迷宫的部分源码

作者:爱写代码的刚子

时间:2024.1.11

前言:本篇博客是对学校嵌入式大实验的记录

void Ball_Point(int x,int y)
{
    DrawPoint(x-1,y-2);
    DrawPoint(x,y-2);
    DrawPoint(x+1,y-2);
    
    DrawPoint(x-2,y-1);
    DrawPoint(x-1,y-1);
    DrawPoint(x,y-1);
    DrawPoint(x+1,y-1);
    DrawPoint(x+2,y-1);
    
    DrawPoint(x-2,y);
    DrawPoint(x-1,y);
    DrawPoint(x,y);
    DrawPoint(x+1,y);
    DrawPoint(x+2,y);
    
    DrawPoint(x-2,y+1);
    DrawPoint(x-1,y+1);
    DrawPoint(x,y);
    DrawPoint(x+1,y+1);
    DrawPoint(x+2,y+1);
    
    DrawPoint(x-1,y+2);
    DrawPoint(x,y+2);
    DrawPoint(x+1,y+2);
}


void Ball_Clear(int x,int y)
{
    ClearPoint(x-1,y-2);
    ClearPoint(x,y-2);
    ClearPoint(x+1,y-2);
    
    ClearPoint(x-2,y-1);
    ClearPoint(x-1,y-1);
    ClearPoint(x,y-1);
    ClearPoint(x+1,y-1);
    ClearPoint(x+2,y-1);
    
    ClearPoint(x-2,y);
    ClearPoint(x-1,y);
    ClearPoint(x,y);
    ClearPoint(x+1,y);
    ClearPoint(x+2,y);
    
    ClearPoint(x-2,y+1);
    ClearPoint(x-1,y+1);
    ClearPoint(x,y);
    ClearPoint(x+1,y+1);
    ClearPoint(x+2,y+1);
    
    ClearPoint(x-1,y+2);
    ClearPoint(x,y+2);
    ClearPoint(x+1,y+2);
}


void DrawBlock(int x,int y)
{
    for(int i=x;i<x+8;i++)
    {
        for(int j=y;j<y+8;j++)
        {
            DrawPoint(i,j);
        }
    }
}

void DrawMap()
{
    DrawBlock(24,0);    
    DrawBlock(32,0);
    DrawBlock(40,0);
    DrawBlock(56,0);
        
    DrawBlock(0,8);
    DrawBlock(8,8);
    DrawBlock(56,8);

    DrawBlock(24,16);
    DrawBlock(32,16);
    DrawBlock(40,16);
    DrawBlock(56,16);

    DrawBlock(0,24);
    DrawBlock(16,24);
    DrawBlock(24,24);
    DrawBlock(56,24);

    DrawBlock(16,32);
    DrawBlock(40,32);

    DrawBlock(0,40);
    DrawBlock(16,40);
    DrawBlock(32,40);
    DrawBlock(40,40);
    DrawBlock(56,40);
    
    DrawBlock(40,48);
    DrawBlock(56,48);
    
    DrawBlock(0,56);
    DrawBlock(8,56);
    DrawBlock(16,56);
    DrawBlock(32,56);
    DrawBlock(40,56);
    DrawBlock(56,56);


}
void set_arr(int arr[][64])
{
        
    set_arr_block(arr,24,0);    
    set_arr_block(arr,32,0);
    set_arr_block(arr,40,0);
    set_arr_block(arr,56,0);


        
    set_arr_block(arr,0,8);
    set_arr_block(arr,8,8);
    set_arr_block(arr,56,8);


    set_arr_block(arr,24,16);
    set_arr_block(arr,32,16);
    set_arr_block(arr,40,16);
    set_arr_block(arr,56,16);


    set_arr_block(arr,0,24);
    set_arr_block(arr,16,24);
    set_arr_block(arr,24,24);
    set_arr_block(arr,56,24);

    set_arr_block(arr,16,32);
    set_arr_block(arr,40,32);
    
    set_arr_block(arr,0,40);
    set_arr_block(arr,16,40);
    set_arr_block(arr,32,40);
    set_arr_block(arr,40,40);
    set_arr_block(arr,56,40);
    
    set_arr_block(arr,40,48);
    set_arr_block(arr,56,48);
    
    set_arr_block(arr,0,56);
    set_arr_block(arr,8,56);
    set_arr_block(arr,16,56);
    set_arr_block(arr,32,56);
    set_arr_block(arr,40,56);
    set_arr_block(arr,56,56);
}


void check_change(int*buff,float*buff_cur,int arr[128][64])
{
    if(abs((int)buff_cur[1]-(int)buff[1])>3||abs((int)buff_cur[0]-(int)buff[0])>3)
    {
        if(buff_cur[0]>buff[0])
        {
            buff_cur[0]=buff[0]+2;
        }
        else
        {
            buff_cur[0]=buff[0]-2;
        }
        if(buff_cur[1]>buff[1])
        {
            buff_cur[1]=buff[1]+2;
        }
        else
        {
            buff_cur[1]=buff[1]-2;
        }
    }
    int flag=0;
    int flag2=0;
    
    if((int)buff_cur[1]-3<0)//x
    {
        int a=(int)buff_cur[1]-3;
        buff[1]=(int)buff_cur[1]-a;
        buff[0]=(int)buff_cur[0];
        flag=1;
    }
    if((int)buff_cur[0]-3<0)//y
    {
        int a=(int)buff_cur[0]-3;
        buff[0]=(int)buff_cur[0]-a;
        buff[1]=(int)buff_cur[1];
        flag=1;
    }
    if((int)buff_cur[1]+3>=128)
    {
        int a=(int)buff_cur[1]-127;
        buff[1]=(int)buff_cur[1]-a;
        buff[0]=(int)buff_cur[0];
        flag=1;
    }   
    if((int)buff_cur[0]+3>=64)
    {
        int a=(int)buff_cur[0]-63
                  buff[0]=(int)buff_cur[0]-a;
        buff[1]=(int)buff_cur[1];
        flag=1;
    }


    if(flag)return;

    if(arr[(int)buff_cur[1]][(int)buff_cur[0]-3]==1)
    {
        while(1)
        {
            (int)buff_cur[0]++;
            if(arr[(int)buff_cur[1]][(int)buff_cur[0]-3]==0)break;  

        }
        buff[0]=(int)buff_cur[0];
        buff[1]=(int)buff_cur[1];
        flag2=1;
    }

    if(arr[(int)buff_cur[1]][(int)buff_cur[0]+3]==1)
    {
        while(1)
        {
            (int)buff_cur[0]--;
            if(arr[(int)buff_cur[1]][(int)buff_cur[0]+3]==0)break;  

        }
        buff[0]=(int)buff_cur[0];
        buff[1]=(int)buff_cur[1];
        flag2=1;
    }

    if(arr[(int)buff_cur[1]-3][(int)buff_cur[0]]==1)
    {
        while(1)
        {
            (int)buff_cur[1]++;
            if(arr[(int)buff_cur[1]-3][(int)buff_cur[0]]==0)break;  

        }
        buff[1]=(int)buff_cur[1];
        buff[0]=(int)buff_cur[0];
        flag2=1;
    }

    if(arr[(int)buff_cur[1]+3][(int)buff_cur[0]]==1)
    {
        while(1)
        {
            (int)buff_cur[1]--;
            if(arr[(int)buff_cur[1]+3][(int)buff_cur[0]]==0)break;  

        }
        buff[1]=(int)buff_cur[1];
        buff[0]=(int)buff_cur[0];
        flag2=1;
    }

    if(flag2)return;        
    
    buff[0]=buff_cur[0];
    buff[1]=buff_cur[1];
}
void Labyrinth()
{
    oled_init();
    adxl345_Init();
    int arr[128][64];
    set_arr(arr);
    int buff[3]={5,3,0};
    float buff_cur[3];
    while(1)
    {
        ColorTurn(TURNOVER_COLOR);
        DisplayTurn(NORMAL_DISPLAY);
        DrawMap();
        Ball_Point((int)buff[1],(int)buff[0]);
        Refresh();
        Ball_Clear((int)buff[1],(int)buff[0]);
        adxl345_GetData(buff_cur);
        //修正
        check_change(buff,buff_cur,arr);
    }
}

给出部分源码是因为这个实验是在Ascend310项目之上的,调用了一些外设的接口,给出来是在是太麻烦,主要是提供思路。

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱写代码的刚子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值