您现在所在的是:

三菱Mitsubishi

回帖:8个,阅读:1858 [上一页] [1] [下一页]
50
干工控
文章数:5
年度积分:50
历史总积分:50
注册时间:2021/2/20
发站内信
发表于:2021/5/31 21:12:15
#0楼
一个贪吃蛇,就着上下左右按键已经模糊的按键就能玩一个下午,那是童年美好的记忆。或许我们再也找不回当初那简单的快乐,但愿你长成一个优秀的大人,也愿你永远保有童真,儿童节快乐,工控大朋友们!

![诺基亚贪吃蛇](https://pic.imgdb.cn/item/60b3cf2239f6859bc23d2ed8.jpg)

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

#### Ⅰ、效果展示

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

![仿真GIF](https://pic.imgdb.cn/item/60b3cf2239f6859bc23d2efb.gif)

#### Ⅱ、实现原理

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

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

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

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

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

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

![贪吃蛇编程逻辑](https://pic.imgdb.cn/item/60b3d2b039f6859bc266ee18.png)

#### Ⅲ、程序调试

```python
//蛇身移动
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,烦请指出,有其它想法意见,欢迎交流探讨??**

附件:
[本地下载]
20912
bnnyygy
文章数:5990
年度积分:1578
历史总积分:20912
注册时间:2012/3/15
发站内信
2018论坛分享达人
发表于:2021/5/31 21:30:30
#1楼
很强了。


佩服
2103
久久维修
文章数:136
年度积分:50
历史总积分:2103
注册时间:2009/7/9
发站内信
发表于:2021/6/1 3:32:05
#2楼
很有敬业精神!
此帖发自手机工控论坛
39261
jint 管理员
文章数:20718
年度积分:771
历史总积分:39261
注册时间:2007/8/30
发站内信
发表于:2021/6/1 9:07:59
#3楼
支持
温馨提示:
电话:0755-26546361
邮箱:blog@gkong.com
微信公众号:工控论坛;微信号gkongbbs;
不定期修改账号密码;不要在多个网站用同一账号密码
可随时站内信联系,工作日可拨打电话或发邮件咨询相关问题
21626
cgmguangming
文章数:4324
年度积分:1250
历史总积分:21626
注册时间:2009/10/6
发站内信
西门子接触器(三)
2011国庆活动
发表于:2021/6/1 14:44:11
#4楼
之前有魔方、俄罗斯方块,这里有贪吃蛇,强!
发现异常解决之,才有进步与快乐!分享给大家会有更多收获与成长!
50
Zxyi
文章数:1
年度积分:50
历史总积分:50
注册时间:2021/6/6
发站内信
发表于:2021/6/6 19:20:18
#5楼
强。
2407
余生少年
文章数:803
年度积分:36
历史总积分:2407
注册时间:2019/8/19
发站内信
发表于:2021/6/7 11:09:47
#6楼
有用昆仑通态做的小游戏吗
892
kadgai
文章数:45
年度积分:53
历史总积分:892
注册时间:2014/2/17
发站内信
发表于:2021/8/19 10:29:42
#7楼
牛叉,神一般的存在
14983
xuhuifox
文章数:2808
年度积分:930
历史总积分:14983
注册时间:2005/3/25
发站内信
发表于:2021/8/19 13:11:10
#8楼
神人啊!佩服之至啊!
                 一切为了生活

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

93.6006