相關(guān)商品

  • Arduino Leonardo 萊昂納多控制器 原裝進口
  • Arduino 水蒸氣傳感器 雨水探測器 液位開關(guān) 濕度傳感器 電子積木
  • 1602液晶擴展板 v2.0 Arduino LCD 1602 Keypad Shield
  • Arduino 土壤濕度傳感器 Moisture Sensor 土壤水分 自動澆花
  • 奧松機器人 MQ2氣體傳感器 Arduino煙霧甲烷氣體檢測 正品保證
  • Mini紅外避障傳感器 光電傳感器 Arduino 程控小車 電子競賽
  • Arduino 無線收發(fā)模塊 NRF24L01 (升級版) 數(shù)傳模塊 電子大賽
  • Arduino 無線數(shù)傳 APC220套件 1200米無線傳輸 射頻模塊
  • Arduino LED發(fā)光模塊 食人魚燈 白光高亮 數(shù)字模塊 電子積木
  • Arduino LM35線性溫度傳感器 模擬線性溫度傳感器 電子積木
  • Arduino DHT11 溫度傳感器 濕度傳感器 數(shù)字溫濕度模塊 電子積木
  • Arduino 顏色傳感器 TCS3200D TCS230D升級版 RGB模塊 電子積木
  • USB接口連接線 USB轉(zhuǎn)TTL Arduino 數(shù)據(jù)下載線 USB cable for Arduino
  • Arduino實驗連接線 進口優(yōu)質(zhì)彩色單芯杜邦線(20CM)單片機
  • Arduino 12864點陣液晶 51單片機 帶字庫 帶教程講解 液晶顯示屏
  • Arduino LCD12864 點陣液晶擴展板 12864液晶屏 送Arduino庫文件
  • Arduino IIC/I2C LCD1602 字符液晶顯示器 送庫文件 電子積木
  • Arduino Serial LCD1602 字符液晶顯示器 串行液晶 電子積木
  • RB URF02 超聲波傳感器(雙模式) Arduino 電子積木
  • Arduino 單向傾角傳感器 鋼球滾動開關(guān) 數(shù)字傳感器 電子積木
  • Arduino 磁感應(yīng)傳感器 磁力開關(guān) 數(shù)字傳感器 電子積木
  • Arduino 單向傾角傳感器 鋼球滾動開關(guān) 數(shù)字傳感器 電子積木 綠
  • Arduino UNO R3 控制器 ATmega328P-PU+ATmega16U2 arduino 原裝進口
  • Mini 紅外光電傳感器 Arduino 紅外尋線傳感器 程控小車 電子競賽
  • Arduino 無線射頻模塊 NRF24L01 貼片超小型 低功耗
  • Arduino DS18B20 數(shù)字溫度傳感器 電子積木 互動媒體
  • Arduino 雙軸按鍵搖桿 PS2游戲搖桿 控制桿 JoyStick 電子積木
  • Arduino 旋轉(zhuǎn)角度傳感器 可調(diào)電位計 300度 電子積木 模擬傳感器
  • Arduino 蜂鳴器發(fā)聲模塊 有源蜂鳴器 電磁式蜂鳴器 電子積木
  • Arduino FSR400 壓力感應(yīng)電阻 壓力傳感器 力敏電阻 Sparkfun原裝進口全新
  • Arduino IR Sensor GP2Y0A02YK0F夏普紅外測距傳感器
  • 奧松機器人 傳感器連接線 防插反接口 杜邦線  Arduino 正品保證
  • Arduino實驗連接線 20P杜邦線 單片機
  • Arduino RFID 串口模塊 電子標簽 近場通信 IC卡感應(yīng) 送卡和線
  • 樹莓派  3代B型 Raspberry Pi 3 Model B 外殼 多彩顏色 彩虹外殼
  • Arduino FSR402 0.5
  • Arduino IIC LCD2004 I2C接口字符液晶顯示器 帶庫文件 電子積木
  • Arduino UNO R3 SMD 控制器 ATmega16U2 開發(fā)版 單片機 sparkfun原裝進口
  • Arduino 模擬傳感器 Slider Sensor 直滑電位計 位置 滑動傳感器
  • Arduino 紅外 光電傳感器 紅外追蹤器 程控小車 Pololu 原裝進口
  • Starduino UNO R3 控制器 ATmega328P-PU+ATmega32U2 (直插) 兼容Arduino
  • Arduino 聲音傳感器 Sound Detector 聲音檢測模塊 Sparkfun原裝
  • Starduino控制器 Arduino 舵機控制器 奧松機器人
  • Arduino 模擬灰度傳感器 尋線傳感器 循跡模塊 電子積木電子大賽
  • Arduino 聲音傳感器 Sound Detector 聲音檢測模塊 模擬傳感器
  • 奧松 揚聲器發(fā)聲模塊 聲音輸出模塊 Speaker模塊 麥克風發(fā)聲模塊
  • Arduino 語音錄音模塊 播放模塊 聲音存儲 ISD1820P 聲音傳感器
  • Arduino M0 Pro 電路板 ATSAMD21G18 Arduino UNO 升級 原裝
  • 微型潛水泵 抽水馬達 噴水馬達 實驗小水泵 可調(diào)水流量 配套水管
  • Arduino Uno 配套 接線柱擴展板傳感器Binding Post Shield
  • Arduino 滑條傳感器 Slide Sensor 直滑電位計 位置 模擬傳感器
  • Arduino UNO WiFi 控制器 ATmega328 ESP8266wifi無線模塊開發(fā)板
  • Arduino LCD 12864液晶搖桿擴展板 液晶屏 Arduino兼容開發(fā)板
  • 基于Arduino實驗連接線 10P杜邦線 優(yōu)質(zhì)彩色單芯(21CM)公對母線材
  • 相關(guān)文章

    當前位置: 首頁 > 產(chǎn)品評測 > 【產(chǎn)品測評】LCD12864 液晶搖桿擴展板之貪吃蛇游戲

    【產(chǎn)品測評】LCD12864 液晶搖桿擴展板之貪吃蛇游戲

    編輯:neil2016-09-28 瀏覽次數(shù):1233

    LCD 12864液晶搖桿擴展板采用全新12864G-0088液晶屏為主體顯示器件。此擴展板采用Arduino疊層板設(shè)計理念,可直接插接到Arduino UNO、Carduino UNO R3、Arduino mega2560、Arduino ADK控制器上使用,可以清晰顯示中文、英文、字符、圖片等;板上添加五向微型搖桿,方便實現(xiàn)人機互動;同時本板還具有5個模擬擴展接口和8個數(shù)字擴展接口;其中各數(shù)字接口均分別用黑色、紅色、黃色排針來區(qū)別電源地、電源正極和信號IO管腳;即方便操作又具有防呆的作用;擴展接口可連接各種傳感器模塊,如溫度濕度傳感器、光線傳感器、LED發(fā)光模塊等,是制作顯示互動作品不可獲缺的顯示器。

    簡單的產(chǎn)品介紹之后,就該開始我們今天的貪吃蛇游戲制作了,相信應(yīng)該很多人都玩兒過這個游戲吧?

    * 準備硬件

    (1)PS2 游戲搖桿模塊 * 1個

    (2)LCD12864 液晶擴展板 * 1個

    (3)Carduino UNO R3 控制器 * 1個

    (4)杜邦線 * 若干

    (5)USB 數(shù)據(jù)線 * 1 條

    * 硬件連接

    如下圖所示將硬件連接在一起


    接線說明:1、PS2 游戲搖桿模塊X連接A1(黃色針,Y連接A2(黃色針,B連接A3(黃色針,+ 連接到控制器模擬口電源正(紅色針),- 連接到控制器模擬口電源地(黑色針

    2、LCD12864 液晶擴展板直接可以插接到 Carduino UNO R3 控制器上,只要將引腳對應(yīng)好,就像下圖中所示,然后插進去就可以啦!插好之后擴展板和UNO之間沒有縫隙

        * 示例代碼

     

    #include "U8glib.h"
    U8GLIB_MINI12864 u8g(5, 6, 2, 4, 3);

    #define UP    A1
    #define LEFT  A2
    #define key A3

    int box_x = 0;
    int box_y = 0;
    int box_x_length = 98;//x方向32  0-31
    int box_y_length = 62;//y方向20  0-19
    int snake_max_length = 100; //蛇身體最大長度
    int snake_x[100];//蛇身x坐標
    int snake_y[100];//蛇身y坐標
    int snake_body_width = 3; //蛇身方塊寬度(正方形)
    int food_x;//食物位置坐標x
    int food_y;//食物位置坐標y
    int snake_length = 3; //當前蛇身長度
    unsigned int game_speed;//游戲速度 單位MS
    void setup(void)
    {
      welcom();//歡迎界面
      delay(2000);
      chose_game();
    }
    //歡迎界面
    void welcom()
    {
      u8g.firstPage();
      do
      {
        u8g.setFont(u8g_font_gdr14r);
        u8g.setPrintPos(0, 20);
        u8g.print("Arduino");
        u8g.setPrintPos(0, 35);
        u8g.print("             GAME");
        u8g.setFont(u8g_font_9x18);
        u8g.setPrintPos(0, 55);
        u8g.print("By:ALS ROBOT");
      } while (u8g.nextPage());
    }
    //開始游戲
    int chose_game()
    {
      int flag = 1;
      int temp = 1;
      Serial.println(analogRead(3));
      while (flag)
      {
        int key = read_key();
          u8g.firstPage();
          do
          {
            u8g.setFont(u8g_font_9x18);
            u8g.setPrintPos(5, 20);
            u8g.print("Snake  <");
          } while (u8g.nextPage());
          temp = 1;
        if (analogRead(3) > 500)
        {
          return temp;
        }
      }
    }
    //讀取搖桿值
    int read_key()
    {
      int key_temp;
      if(analogRead(2) < 200) {
        key_temp = 5;//UP;
        return key_temp;
      }
      if(analogRead(2)> 800) {
        key_temp = 6;//DOWN;
        return key_temp;
      }
      if(analogRead(1) < 200) {
        key_temp = 7;//LEFT;
        return key_temp;
      }
      if(analogRead(1) > 800) {
        key_temp = 8;//RIGHT;
        return key_temp;
      }
      if (analogRead(3) == HIGH) {
        key_temp = 9;//A;
        return key_temp;
      }
      return 0;
    }

    void game_over()//游戲結(jié)束
    {
      snake_length=3;
      snake_x[0] = 15; snake_y[0] = 15;//snake起始坐標
      snake_x[1] = snake_x[0]  - 1; snake_y[1] = snake_y[0];//snake起始坐標
      snake_x[2] = snake_x[1]  - 1; snake_y[2] = snake_y[1];//snake起始坐標
    }
    //貪吃蛇主函數(shù)
    void snake()
    {
      int flag = 1; //標志
      snake_x[0] = 15; snake_y[0] = 15;//snake起始坐標
      snake_x[1] = snake_x[0]  - 1; snake_y[1] = snake_y[0];//snake起始坐標
      snake_x[2] = snake_x[1]  - 1; snake_y[2] = snake_y[1];//snake起始坐標
      int snake_dir=8;//初始方向 right
      game_speed=30;
      int food_flag=1;
      Serial.println("snake!");
      food();
      while (flag)
      {
        snake_frame(500);
        delay(game_speed);
        switch(read_key())
        {
          case 5:
            if(snake_dir!=6)
            {
              snake_dir=5;
              break;
            }
          case 6:
            if(snake_dir!=5)
            {
              snake_dir=6;
              break;
            }
            case 7:
            if(snake_dir!=8)
            {
              snake_dir=7;
              break;
            }
            case 8:
            if(snake_dir!=7)
            {
              snake_dir=8;
              break;
            }
            default:break;
        }
        if(snake_eat_food(snake_dir)==1)
        {
          food();
          if(snake_length<10){game_speed=150;}
          if(snake_length<30&&snake_length>=10){game_speed=180;}
          if(snake_length<50&&snake_length>=30){game_speed=200;}
          if(snake_length>=50){game_speed=0;}
        }
        else
        {
          if(snake_knock_wall(snake_dir==1))
          {
            game_over();
            flag=0;
          }
          else
          {
            if(snake_eat_body(snake_dir)==1)
            {
              game_over();
              flag=0;
            }
            else
            {
              change_con(snake_dir);
            }
          }
        }
      }
    }
    //游戲主界面
    void snake_frame(int s)
    {
      u8g.firstPage();
      do
      {
        u8g.drawFrame(box_x, box_y, box_x_length, box_y_length);
        u8g.setFont(u8g_font_5x8);
        u8g.setPrintPos(box_x_length + 1, 12);
        u8g.print("Score");
        u8g.setPrintPos(box_x_length + 1, 22);
        u8g.print((snake_length - 3) * 5);
        u8g.setPrintPos(box_x_length + 1, 46);
        u8g.print("Speed");
        u8g.setPrintPos(box_x_length + 1, 56);
        u8g.print(30-s);
        u8g.drawFrame(food_x*snake_body_width+1, food_y*snake_body_width+1, snake_body_width, snake_body_width);//顯示食物
        for (int i = 0; i < snake_length; i++)//顯示snake
        {
          if(i==0)
          {
            u8g.drawBox(snake_x[i]*snake_body_width+1, snake_y[i]*snake_body_width+1, snake_body_width, snake_body_width);
          }
          else
          {
            u8g.drawFrame(snake_x[i]*snake_body_width+1, snake_y[i]*snake_body_width+1, snake_body_width, snake_body_width);
          }
        }
      } while (u8g.nextPage());
    }
    //食物隨機坐標生成函數(shù)
    void food()
    {
      int flag = 1;
      while (flag)
      {
        food_x = random(0,(box_x_length-2)/3);
        food_y = random(0,(box_y_length-2)/3);
        for (int i = 0; i < snake_length; i++)
        {
            if((food_x==snake_x[i])&&(food_y==snake_y[i]))
            {
              break;
            }
            flag=0;
        }
      }
    }
    //移動后坐標變換函數(shù)
    void change_con(int DIR)
    {
      int temp_x[snake_length+2];
      int temp_y[snake_length+2];
      for(int i=0;i<snake_length-1;i++)//將舊坐標數(shù)據(jù)存放到temp數(shù)組  最后一位數(shù)據(jù)無效
      {
        temp_x[i]=snake_x[i];
        temp_y[i]=snake_y[i];
      }
      switch(DIR)
      {
        case 8: {snake_x[0]+=1;break;}
        case 7: {snake_x[0]-=1;break;}
        case 5: {snake_y[0]-=1;break;}
        case 6: {snake_y[0]+=1;break;}
      }
      for(int i=1;i<snake_length;i++)
      {
        snake_x[i]=temp_x[i-1];
        snake_y[i]=temp_y[i-1];
      }
    }
    //吃到食物后坐標變換
    void change_pos()
    {
      int temp_x[snake_length+2];
      int temp_y[snake_length+2];
      for(int i=0;i<snake_length-1;i++)//將舊坐標數(shù)據(jù)存放到temp數(shù)組  最后一位數(shù)據(jù)無效
      {
        temp_x[i]=snake_x[i];
        temp_y[i]=snake_y[i];
      }
      snake_x[0]=food_x;
      snake_y[0]=food_y;
      for(int i=1;i<snake_length;i++)
      {
        snake_x[i]=temp_x[i-1];
        snake_y[i]=temp_y[i-1];
      }
    }
    //判斷是否吃到食物 0-沒有吃到 1-吃到 2-無效
    int snake_eat_food(int dir)
    {
      int x_temp=snake_x[0];
      int y_temp=snake_y[0];
      switch(dir)
      {
        case 5 :y_temp-=1;break;
        case 6 :y_temp+=1;break;
        case 7 :x_temp-=1;break;
        case 8 :x_temp+=1;break;
      }
      if((x_temp==food_x)&&(y_temp==food_y))
      {
          snake_length+=1;
          change_pos();
          return 1;
      }
      else
      {
        return 0;
      }
    }
    //判斷是否撞墻 0-沒有撞到 1-撞到 2-無效
    int snake_knock_wall(int dir)
    {
      int x_temp=snake_x[0];
      int y_temp=snake_y[0];
      switch(dir)
      {
        case 5 :y_temp-=1;break;
        case 6 :y_temp+=1;break;
        case 7 :x_temp-=1;break;
        case 8 :x_temp+=1;break;
      }
      if(x_temp<0||x_temp>31||y_temp<0||y_temp>19)
      {
        return 1;
      }
      else
      {
        return 0;
      }
    }
    //判斷是否吃到自己 0-沒有吃到 1-吃到 2-無效
    int snake_eat_body(int dir)
    {
      int x_temp=snake_x[0];
      int y_temp=snake_y[0];
      switch(dir)
      {
        case 5 :y_temp-=1;break;
        case 6 :y_temp+=1;break;
        case 7 :x_temp-=1;break;
        case 8 :x_temp+=1;break;
      }
      for(int i=1;i<snake_length;i++)
      {
        if((snake_x[0]==snake_x[i])&&(snake_y[0]==snake_y[i]))
        {
          return 1;
        }
      }
      return 0;
    }
       
    void loop(void)//主循環(huán)函數(shù)
    {
      while (1)
      {
        switch (chose_game())
        {
          case 1: snake(); break;
          default:break;
        }
      }
    }

    注意此程序需要使用到庫文件,大家可以點擊此處,進入奧松機器人官方技術(shù)論壇,下載示例程序及庫文件。

        * 程序效果

    如圖所示,為程序上傳后 LCD12864 液晶擴展板顯示效果

    開機畫面會停留 2 秒,然后按下 PS2 搖桿模塊的按鈕,就會進入貪吃蛇游戲,界面如下圖所示,快來體驗一下吧。

     

    ----------------------------------------------------------------------------------------------------------------

    奧松機器人官網(wǎng):www.robotbase.cn

    微信號:搜索公眾號“奧松機器人”

    QQ群: 271230889(討論,解惑)

    微博:@奧松機器人基地

    ----------------------------------------------------------------------------------------------------------------

    溫馨提示:予人玫瑰,手留余香;如果你喜歡這篇文章,不妨轉(zhuǎn)發(fā)推薦給你身邊的朋友!

     

    • 用戶評價

    暫時還沒有任何用戶評論

    總計 0 個記錄,共 1 頁。 第一頁 上一頁 下一頁 最末頁
    用戶名: 匿名用戶
    E-mail:
    評價等級:
    評論內(nèi)容:
    驗證碼:
    captcha

    Hi,大家好,我是小奧!

    歡迎來到奧松機器人的世界!

    需要咨詢服務(wù)請點小奧哦!

    • 銷售咨詢: 銷售咨詢
    • 銷售咨詢: 銷售咨詢
    • 技術(shù)支持: 技術(shù)支持
    • 咨詢電話:
      0451-86628691
    Top