arduino 贪吃蛇代码
时间: 2024-04-20 12:20:23 浏览: 9
Arduino是一款开源的电子原型平台,可以用于制作各种互动项目。贪吃蛇是一款经典的游戏,可以通过Arduino来实现。
以下是一个简单的Arduino贪吃蛇代码示例:
```cpp
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <TouchScreen.h>
#define TFT_CLK 13
#define TFT_MISO 12
#define TFT_MOSI 11
#define TFT_CS 10
#define TFT_DC 9
#define TFT_RST 8
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CLK, TFT_RST, TFT_CS, TFT_DC, TFT_MISO, TFT_MOSI);
TouchScreen ts = TouchScreen(7, A2, A1, A0, 300);
#define SNAKE_SIZE 10
#define FOOD_SIZE 10
int snakeX[SNAKE_SIZE];
int snakeY[SNAKE_SIZE];
int foodX, foodY;
int snakeLength;
int direction;
int score;
void setup() {
tft.begin();
tft.setRotation(3);
tft.fillScreen(ILI9341_BLACK);
randomSeed(analogRead(0));
snakeLength = 1;
snakeX = random(0, tft.width() / SNAKE_SIZE) * SNAKE_SIZE;
snakeY = random(0, tft.height() / SNAKE_SIZE) * SNAKE_SIZE;
foodX = random(0, tft.width() / FOOD_SIZE) * FOOD_SIZE;
foodY = random(0, tft.height() / FOOD_SIZE) * FOOD_SIZE;
direction = 0;
score = 0;
}
void loop() {
if (ts.touched()) {
TSPoint p = ts.getPoint();
int touchX = map(p.y, 0, 1023, 0, tft.width());
int touchY = map(p.x, 0, 1023, 0, tft.height());
if (touchX < snakeX[0] && direction != 1) {
direction = 3;
} else if (touchX > snakeX && direction != 3) {
direction = 1;
} else if (touchY < snakeY && direction != 2) {
direction = 0;
} else if (touchY > snakeY && direction != 0) {
direction = 2;
}
}
moveSnake();
checkCollision();
tft.fillRect(foodX, foodY, FOOD_SIZE, FOOD_SIZE, ILI9341_RED);
for (int i = 0; i < snakeLength; i++) {
tft.fillRect(snakeX[i], snakeY[i], SNAKE_SIZE, SNAKE_SIZE, ILI9341_GREEN);
}
delay(100);
}
void moveSnake() {
for (int i = snakeLength - 1; i > 0; i--) {
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
}
switch (direction) {
case 0:
snakeY -= SNAKE_SIZE;
break;
case 1:
snakeX += SNAKE_SIZE;
break;
case 2:
snakeY += SNAKE_SIZE;
break;
case 3:
snakeX -= SNAKE_SIZE;
break;
}
}
void checkCollision() {
if (snakeX == foodX && snakeY == foodY) {
snakeLength++;
score++;
foodX = random(0, tft.width() / FOOD_SIZE) * FOOD_SIZE;
foodY = random(0, tft.height() / FOOD_SIZE) * FOOD_SIZE;
}
if (snakeX < 0 || snakeX >= tft.width() || snakeY < 0 || snakeY >= tft.height()) {
gameOver();
}
for (int i = 1; i < snakeLength; i++) {
if (snakeX[i] == snakeX && snakeY[i] == snakeY) {
gameOver();
}
}
}
void gameOver() {
tft.fillScreen(ILI9341_BLACK);
tft.setCursor(tft.width() / 2 - 40, tft.height() / 2 - 10);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("Game Over!");
while (true) {
// 游戏结束,停止运行
}
}
```
这段代码使用了Adafruit_GFX和Adafruit_ILI9341库来控制液晶屏显示,使用TouchScreen库来获取触摸输入。代码中定义了贪吃蛇的大小、食物的大小,以及蛇的位置、长度、方向和得分等变量。在`setup()`函数中进行初始化设置,在`loop()`函数中处理游戏逻辑,包括移动蛇、检测碰撞、显示蛇和食物等操作。当游戏结束时,调用`gameOver()`函数显示游戏结束信息并停止运行。