回憶童年的小遊戲,Arduino製作貪吃蛇!

2021-02-14 果殼實驗室

前幾天在用點陣製作音樂頻譜儀的時候,被人問到能不能來做一個簡單的貪吃蛇遊戲,作為一個超級業餘創客,在我眼裡就沒有不可以,所以就有了下面的這個作品。


這個貪食蛇的遊戲機是通過手機藍牙和arduino主控板以串口的方式連接,然後通過arduino主控板的I2C接口和8*8的點陣相連,控制點陣上的LED閃爍來進行遊戲。


MAX7219點陣顯示模塊 led矩陣/8x8/I2C接口


DFrobot的Bluno Beetle控制器(Bluno Beetle是一款只有SD卡大小,集成藍牙4.0功能的Arduino主控器,用法同UNO)


杜邦線若干條

大家可以前往https://www.arduino.cc/en/Main/Software的官方下載地址下載,但是官方下載由於是國外網站經常打不開或者軟體下載不下來,

所以在這給大家提供另一個下載地址http://www.makerspaces.cn/forum.php?mod=viewthread&tid=14&extra=

關於arduino的語法手冊WIKI,我也在該網址下做了漢化,方便大家查找。http://www.makerspaces.cn/forum.php

建議下載綠色安裝包的即可,下載下來直接解壓縮即可。

Windows:XP、WIN7 32位需要手工更新驅動,驅動在IDE目錄下drivers\FTDI USB Drivers目錄中,指定目錄為之後自動搜索即可。WIN7 64位,WIN8自動在線更新驅動即可。

現在有的時候買的開發板由於USB晶片採用的方案不同,所用的驅動也不一樣,有一個非常容易的解決方案,下載驅動精靈,然後在有網絡的情況下點擊安裝驅動即可安裝完成。

下載IDE並解壓後,點擊arduino.exe文件進入軟體開發環境,自從1.5.8環境開始軟體可以自動變成系統預設語言。

然後選擇控制板型號,本次實驗使用的是Bluno Beetle控制器(同UNO),工具→板,選擇為arduino UNO即可。

然後選擇通訊埠,首先在設備管理器中找到UNO對應的埠COM(例如COM3),然後在工具→埠下選擇COM3。

接線方式:



由於這裡用到led點陣,所以需要加入點陣控制庫文件

我們需要將一些設置放置在頭文件中方便修改,新建頭文件snake.h,然後在主程序中加入頭文件:

頭文件snake.h 包含所用的一些常量設置和結構體

#define LOAD     3         //設置LED點陣控制引腳#define UP_KEY     SWITCH_1#define RIGHT_KEY  SWITCH_2#define DOWN_KEY   SWITCH_3#define LEFT_KEY   SWITCH_4#define HEIGHT   8       設置點陣範圍是8*8的#define SHOW_SCORE_TIMES     3    // 得分滾動顯示次數#define DEFAULT_SNAKE_LIFE   1    // 小蛇默認有1條命#define DEFAULT_SNAKE_SPEED  9900  // 小蛇初始速度標量#define DEFAULT_SNAKE_LENGTH 3    // 小蛇初始長度#define FOOD_FLASH_SPEED     300 // 食物閃爍速度標量#define SOUND           137#define SOUND_DURATION  4#define DEBUG_PRINT(ARGV) Serial.println(ARGV)#define DEBUG_PRINT(ARGV)    NORMAL = 0,     // 無特殊效果,增加一個蛇身長度    DOUBLE,         // 增加2個蛇身長度    SLOWDOWN,       // 減緩30%小蛇移動速度    ADD_LIFE,       // 增加一個生命值    int length;                 // 蛇身長度    int life;                   // 剩餘生命值    int speed;                  // 小蛇移動速度    Direction direction;        // 移動方向    Point body[WIDTH * HEIGHT]; // 蛇身坐標    FoodType type;       // 食物類型    int flashInterval;   // 閃爍頻度    Point position;      // 食物位置

} Food;

下面是主控制程序

#include <LedControl.h>          //加入LED點陣控制庫文件#include "snake.h"                     //加入自己寫的頭文件LedControl lc = LedControl(DATA_IN, CLK, LOAD, 1);   //設置點陣控制引腳Snake snake;                              //定義snake的結構體Food food;                                 //定義food的結構體unsigned long ticks;               //定義分數       {0, 60, 102, 66, 66, 102, 60, 0},/*"0",0*/    {0, 8, 120, 8, 8, 8, 8, 0},/*"1",1*/    {0, 60, 66, 6, 56, 96, 126, 0},/*"2",2*/    {0, 60, 66, 28, 2, 66, 60, 0},/*"3",3*/    {0, 12, 52, 68, 254, 4, 4, 0},/*"4",4*/    {0, 62, 32, 124, 66, 66, 60, 0},/*"5",5*/    {0, 60, 66, 124, 66, 66, 60, 0},/*"6",6*/    {0, 126, 4, 8, 16, 16, 32, 0},/*"7",7*/    {0, 60, 66, 60, 66, 66, 60, 0},/*"8",8*/    {0, 60, 66, 66, 62, 6, 124, 0},/*"9",9*/};                                                   //分別設置0~9的顯示數組void initLedMatrix()                    //初始化led點陣void initSnake()                      //初始化小蛇    snake.length = DEFAULT_SNAKE_LENGTH;    snake.speed = DEFAULT_SNAKE_SPEED;    snake.life = DEFAULT_SNAKE_LIFE;    for(int i = 0; i < snake.length ; i++) {        snake.body[i].x = HEIGHT >> 1;        snake.body[i].y =  i + (WIDTH >> 1);        lc.setLed(0, snake.body[i].x, snake.body[i].y, true);void getRandomFoodPosition()        //獲得隨機食物的坐標        for(i = 0; i < snake.length; i++) {            if(x == snake.body[i].x && y == snake.body[y].y) {void initFood()                    //初始化食物    food.flashInterval = FOOD_FLASH_SPEED;void initGame()               //初始化遊戲void updateSnakeDirection()       //上傳蛇的位置  if (Serial.available() > 0) {   /* unsigned int keyVal = (!Esplora.readButton(UP_KEY) << 3)        + (!Esplora.readButton(DOWN_KEY) << 2)        + (!Esplora.readButton(RIGHT_KEY) << 1)        + !Esplora.readButton(LEFT_KEY);    case 85:          //u的ascii碼是85        if(snake.direction == LEFT || snake.direction == RIGHT) {    case 68:          //d的ascii碼是68        if(snake.direction == LEFT || snake.direction == RIGHT) {    case 82:               //r的ascii碼是82        if(snake.direction == UP || snake.direction == DOWN) {    case 76:            //l的ascii碼是76        if(snake.direction == UP || snake.direction == DOWN) {    if(x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT) {    for(int i = 0; i < snake.length - 1; i++) {        if(x == snake.body[i].x && y == snake.body[i].y) {    if(ticks % snake.speed != 0) {    switch(snake.direction) {    int newX = snake.body[0].x + dx;    int newY = snake.body[0].y + dy;    if(newX == food.position.x && newY == food.position.y) {        lc.setLed(0, snake.body[snake.length - 1].x, snake.body[snake.length - 1].y, false);    for(int i = snake.length - 1; i > 0; i--) {        snake.body[i] = snake.body[i - 1];    for(int i = 0; i < snake.length; i++) {        lc.setLed(0, snake.body[i].x, snake.body[i].y, true);    DEBUG_PRINT("GAME OVER");    int tensNum = snake.length / 10;    int bitsNum = snake.length % 10;    while(++count <= SHOW_SCORE_TIMES) {        for(int r = 0; r < 8; r++) {            for(int i = 0; i < 8; i++) {                lc.setRow(0, i - r, numbers[tensNum][i]);                lc.setRow(0, i - r + 8, numbers[bitsNum][i]);    if(food.flashInterval != 0) {        if(ticks % food.flashInterval == 0) {            lc.setLed(0, food.position.x, food.position.y, food.visiable);            food.visiable = !food.visiable;        lc.setLed(0, food.position.x, food.position.y, food.visiable);    initGame();       //初始化遊戲

下載串口工具,我使用的是ios的,在蘋果商店裡搜索HackerRemote的app下載

然後手機設置中打開藍牙後,點擊運行HackerRemote的APP,然後點擊Scan。

點擊Scan後出現上面的界面,點擊Bluno,會出現第一個界面,這個時候點擊Connect

控制界面,按鍵UDLR分別表示上下左右。


再配上一個狂醜的盒子……


然後就可以開始玩遊戲了!

果殼空間和果殼實驗室聯手組成果殼雙創空間!在這裡,創業團隊可以享受果殼實驗室提供的評測報告,獲得來自創客的建議;創客們也可以在這裡提供你的腦洞想法,我們共同實現!此外,還有更多有趣好玩的線上、線下活動等著你的參與,精彩內容,聯手奉上。

相關焦點

  • 迷你世界超有意思的小遊戲,貪吃蛇堪稱經典,這款讓人慾罷不能
    一些大神玩家,為了回憶童年,特意在遊戲中創造了一些小遊戲,一起來看看吧。第一:貪吃蛇相信對於8090後玩家而言,這款遊戲絕對是童年經典遊戲吧。開局的時候僅僅只是一條小蛇,吃掉方塊就可以變長。但在迷你世界中,貪吃蛇變成了跑酷。
  • 貪吃蛇蛇:貪吃蛇大作戰、貪吃蛇進化論,都沒這個貪吃蛇好玩!
    《貪吃蛇蛇》遊戲小程序好玩嗎?  《貪吃蛇蛇》小遊戲怎麼玩?  怎麼進入《貪吃蛇蛇》?  文章下拉到底部,  點最後一個圖片進入遊戲!  只有你想不到,  沒有我找不到的好遊戲!  搜羅了好玩的微信小遊戲,  還有遊戲攻略哦!  每天都會推薦好玩的小遊戲。  PS、這是一個沒有贊助商的公眾號,  暫時沒有廣告遊戲,  可以放心的玩哦!
  • 那些童年小遊戲,你還記得那些?回憶起來滿滿的懷念!
    #那些年玩過的童年遊戲#前言在每一個人的童年,遊戲是必不可少的,它伴隨著我們一步步的成長。下面,就帶大家走進童年,回憶那些逝去的記憶,看看我們曾經玩過的那些小遊戲。魂鬥羅1987年第一款魂鬥羅誕生在名為Jamma的大型遊戲機上,遊戲一上線就受到廣大孩子們的喜愛。
  • 如何製作Arduino迷你CNC繪圖儀機 -【創客-DIY-電子製作-單片機教程】
    合作或投稿請發郵件到:rebaby@qq.com您好,在這篇文章中的朋友們,我們將看到如何使用舊的廢舊DVD驅動器,arduino和L293D電機護罩製造微型CNC繪圖儀機器。實際上,我過去曾經建造過一些arduino微型CNC繪圖儀或繪圖機。
  • 貪吃蛇大作戰特殊符號怎麼打 特殊符號大全
    貪吃蛇大作戰特殊符號怎麼打?特殊符號大全分享,下面一起來看吧! Angelべ海蜇 Syó⒈淡頹 "Harm"回憶 ° —肆尕熙〃 〃_o甘蔗味┒ !雙眸、倦怠 無﹎所謂ˋ 這殤,太美、 "Smart?
  • 創客童年•Arduino創作大賽(入圍作品展示)
    製作材料:木板、Arduino主控板、超聲波傳感器、導線、電源穩壓板、適配器設計圖:1、作者:狄才(中學教師)2、作品介紹:本作品是利用空的藥瓶和Ardino的一些配件加編程製作的一個非常實用的超聲波測距儀。它的有效測量距離是2cm-300cm,精度可達毫米級。
  • 微軟放棄的遊戲被他們復活了:Windows經典「三維彈球」現實版,CAD建模、Arduino編程、數控工具機打造,硬核致敬童年
    從3D建模,到代碼編寫,再到最後的動手施工,他們用最專業的手段向童年致敬。正如其中一位小哥說的:建造這樣一個項目,是我的童年夢想。不僅如此,他們還把整個過程做了個教程——只要9步,你也可以打造一臺屬於自己的三維彈球。
  • 貪吃蛇大作戰微信小遊戲在線入口-微信遊戲大全
    最近微信上推出了很多的小遊戲,有些小夥伴就在問微信小遊戲有哪些?洗衣妹就為大家整理了最近很火的微信小遊戲大全,希望對小夥伴有所幫助!點擊進入暢玩微信小遊戲    微信貪吃蛇碰方塊遊戲特色我期待的藍天白雲作文  詩人艾青曾說:「為什麼我的眼裡常含淚水,因為我對這片土地愛得深沉。」
  • 競技遊戲中的一股「清流」,這才是我們記憶中的貪吃蛇大作戰
    翻開手機一看應用市場裡的遊戲真的是玲琅滿目了,在王者榮耀和吃雞泛濫的時代一些小遊戲就是清心寡欲的存在,茶餘飯後無聊時來一波遊戲對戰,美哉呀!美哉!一些小遊戲經過幾次更新畫質解析度出了高清還很動感,有一款遊戲,從測試到現在,我還是愛不釋手,更有更多的老玩家在線,這就是貪吃蛇大作戰!
  • Arduino-使用IR遙控器控制LED - 【單片機教程-Arduino】
    您需要為電路布線,像這樣然後我去了arduino IDE> file> examples> IRremote您需要將草圖上載到arduino,打開串行監視器並開始使用遙控器,然後查看arduino接收哪些值。一段時間後,我寫下了當您按下音量調高鍵或任何其他鍵時,串行監視器中會顯示哪些值,並寫下您要使用的所有鍵。
  • Arduino用PID控制直流電機定位旋轉 - 【單片機教程-Arduino-PID】
    05模塊用於將我們的系統與android設備連接當我們從android設備arduino發送角度設定值接收數據並運行電機時,編碼器將脈衝與要求匹配時,編碼器會按照預定義的計算將實時位置反饋發送到arduino,這意味著指針到達所需位置arduinuo在這種情況下停止直流電機。
  • 創客實戰 | 用Arduino實現循跡小車(初級)
    :循跡小車,製作過程相當簡單。打好基礎後,可以以此為跳板製作一個智能送餐機器人、搬運機器人拿去參加各類比賽。 對於電子相關專業的朋友來說,最好自己動手做一些小項目,可以加深對專業知識的理解,就不會覺得模電、數電等專業特別難了。
  • 試試這個能玩貪吃蛇的電子魔方吧
    少年郎,不要心急,它好玩的地方太多了,讓我喝口水慢慢說~控制小光點,在魔方上玩「貪吃蛇」和「神廟逃亡」首先,不同於日常大家扭來扭去的魔方玩具,這個 QCoo 實際上是不能扭的,它最吸引人的玩法應該是貪!吃!蛇!對,真的不騙你,這個魔方可以利用 LED 燈光顯示來玩貪吃蛇,不相信的話?
  • 諾基亞發布新版3310 自帶貪吃蛇
    不過最重要的是,諾基亞不僅為3310換裝了彩色屏幕、加裝了攝像頭和閃光燈,更為想在這款手機上尋找情懷的玩家們準備了可待機一個月,啊不是,是《貪吃蛇》這款伴隨諾基亞開拓手機市場的功臣遊戲。看看國外媒體的報導,你就知道貪吃蛇對於移動遊戲產業究竟有多麼重要了。
  • 4399早已關服的4款小遊戲,每一款都是童年經典!
    說起童年經典遊戲,除了80後、90後的小霸王遊戲機之外,陪伴了無數人童年的還有4399小遊戲。如今,隨著網絡的發展,大量端遊、手遊的普及,屬於頁遊的時代早已過去,迫於壓力,很多童年經典小遊戲悄然停服。今天,我就來盤點一下早已停服的4款經典童年小遊戲,有屬於你的童年回憶嗎?
  • 貪吃蛇大作戰如何下載 貪吃蛇大作戰下載安裝教程
    18183首頁 貪吃蛇大作戰 貪吃蛇大作戰如何下載 貪吃蛇大作戰下載安裝教程 貪吃蛇大作戰如何下載 貪吃蛇大作戰下載安裝教程
  • 做貪吃蛇遊戲?又怎能少了騰訊這個老江湖
    就在 11 月 16 日,騰訊旗下首款貪吃蛇團戰手遊《瘋狂貪吃蛇》正式在安卓平臺開啟首發試玩,根據官方介紹,這款貪吃蛇類遊戲有著更為豐富的玩法,它不僅僅是一款以團戰為主的貪吃蛇類新手遊,還是一款可滿足全部貪吃蛇玩家遊戲體驗的作品。
  • 【arduino】繼續蜂鳴器音樂播放,arduinoIDE裡調用音樂播放庫
    昨天簡單的介紹了一下蜂鳴器硬體和米思齊上如何演奏音樂(一種非常簡單的用arduino控制蜂鳴器播放音樂的方案),今天繼續在arduino
  • 好懷念,能在這裡重溫童年的小遊戲,原來童年時候的快樂這麼簡單
    在《黑色花與紅山羊》這款遊戲裡面,很多玩家會覺得自己的童年原來獲得快樂的方式這麼簡單,那是因為在《黑色花與紅山羊》這款遊戲當中,我們看到了很多童年時候的小遊戲,雖然我他媽本身也是一款解謎遊戲,也擁有著非常跌宕起伏的劇情,但是更多時間玩家是在那裡與各種機關鬥智鬥勇。
  • 小時候的玻璃彈珠是如何製作的,看完讓你拾童年美好回憶!
    現在我們很少能看到玻璃彈珠這個小玩具了,但是在童年它可是陪伴我們80後90後的美好回憶!在那個年代,常常幾顆玻璃彈珠就夠讓自己和小夥伴們樂此不疲的玩上一整天。而且小時候估計每個小夥伴都還有過把玻璃彈珠裡面彩色東西拿出來的念頭吧。那麼玻璃彈珠到底是怎麼製作的呢?裡面的彩色東西又是什麼呢?