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.話不多說上代碼
#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.來人上圖
再上
還上
使用手機(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.說明
如有同道中人,請刪去注釋
機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)