八行代码实现贪吃蛇游戏,祝所有工控大朋友节日快乐 点击:990 | 回复:6



干工控V

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:8帖 | 20回
  • 年度积分:11
  • 历史总积分:172
  • 注册:2016年6月23日
发表于:2021-05-31 21:06:18
楼主

一个贪吃蛇,就着上下左右按键已经模糊的按键就能玩一个下午,那是童年美好的记忆。或许我们再也找不回当初那简单的快乐,但愿你长成一个优秀的大人,也愿你永远保有童真,儿童节快乐,工控大朋友们!

诺基亚贪吃蛇

为了最简洁化复刻贪吃蛇游戏,此次使用ST语言编程,将GX Work3缓存存储器监视界面当作游戏界面,使用初始化赋值功能,语句也尽量简略,最终八行代码实现完整的贪吃蛇游戏体验。

Ⅰ、效果展示

图中展示为倍速播放后效果,触摸屏只当作方向按键使用,也可以直接再GX Work3中更改方向软元件的值来调整方向,不过这操作就很反人类了。

仿真GIF

Ⅱ、实现原理

贪吃蛇程序核心逻辑如下:

2.1、游戏界面分辨率是16*21,蛇和食物都是由1个bit点表示,食物会闪烁;

2.2、初始化时蛇的长度是1,蛇初始的移动的方向是上,用一个一维数组aSnakeData代表蛇身数据,用wSnakeLength表示蛇身长度,数组的第一个坐标是蛇头位置,aSnakeData[wSnakeLength]表示蛇尾位置;

2.3、正常移动时根据移动方向将新蛇头位置置位,将蛇尾位置复位,如果蛇吃到了食物,即蛇头的坐标等于食物的坐标,此次不复位蛇尾,就产生了蛇长度增加的效果;

2.4、食物被吃掉后,随机在空的位置再生成一个;

2.5、当蛇撞上自身或墙壁,游戏结束,用新蛇头的位置是否已被置位来判断的。

贪吃蛇编程逻辑

Ⅲ、程序调试

//蛇身移动
MOVP(SM415,(aSnakeData[0]-K16)*BOOL_TO_WORD(wDirection=0)+(aSnakeData[0]+K16)*BOOL_TO_WORD(wDirection=1)+(aSnakeData[0]+K1)*BOOL_TO_WORD(wDirection=2)+(aSnakeData[0]-K1)*BOOL_TO_WORD(wDirection=3),wSnakeHead);
WSFLP(SM415,wSnakeHead,K50,K1,aSnakeData[0]);

//是否吃到果实
DMOVP(SM415 AND wSnakeHead=wFruitCache,WORD_TO_DWORD(wSnakeLength+K1),D31);

//果实新生
FMOV(MEF(SM415) AND INV(aDisplay[ABS(SD420) MOD K304]) AND wFruitCache=K0,ABS(SD420) MOD K304,K2,D32);

//重新开局,是否吃到墙壁自己
BMOV(SM402 OR MEP(SM415 AND aDisplay[wSnakeHead] AND wFruitCache>K0),D100,K90,D0);

//蛇尾消除
RST(MEF(SM415) AND wFruitCache>K0,aDisplay[aSnakeData[wSnakeLength]]);

//蛇头置位
SET(MEF(SM415),aDisplay[wSnakeHead]);

//果实闪烁
OUT(wFruitCache>K0 AND SM412,aDisplay[wFruitCache]);

Ⅳ、源码分享

欢迎加下好友,程序如果Bug,烦请指出,有其它想法意见,欢迎交流探讨🤝


正在下载,请等待……
下载附件需1积分!



楼主最近还看过



历历在木

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 98回
  • 年度积分:10
  • 历史总积分:76
  • 注册:2021年7月18日
发表于:2022-05-20 12:15:45
1楼

谢谢分享,楼主右边那个控制界面是什么,怎么可以直接在电脑上和GX work3联动控制

w12工控怪

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 249回
  • 年度积分:99
  • 历史总积分:192
  • 注册:2021年7月01日
发表于:2022-07-26 14:02:10
2楼

很实用的东西,正需要呢,谢谢楼主分享!

LBX112233

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 713回
  • 年度积分:214
  • 历史总积分:601
  • 注册:2012年5月10日
发表于:2022-07-27 11:06:27
3楼

吊。。谢谢分享,,学习到了。。

guoket

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 1522回
  • 年度积分:0
  • 历史总积分:699
  • 注册:2011年10月09日
发表于:2022-07-27 13:56:58
4楼

学习一下,感谢分享!

孙饕

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 30回
  • 年度积分:0
  • 历史总积分:53
  • 注册:2012年3月04日
发表于:2024-10-07 15:52:03
5楼

学习了


回复本条

    

a363344238

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 24回
  • 年度积分:18
  • 历史总积分:21
  • 注册:2009年2月27日
发表于:2024-10-11 10:41:22
6楼

谢谢楼主分享

回复本条

    

热门招聘
相关主题

官方公众号

智造工程师