0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【地平线旭日X3派试用体验】保姆级配置git与使用+C语言编写贪吃蛇

地瓜机器人 ? 2022-08-09 16:27 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

安装配置git

一、更新软件源

  • sudo apt update

二、安装git

  • sudo apt install git -y
pYYBAGLyE4uAQSB6AAArFHt6CzA433.png

  • 成功安装git如图:
pYYBAGLyE4uAPS_WAAEbNiRmpBg353.png

三、配置git

1、设置账号

  • git config --global user.name "name" (github官网注册的用户名)

2、设置邮箱

  • git config --global user.email "email" (gitub官网注册绑定的邮箱)

3、查看配置

  • git config --list

4、生成SSH秘钥

  • ssh-keygen -t rsa -C "注册绑定的邮箱"

(输入两次密码后,提示的地方直接按Enter,成功生成如下图所示)

poYBAGLyE4uAb4oeAACfB5RXrQE463.png

5、查看生成的秘钥

  • cd
  • cat id_rsa.pub (秘钥命名可能有不同,但一定要是pub文件)

poYBAGLyE4yAbP0CAAB6RCbihMg334.png

6、github配置SSH公钥

  • 登录github官网,网址:https://github.com/
  • 右上角登陆后点击settings->SSH and GPS keys->New SSH key
poYBAGLyE4uAfp1-AAD1BzlKZXM334.png
  • 将id_rsa.pub文件中的生成的内容全部复制到key中,输入title,点击Add SSH key即可
poYBAGLyE4uAbCGXAADdSupH6qI408.png

下载代码

  • git clone “仓库地址"
pYYBAGLyE4yAUA0OAABP_Lze-0s821.png

本地文件推送到远程仓库

1、查询状态

  • git status

2、添加文件到缓存区

  • git add *

3、再次查询状态(文件由红变成绿色,说明已转移至缓存区)

  • git status
pYYBAGLyE4yABU5BAABktsc4qQ0337.png

4、提交到本地仓库

  • git commit -m "source"(”source“是注释)

5、添加本地仓库推送至远程仓库的地址

  • git remote add origin +仓库地址

6、核实远程仓库地址

  • git remote -v

7、推送至远程仓库

  • git push -u origin master
poYBAGLyE4yAFq5DAADxZmxabe8055.jpg

pYYBAGLyE42AC6EOAABnD1-0qlk178.png

注:上文提到的仓库地址需要自行创建获取。

pYYBAGLyE42ARh-4AABSAPrMgUY926.png

C语言编写贪吃蛇程序

1、编写代码

  • vim tanchishe.c (使用vim工具编辑,进入后按esc按键后再按i或者l切换编辑模式)
  • 编辑完成后,按下esc按键,再依次输入:wq保存并推出
#include #include #include #include #include #include #include #include #include #define MOVEUP(x) printf("\033[%dA", (x)) static struct termios ori_attr,cur_attr;static inline int tty_reset();static inline int kbhit();static inline int tty_set();#define ROW_MAX 20#define COL_MAX 50#define SPEED_MAX 500#define SPEED_MIN 125#define SNAKELEN 3#define SNAKE_HEAD '@'#define SNAKE_BODY '#'#define FOOD '$'#define LEFT 'a'#define RIGHT 'd'#define UP 'w'#define DOWN 's'#define EAT_SPACE 1#define EAT_FOOD 2#define EAT_BODY 0char dc = '0';char bodyDc = '0'; float speed = SPEED_MAX ;//ms int snake_length = 0; int grade  = 1;  struct Location {     int row;     int col; };  typedef struct ske {     struct Location place;     struct ske *next; }Snake;  struct Location food; Snake *head = NULL;  char str[ROW_MAX][COL_MAX]; void Init_str();void Display();void Init_food();void Init_snake();void Wait_game();int Snake_move();void moveToUp();void moveToDown();void moveToLeft();void moveToRight();void snakeShow();void foodShow();void reDisplay();void GameOver();void addBody(int,int);void moveBody(int,int);void Delay();int isUpgrade();int Upgrade();void releaseSnake();void PrintRule(); int main() {     int again = 0;         do     {//printf("\033[2J");         int flag = 0;again = 0;         Init_str();         Init_snake();         Init_food();         Display();         Wait_game();         while(1)         {             flag = Snake_move() ;     if(flag == EAT_BODY)     {GameOver();     }             reDisplay();             Delay();                          if(isUpgrade())             {again = Upgrade();                      break;             }         }     }while( again == 1); }void PrintRule(){    printf("**************************************************\n");    printf("* 游戏规则:【@】表示蛇头,【$】表示食物,【#】  *\n");    printf("* 表示蛇的身体。每吃到一个食物蛇的身体加长一个, *\n");    printf("* 吃到蛇身或撞到墙,则游戏结束                   *\n");    printf("* 按wsad可以控制蛇移动方向,分别表示上下左右方向 *\n");    printf("* 请按wsad键开始游戏                             *\n");    printf("**************************************************\n");}void GameOver(){    printf("Game Over!!!\n");    printf("you play %d grade,and score is :%d\n",grade,(grade-1)*2000+(snake_length-1)*100);    exit(1);}int Upgrade(){    if( speed <= SPEED_MIN)    {printf("Congratulations!!! you win.\n");exit(1);    }    else    { printf("Play next grade ? < y / n >\n");printf("Else press  to exit.\n ");grade ++ ;char ch ;do{    ch = getch();    ch = tolower(ch);    if(ch == 'y' )    {releaseSnake();snake_length = 0;speed /= 2;      return 1;    }    else if(ch == 'n')    {printf("Play this grade.\n");return 1;    }    else if(ch == 27)exit(1);}while(ch != 'y' || ch != 'n');    }}void releaseSnake(){    Snake *p = head;    while(head != NULL)     {p = head;head = head->next;free(p);    }}int isUpgrade(){    return snake_length == SNAKELEN ? 1:0;}void Delay(){    unsigned long int tick1 = clock();    char ch;    while(1000*(clock() - tick1 )/CLOCKS_PER_SEC <= speed)    {ch = control();ch = tolower(ch);if(ch == UP){    if(dc != DOWN)    {    dc = ch;        break;    }}else if(ch == DOWN){    if(dc != UP)    { dc = ch ;break;    }}else if( ch == LEFT){    if(dc != RIGHT)    {dc = ch;break;    }}else if(ch == RIGHT){    if(dc != LEFT)    { dc = ch;break;    }}    }}void addBody(int x, int y){    Snake *p = (Snake *)malloc(sizeof(Snake));    if(p == NULL)    {printf("Error!!!Apply Snake *p failed\n");exit(1);    }    p->place.row = x;    p->place.col = y;    p->next = head->next;    head->next = p;    snake_length ++;   }void foodShow(){    str[food.row][food.col] = FOOD;}void snakeShow(){    Snake *p = head;    while(p != NULL)    {if(p == head)    str[p->place.row][p->place.col] = SNAKE_HEAD ; else    str[p->place.row][p->place.col] = SNAKE_BODY ; p = p->next;     }}void reDisplay(){    Init_str();    foodShow();    snakeShow();     Display(); }int Snake_move(){    int x = head->place.row;    int y = head->place.col;    switch(dc)    {case UP :    if(dc != DOWN )moveToUp();    break;case DOWN :    if(dc != UP )moveToDown();    break;case LEFT :    if(dc != RIGHT )moveToLeft();    break;case RIGHT :    if(dc != LEFT)moveToRight();    break;    }    bodyDc = dc;    int i = head->place.row;    int j = head->place.col;    if(str[i][j] == SNAKE_BODY )    {return EAT_BODY;    }    else if(str[i][j] == FOOD )    {addBody(x,y);Init_food();return EAT_FOOD;    }    else if(str[i][j] == ' ')    {moveBody(x,y);return EAT_SPACE;    }}void moveBody(int x,int y){    Snake *p = head ,*pre = NULL;    if(head->next != NULL)    {while(p->next != NULL){       pre = p;    p = p->next; }if(pre != head){    p->place.row = x;    p->place.col = y;    p->next = head->next;    head->next = p;    pre->next  = NULL ;    }else{    p->place.row = x;    p->place.col = y;}    }}void moveToRight(){    int i = head->place.row;    int j = head->place.col;    dc = RIGHT ;    if(str[i][j+1] != '|')    {j++ ;    }    else      {GameOver();    }    head->place.row = i;    head->place.col = j;}void moveToLeft(){    int i = head->place.row;    int j = head->place.col;    dc = LEFT ;    if(str[i][j-1] != '|')    {j-- ;    }    else      {GameOver();    }    head->place.row = i;    head->place.col = j;}void moveToUp(){    int i = head->place.row;    int j = head->place.col;    dc = UP ;    if(str[i-1][j] != '-')    {i-- ;    }    else      {GameOver();    }    head->place.row = i;    head->place.col = j;}void moveToDown(){    int i = head->place.row;    int j = head->place.col;    dc = DOWN ;    if(str[i+1][j] != '-')    {i++ ;    }    else      {GameOver();    }    head->place.row = i;    head->place.col = j;}/*void moveToRight(){    int i = head->place.row;    int j = head->place.col;    dc = RIGHT ;    if(str[i][j+1] != '|')    {j++ ;    }*void moveToRight(){    int i = head->place.row;    int j = head->place.col;    dc = RIGHT ;    if(str[i][j+1] != '|')    {j++ ;    }*void moveToRight(){    int i = head->place.row;    int j = head->place.col;    dc = RIGHT ;    if(str[i][j+1] != '|')    {j++ ;    }    else      {j = 1;    }    head->place.row = i;    head->place.col = j;}void moveToLeft(){    int i = head->place.row;    int j = head->place.col;    if(str[i][j-1] !=  '|')    {dc = LEFT ;j--;    }    else    {dc = LEFT ;j = COL_MAX - 2;    }    head->place.row = i;    head->place.col = j;}void moveToDown(){    int i = head->place.row;    int j = head->place.col;    if(str[i+1][j] != '-')    {dc = DOWN ;i++;    }    else     {dc = DOWN ;i = 1;    }    head->place.row = i;    head->place.col = j;    }void moveToUp(){    int i = head->place.row;    int j = head->place.col;    if(str[i-1][j] != '-')    {dc = UP;i--;    }    else    {dc = UP ;i = ROW_MAX -2;    }    head->place.row = i;    head->place.col = j;}*/void Wait_game() {     char ch ;     do     {         ch = getch();         ch = tolower(ch);     }while(ch != UP && ch != DOWN && ch != LEFT && ch != RIGHT );     dc = ch;     bodyDc = dc; } void Init_food() {     unsigned long int seed = time(NULL);     srand(seed+1);     while(1)     {food.row = rand() % ( ROW_MAX - 2) + 1;food.col = rand() % ( COL_MAX - 2) + 1;Snake *p = head;int flag = 1;while(p != NULL){    if(food.row == p->place.row && food.col == p->place.col)    {flag = 0;break;    }    p = p->next;}if(flag == 1)     break;     }     str[food.row][food.col] = FOOD; } void Init_str() {     int i,j;     for(i=0;iplace.row = rand() % ( ROW_MAX - 2) + 1;head->place.col = rand() % ( COL_MAX - 2) + 1;head->next = NULL;str[head->place.row][head->place.col] = SNAKE_HEAD ;snake_length ++ ;     } } /***********   about string handle function  ***********/int control(){int flag = tty_set();int key = 0;if(kbhit())key = getchar();if(flag == 0)tty_reset();return key;}static inline int tty_reset(){if(tcsetattr(STDIN_FILENO,TCSANOW,&ori_attr) != 0)return -1;return 0;}static inline int tty_set(){if(tcgetattr(STDIN_FILENO,&ori_attr))return -1;memcpy(&cur_attr,&ori_attr,sizeof(cur_attr));cur_attr.c_lflag &= ~ICANON;cur_attr.c_lflag &= ~ECHO;cur_attr.c_cc[VMIN] = 1;cur_attr.c_cc[VTIME] = 0;if(tcsetattr(STDIN_FILENO,TCSANOW,&cur_attr) != 0)return -1;return 0;}static inline int kbhit(){fd_set rfds;struct timeval tv;int retval;FD_ZERO(&rfds);FD_SET(0,&rfds);tv.tv_sec = 0;tv.tv_usec = 0;retval = select(1,&rfds,NULL,NULL,&tv);if(retval == -1){perror("select()");return 0;}else if(retval)return 1;elsereturn 0;}int getch(void) {        int c=0;        struct termios org_opts, new_opts;        int res=0;        //-----  store old settings -----------        res=tcgetattr(STDIN_FILENO, &org_opts);        //---- set new terminal parms --------        memcpy(&new_opts, &org_opts, sizeof(new_opts));        new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);        tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);        c=getchar();            //------  restore old settings ---------        res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);        return c;}

2、编译代码

  • gcc tanchishe.c
poYBAGLyE4yAGTQOAADgSFw9c5U314.png

3、运行代码

  • ./a.out
poYBAGLyE42AYr-gAACauv24qZ0059.png

小结:

经过了几周的试用,刚开始的时候固件可能还未完善,个别功能无法开启或例程无法使用,折腾了我好几天,这在后面的维护更新后都得到了解决。这里给地平线的工作人员点个赞,遇到问题他们会热心的解答,出现异常时也有及时处理。总体来说,旭日X3派是一块面向入门嵌入式非常不错的开发板,X3派具有不错的处理与易于扩展的能力,可以满足嵌入式的低功耗、无线连接和安全等特性。

本文转自地平线开发者社区

原作者:Zeee

原链接:https://developer.horizon.ai/forumDetail/98129540173361632

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    88

    文章

    35760

    浏览量

    282481
  • 人工智能
    +关注

    关注

    1810

    文章

    49221

    浏览量

    251553
  • 地平线
    +关注

    关注

    0

    文章

    400

    浏览量

    15629
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    行深智能推出基于地平线征程6M的L4自动驾驶解决方案

    近日,智慧物流产品供应商行深智能正式推出面向城市末端物流场景的L4自动驾驶解决方案。该方案基于地平线地平线机器人-W,9660.HK)征程6M车载智能计算方案开发,是首个基于征程6系列计算方案打造的物流场景自动驾驶方案,标志
    的头像 发表于 07-22 10:00 ?668次阅读

    Arm携手地平线推动汽车智能化变革

    近日,地平线在上海举办了 2025 年度产品发布会,推出了 L2 城区辅助驾驶系统——地平线 HSD,不仅集中展示了自身领先的技术实力,更深刻诠释了汽车智能化加速普及的产业发展趋势,成为上海车展的前哨。地平线征程 6P 作为技术
    的头像 发表于 04-28 14:28 ?852次阅读

    地平线与博世达成战略合作

    近日,地平线正式宣布与全球领先的汽车技术与服务供应商博世达成战略合作。根据协议,博世将基于地平线征程6B打造新一代多功能摄像头,并基于征程6E/M打造博世纵横辅助驾驶升级版。目前,基于征程6系列开发的博世新一代多功能摄像头与博世纵横辅助驾驶升级版均获得多家车企的项目定点。
    的头像 发表于 04-27 13:43 ?700次阅读

    地平线城区辅助驾驶系统HSD解读

    近日,在2025地平线年度产品发布会上,地平线城区辅助驾驶系统HSD正式发布。作为国内首个软硬结合全栈开发的城区辅助驾驶系统,地平线HSD搭载当前最高性能的国产智驾计算方案征程6P,采用一段式端到端
    的头像 发表于 04-22 14:44 ?773次阅读

    地平线推出L2城区辅助驾驶系统HSD

    近日,以“征程所向,远超想象”为主题的2025地平线年度产品发布会在上海滴水湖举行。地平线重磅推出L2城区辅助驾驶系统——地平线HSD,构建体验“类人”、用户“信任”的城区辅助驾驶新解。同时,
    的头像 发表于 04-19 09:14 ?556次阅读

    地平线与上汽集团深化战略合作

    近日,上汽集团举办“懂车更懂你·2025上汽之夜”活动,地平线创始人兼CEO余凯博士受邀发表主旨演讲。作为地平线第一大机构股东,上汽集团在发布会上表示将继续拓展与地平线等头部企业的合作,借助各自领域的优势资源互补,打造拥有全新体
    的头像 发表于 04-12 09:07 ?627次阅读

    让人欲罢不能树莓贪吃蛇掌机!

    经典游戏《贪吃蛇》的掌机,并为其设计了定制的3D打印外壳。这款掌机基于配备RP2350处理器的最新型号RaspberryPiPico2打造。与常规LCD或OLED
    的头像 发表于 03-25 09:21 ?331次阅读
    让人欲罢不能树莓<b class='flag-5'>派</b><b class='flag-5'>贪吃蛇</b>掌机!

    知行科技与地平线达成战略合作

    近日,知行科技与地平线正式签署了战略合作协议,标志着双方在智能驾驶技术领域的合作迈出了坚实的一步。 根据协议内容,双方将共同致力于智能驾驶技术的研发与应用。特别是在2025年下半年,基于地平线征程6
    的头像 发表于 01-23 10:52 ?1913次阅读

    地平线SuperDrive相关问答

    近日,地平线SuperDrive智驾百人团体验活动圆满落幕,现场130余家媒体对地平线SuperDrive表现出浓厚的兴趣并提出了诸多问题。对此,地平线特意整理了大家提出的典型问题并进行解答,希望能帮助大家更全面地了解这套拟人的
    的头像 发表于 01-21 10:15 ?554次阅读

    地平线SuperDrive首发三大黑科技,决胜智能化竞争下半场

    地平线创始人兼CEO余凯表示:“在2025年,地平线智能计算方案即将迈过1000万量产大关,持续引领中国智驾量产落地、推动智驾生态繁荣生长,‘向下扎深根’。与此同时,地平线SuperDrive及征程
    的头像 发表于 01-15 09:12 ?1616次阅读
    <b class='flag-5'>地平线</b>SuperDrive首发三大黑科技,决胜智能化竞争下半场

    地平线SuperDrive首发三大黑科技

    近日,“Beyond the Horizon 地平线智驾科技畅想日”在上海举办,回顾地平线以软硬结合技术实力取得的量产创新成果,展望2025高阶智驾爆发之年。同时,“SuperDrive智驾百人团体验活动”在上海静安区繁华路段开展,首发三大智驾黑科技,打造拟人高效、“10
    的头像 发表于 01-14 13:56 ?607次阅读

    地平线荣获比亚迪“最佳合作伙伴奖”

    近日,比亚迪举办2024年比亚迪新能源汽车核心供应商大会。在此次大会上,地平线荣获“最佳合作伙伴奖”,成为唯一获得该殊荣的智驾方案供应商。该奖项高度肯定了地平线在智驾技术和量产能力方面的突出贡献。地平线创始人兼CEO余凯受邀出席
    的头像 发表于 11-06 14:15 ?881次阅读

    智驾科技企业地平线登陆港交所

    近日,智驾科技企业地平线地平线机器人-W,股票代码:9660.HK)在香港交易所主板成功挂牌上市,募资总额高达54.07亿港元,成为港股今年最大的科技IPO。
    的头像 发表于 10-28 16:37 ?730次阅读

    ETAS支持地平线征程6 AUTOSAR版本发布

    地平线于2024年北京车展期间推出了覆盖自动驾驶全场景的征程6产品。征程6是地平线新一代家族系列产品,能够覆盖从主动安全ADAS到城区全场景NOA的智能驾驶需求。
    的头像 发表于 10-15 17:34 ?1679次阅读

    地平线Journey 3的电源设计

    电子发烧友网站提供《地平线Journey 3的电源设计.pdf》资料免费下载
    发表于 09-04 10:48 ?0次下载
    <b class='flag-5'>地平线</b>Journey <b class='flag-5'>3</b>的电源设计