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

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

3天内不再提示

算法的学习与贪吃蛇的实现框架

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-09-05 15:07 次阅读

一. 简介

将前面几篇文章介绍的几个小游戏整合在一起,加入了简陋的数字时钟和图片显示功能,合在一起作为一个小项目分享给大家,希望大家喜欢。只需要两个外设即可实现----显示屏和红外控制模块

二. 功能介绍

作为一个小项目来说,功能还是比较齐全的。 1. 上电开机后,会进行一段开机动画的加载。 2. 然后是主界面的显示,一共包括三个部分,时钟、游戏和相册。 3. 通过红外按键进行选择。 4. 时钟 :一个简单的时分秒的显示(#^.^#)。 5. 游戏 :游戏下面又有一个界面显示,用来选择对应的游戏,贪吃蛇,俄罗斯方块和2048,都是一些常规的游戏。 6. 相册:一个简单的二值相册(经过边缘检测后的图像)显示,包括了我预先存储的三张图片。 7. 贪吃蛇:贪吃蛇部分有必要单独拿出来说说,其中加入了算法部分,利用A*算法,可以自动寻找到食物的位置,并指导贪吃蛇的移动。算法的学习与贪吃蛇结合也是一个值得学习的点,同时也是一个难点。 以上就是本次小项目全部功能了。

三. 实现框架介绍

这次的设计为裸机程序,所以只能采用前后台系统的方式来实现。

前台为我们的应用程序,后外为我们的中断回调函数,里面主要用来红外模块数据的接收,以及时间的产生(贪吃蛇的移动以及俄罗斯方块的下落)。

前台程序简要介绍

以贪吃蛇部分为例,进入到贪吃蛇部分后,就是清屏将上一个部分的显示清除掉,然后是贪吃蛇的初始化以及使能定时器4,用来记录数据,然后就是一个while循环了。根据不同的按键状态调用不同的函数。退出这个部分也很简单,修改当前的状态,然后break就可以了。其他部分都是如此。

  else if(CurrMode == Snake)  //贪吃蛇游戏    {      LCDDMAFullOn(BackGround);      SnakeInit();      TIM_Cmd(TIM4,ENABLE);      while(1)      {        if(KEYState == KEYLEFT)          DirectionChange(MoveLeft);        else if(KEYState == KEYRIGHT)          DirectionChange(MoveRight);        else if(KEYState == KEYUP)          DirectionChange(MoveUp);        else if(KEYState == KEYDOWN)          DirectionChange(MoveDown);        else if(KEYState == KEYRETURN)        {          CurrIndex = 0;          SnakeDestory();          TIM_Cmd(TIM4,DISABLE);          CurrMode = Main;          break;        }      }    }

2. 后台程序简要介绍

本次主要用到了两个后台程序,一个是红外数据的接收

void EXTI0_IRQHandler(void){  if(EXTI_GetITStatus(EXTI_Line0) != RESET)  {    uint8_t data;    data = InfraredDataRecv();    if(data == InfraredLeft)        KEYState = KEYLEFT;    else if(data == InfraredRight)        KEYState = KEYRIGHT;    else if(data == InfraredUp)        KEYState = KEYUP;    else if(data == InfraredDown)        KEYState = KEYDOWN;    else if(data == InfraredReturn)        KEYState = KEYRETURN;    delay_ms(10);    /*清除标志位 */    EXTI_ClearITPendingBit(EXTI_Line0);  }}
另外一个是定时器中断,其作用可以看注释

void TIM4_IRQHandler(void){    if(TIM_GetITStatus(TIM4,TIM_IT_Update) == SET)   //判断是否发生中断    {
       if(CurrMode == Snake)SnakeGame();//蛇的移动        else if(CurrMode == Tetris)        {            TetrisFlag = 1;   //俄罗斯方块下落标志        }        else if(CurrMode == Clock)        {DClockFlag=1;//数字时钟加一标志        }       TIM_ClearITPendingBit(TIM4,TIM_IT_Update);    //清除中断标识    }}
审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 框架
    +关注

    关注

    0

    文章

    297

    浏览量

    17045
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79552
  • 数字时钟
    +关注

    关注

    2

    文章

    144

    浏览量

    20118

原文标题:STM32小项目分享

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    贪吃蛇

    本帖最后由 eehome 于 2013-1-5 09:53 编辑 贪吃蛇
    发表于 05-02 13:12

    贪吃蛇游戏

    编的简单的贪吃蛇游戏
    发表于 05-05 16:40

    vga贪吃蛇 verilog

    FPGA vga贪吃蛇 verilog
    发表于 06-11 14:05

    贪吃蛇

    新手参考资料制作的贪吃蛇游戏,有很多不足,撞自己身体实现不了,还有游戏结束的Game Over !实现不了,求大神指导
    发表于 04-11 13:30

    贪吃蛇游戏

    贪吃蛇游戏的下载
    发表于 03-04 18:24

    基于labview设计的 贪吃蛇程序分享

    labview设计的 贪吃蛇
    发表于 06-08 22:05

    贪吃蛇小程序

    LV 2011版编写的贪吃蛇小程序,可以鼠标操作也可以键盘操作。
    发表于 11-09 15:21

    贪吃蛇游戏的电路实现

    最近论坛好冷清,在此发一贴暖暖身,回到正题,大家都玩过“贪吃蛇”游戏,用代码实现该游戏想必难不倒大神,在网上也有一大堆针对该游戏的代码实现,如果摆脱代码,用硬件来实现
    发表于 11-19 17:52

    贪吃蛇游戏

    Labview制作贪吃蛇游戏,值得学习研究
    发表于 09-07 21:39

    基于51单片机的贪吃蛇游戏设计 精选资料分享

    的理解,编写程序实现贪吃蛇的有效控制;(2)通过对51单片机硬件的学习,学会运用面包板,独立按键、点阵屏等,完成对完整电路的搭建过程;(3)通过对Proteus仿真软件的学习
    发表于 07-16 06:48

    基于51单片机的贪吃蛇游戏 精选资料分享

    1.简介本设计为一款贪吃蛇游戏,显示器采用8*8点阵,主控制器采用51单片机,并通过按键实现对游戏的操作。2.贪吃蛇算法介绍吃游戏
    发表于 07-21 06:21

    【FPGA DEMO】Lab 9:贪吃蛇小游戏

    ` 本帖最后由 zhangyue510 于 2021-7-30 16:32 编辑 项目名称:贪吃蛇小游戏具体要求:在Perf-V实现贪吃蛇小游戏的运行。系统设计:贪吃蛇是一款经典游
    发表于 07-30 15:53

    怎么实现基于51单片机的贪吃蛇游戏的设计?

    怎么实现基于51单片机的贪吃蛇游戏的设计?
    发表于 11-04 07:07

    基于51单片机的OLED贪吃蛇设计资料分享

    一、成果展示二、软件部分1.OLED与SSD1306使用7针OLED引脚图OLED指令OLED与贪吃蛇在OLED上打印像素点在OLED上打印汉字和数字2.贪吃蛇的基本算法地图食物3.
    发表于 11-18 09:02

    基于stm32的贪吃蛇小游戏的设计资料分享

    目录前言一、主要功能二、主要模块1.贪吃蛇链表2.ADC3.定时器中断三、实际显示效果前言自学完电阻触摸屏之后做的小项目。我采用了C语言链表的方式来形成贪吃蛇。利用相关封装好的函数,将其移植在了野火
    发表于 02-21 07:27