云寺手游网:做最专业最放心的安全下载站!
您当前所在位置:首页 > 游戏资讯 >

教你制作创意小游戏,捣蛋贪吃蛇

时间:2022-03-13 22:00:09 来源:云寺手游网
(此处已添加圈子卡片,请到今日头条客户端查看)

最近新拿到了一堆各式各样的型号为ws2812b的灯带,别看这种灯带的外观并没有什么惊艳之处,它其实是集控制电路与发光电路于一体的智能外控LED光源。它采用5050RGB灯珠,用户可以在0~255之间调整亮度。除了普通的灯带形式,也有环形的、矩阵形的等。在测试了很多效果之后,我面对一堆由LED形成的像素块,想到了一款经典游戏——《贪吃蛇》,却又不想千篇一律地做成经典款,于是加入了第二个玩家负责捣蛋。我借鉴了网上一个《贪吃蛇》的算法,利用Arduino、摇杆、Procesing以及电脑键盘做成了这个双人捣蛋贪吃蛇游戏。硬件清单见表5.1。


表5.1 硬件清单

游戏方法介绍

蓝色代表蛇,绿色代表食物。

玩家1:按下按钮,游戏开始。通过上、下、左、右四个方向键操控蛇的前进方向(每次转向之后要将摇杆位置归0,以便下次检测)。如果没能在5s内吃到食物,食物位置将会随机改变。蛇出界或碰到自己的尾巴,则游戏结束、红灯亮起,再次按下按钮重置游戏,再按下按钮则新一轮游戏开始。


玩家2:每隔1s有一次移动食物一格的机会,负责捣蛋!

我尝试了两种玩家2的操控方法:一种是利用BLE link蓝牙模块,用现有的GoBLE App(见图5.1)来控制食物的移动,但是每次移动时,上、下、右三个方向都会使(0,0)灯变成蓝色灯(见图5.2),值为1,向左移动正常,我个人认为Arduino代码并没有问题,怀疑是GoBLE的库有问题,还希望大家能一起讨论一下。另一种方法是用键盘,借助Processing控制食物。第一种方法的接线图如图5.3所示,第二种方法的接线图如图5.4所示。JoyStick-X接PinA0,JoyStick-Y接PinA1,JoyStick-Z接Pin13,NeoPixels Shield接Pin6。

由于程序太长,请到qq群657864614进行下载。


图5.1 GoBLE App


图5.2 用蓝牙控制时,(0,0)位置的灯会不正常亮起


图5.3 蓝牙控制版本接线图


图5.4 键盘控制版本接线图

程序要点讲解

Adafruit_NeoPixel strip =

Adafruit_NeoPixel(40, PIN, NEO_GRB +NEO_KHZ800);

初始化LED阵列,建立一个类型为Ada_NeoPixel、名称为strip(可更改)的对象,3个参数分别为LED的总数、与Arduino连接的pin以及像素类型。这种LED可以通过一个数字控制脚控制每一个单独的LED,非常方便。

int gameBoard[X][Y]

建立一个与灯阵一致的矩阵,不同数值代表不同的物体,0为背景,-1为食物,大于0的值为蛇。

currentMillis = millis();

读取当前时间,与上次更新游戏的时间做减法,决定蛇是静止还是向前移动。

贪吃蛇部分:基本逻辑是将贪吃蛇看作一个数列,每一节有一个值,尾巴尖为1,依次递增,蛇头的值最大。每次蛇移动时执行moveSnake(),检测移动后蛇头的位置是食物、背景、蛇身,还是出界,后两种情况执行gameover();如果是食物,给检测的位置附上蛇头+1的值,形成新的数列;如果是背景,执行removetTail(),在现有的基础上让数列里的每个数都-1,蛇的长度保持不变。如果吃到食物或距离上次进食超过5s,执行placeFood(),随机放置食物。

玩家1部分:checkJoySitck()实时检测摇杆位置,当摇杆处于中间位置时重置摇杆,开始下一次检测。

玩家2部分:键盘版本需要打开并运行Processing文件。通过Serial,Processing可以将读到的键盘输入信息实时传送给Arduino。蓝牙版本需要包含GoBLE的库,实时检测用户是否通过蓝牙下指令,如果下了指令并且时间间隔多于1s,执行moveFood(),移动食物。

蓝牙版本需要包含GoBLE的库,实时检测用户是否通过蓝牙下指令,如果下了指令并且时间间隔多于1s,执行moveFood(),移动食物。

(此处已添加圈子卡片,请到今日头条客户端查看)