您的位置:首頁 > 軟件教程 > 教程 > 貪吃蛇穿越邊界實(shí)驗(yàn)

貪吃蛇穿越邊界實(shí)驗(yàn)

來源:好特整理 | 時(shí)間:2024-05-05 15:46:17 | 閱讀:109 |  標(biāo)簽: T 藍(lán) 2 UNO S C Ino in AR 貪吃蛇 Arduino LCD 實(shí)驗(yàn) 藍(lán)牙   | 分享到:

1.前言: 1.1本實(shí)驗(yàn)實(shí)現(xiàn)的貪吃蛇能穿越邊界,結(jié)束游戲的唯一條件是貪吃蛇到達(dá)指定長度 1.2本實(shí)驗(yàn)所用LCD可能不是LCD12864,LCD12864所用庫為u8glib,筆者在詞庫中并沒有找到型號為ST77355的初始化函數(shù),而是在ucglib中找到,其方法為 Ucglib_ST7735_18x

1.前言:
1.1 本實(shí)驗(yàn)實(shí)現(xiàn)的貪吃蛇能穿越邊界,結(jié)束游戲的唯一條件是貪吃蛇到達(dá)指定長度。
1.2 本實(shí)驗(yàn)所用LCD可能不是LCD12864,LCD12864所用庫為u8glib,筆者在詞庫中并沒有找到型號為ST77355的初始化函數(shù),而是在ucglib中找到,其方法為
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/13, /*data=*/11, /*cd=*/9, /*cs=*/10, /*reset=*/8);
1.3 代碼由學(xué)長LCD1602修改而來。

2.接線方式

藍(lán)牙模塊 RXD TXD GND VCC
Arduino uno pin7 pin6 5v GND
ST7735S模塊 BLK CS DC RST SDA SCL VDD VCC
Arduino uno 3.3v pin10 pin9 pin8 pin11 pin13 未接 GND

3.話不多說上代碼

點(diǎn)擊查看代碼
#include 
#include 
#include "Ucglib.h"
#define maxlength 4 //蛇最大長度
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/13, /*data=*/11, /*cd=*/9, /*cs=*/10, /*reset=*/8);
SoftwareSerial BT(6, 7);
char val;//藍(lán)牙接收字符
int snake_length = 1;//蛇目前長度
int snake_x[maxlength], snake_y[maxlength];
int direction = 6;//方向判斷和閃屏控制
int x = 10;
int y = 10;//記錄變化的位置
int food_x;
int food_y;//食物
int gameOver = 0;//結(jié)束條件
void setup(void) {
  //delay(1000);
  ucg.begin(UCG_FONT_MODE_TRANSPARENT);
  //ucg.begin(UCG_FONT_MODE_SOLID);
  ucg.clearScreen();
  BT.begin(9600);
  snake_x[0] = 10;
  snake_y[0] = 10;
  food_x = 10 + 10 * random(0, 9);
  food_y = 10 + 10 * random(0, 9);
}

void loop(void) {
  if (direction == 6) {//歡迎界面
    ucg.setFont(ucg_font_ncenR12_tr);//字體設(shè)置
    ucg.setPrintPos(40, 80);//設(shè)定顯示坐標(biāo)
    ucg.print("welcome");
  } else
    ucg.drawFrame(10, 10, 100, 100);//游戲區(qū)域,有沒有無所謂
  if (BT.available()) {
    val = BT.read();
    if (val == 'w' && direction != 2) direction = 0;
    if (val == 's' && direction != 0) direction = 2;
    if (val == 'a' && direction != 1) direction = 3;
    if (val == 'd' && direction != 3) direction = 1;
  }
  if (direction == 0) y -= 10;  //w
  if (direction == 1) x += 10;  //d
  if (direction == 2) y += 10;  //s
  if (direction == 3) x -= 10;  //a

  if (x < 10) x = 100;
  if (x > 100) x = 10;
  if (y < 10) y = 100;
  if (y > 100) y = 10;//到達(dá)邊界后穿過邊界

  if (x == food_x && y == food_y) {//行動(dòng)后吃到食物
    snake_length++;
    while (1) {
      int flag = 1;//跳出循環(huán)標(biāo)志
      food_x = 10 + 10 * random(0, 9);
      food_y = 10 + 10 * random(0, 9);//重新生成一個(gè)食物

      for (int i = snake_length - 1; i >= 0; i--) {//遍歷蛇身看食物是否生成在身上
        if ((food_x == snake_x[i]) && (food_y == snake_y[i]) || ((food_x == x) && (food_y == y))) {
          flag = 0;
          break;
        }
      }
      if (snake_length == maxlength) {//游戲結(jié)束條件
        gameOver = 1;
        direction=5;//結(jié)束后顯示gameover時(shí)的閃屏控制
        break;
      }
      if (flag) break;
    }
  }

  if (direction != 6) {
    for (int i = snake_length - 1; i > 0; i--) {
      snake_x[i] = snake_x[i - 1];
      snake_y[i] = snake_y[i - 1];
    }
    snake_x[0] = x;
    snake_y[0] = y;
    if (gameOver) {
      if(direction==5){
        ucg.clearScreen();
        direction=1;
      }
      else{
        ucg.setFont(ucg_font_ncenR12_tr);
        ucg.setPrintPos(40, 80);
        ucg.print("gameover");
      }
      
    }
    if (!gameOver) {
      ucg.clearScreen();
      for (int i = 0; i < snake_length; i++) {
        ucg.drawFrame(snake_x[i], snake_y[i], 10, 10);
      }
      ucg.drawFrame(food_x, food_y, 10, 10);
    }
  }
}

4.來人上圖
貪吃蛇穿越邊界實(shí)驗(yàn)

再上
貪吃蛇穿越邊界實(shí)驗(yàn)

還上
貪吃蛇穿越邊界實(shí)驗(yàn)
使用手機(jī)app藍(lán)牙串口調(diào)試,發(fā)送wasd,對應(yīng)上左下右

5.回顧(復(fù)習(xí)看)
頭文件:、

5.1LCD相關(guān)函數(shù)
LCD初始化
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=*/13, /*data=*/11, /*cd=*/9, /*cs=*/10, /*reset=*/8);
顯示矩形,其左上角坐標(biāo)為(snake_x[i], snake_y[i]),長度和寬度為10
ucg.drawFrame(snake_x[i], snake_y[i], 10, 10);
顯示像素點(diǎn),其坐標(biāo)坐標(biāo)為(x,y)
ucg.drawPixel(x,y)
清屏
ucg.clearScreen();
初始化,兩者區(qū)別不知道
ucg.begin(UCG_FONT_MODE_TRANSPARENT); //ucg.begin(UCG_FONT_MODE_SOLID);
字體、顯示坐標(biāo)、顯示函數(shù)
ucg.setFont(ucg_font_ncenR12_tr); ucg.setPrintPos(40, 80); ucg.print("welcome");

5.2藍(lán)牙相關(guān)函數(shù)
SoftwareSerial BT(6, 7);
讀app發(fā)來的信息
if (BT.available()) char val = BT.read();

6.說明
如有同道中人,請刪去注釋

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

貪吃蛇 5.15.0
貪吃蛇 5.15.0
類型:休閑益智  運(yùn)營狀態(tài):正式運(yùn)營  語言:中文   

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動(dòng)

貪吃蛇免費(fèi)版是一款經(jīng)典有趣的手機(jī)游戲。在游戲中,玩家可以操縱一條小蛇,不斷吞噬資源,并努力成為游戲
貪吃蛇io 1.40
貪吃蛇io 1.40
類型:休閑益智  運(yùn)營狀態(tài):正式運(yùn)營  語言: 英文   

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動(dòng)

《貪吃蛇io》是由開發(fā)商VOODOO開發(fā)的一款貪吃蛇題材的款技對戰(zhàn)類游戲,玩家們將進(jìn)入一個(gè)賽道中,控制自己

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]

湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)