|
 
- UID
- 373967
- 帖子
- 10736
- 主題
- 2764
- 精華
- 0
- 積分
- 1207
- 楓幣
- 10
- 威望
- 1179
- 存款
- 49226
- 贊助金額
- 0
- 推廣
- 0
- GP
- 1206
- 閱讀權限
- 70
- 在線時間
- 561 小時
- 註冊時間
- 2023-1-12
- 最後登入
- 2025-12-5
|
|
📌 使用的 Library
請先安裝:
Adafruit SSD1306
Adafruit GFX
🎮 程式碼(可直接使用)
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// 按鈕
#define BTN_LEFT 2
#define BTN_RIGHT 3
#define BTN_FIRE 4
// 玩家
int playerX = 60;
// 子彈
bool bulletActive = false;
int bulletX = 0;
int bulletY = 0;
// 敵人 (小蜜蜂)
int enemyX = 20;
int enemyY = 10;
bool enemyAlive = true;
int enemyDir = 1; // 左右移動方向
void setup() {
pinMode(BTN_LEFT, INPUT_PULLUP);
pinMode(BTN_RIGHT, INPUT_PULLUP);
pinMode(BTN_FIRE, INPUT_PULLUP);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
randomSeed(analogRead(0));
}
void loop() {
display.clearDisplay();
// 玩家左右移動
if (!digitalRead(BTN_LEFT) && playerX > 0) playerX -= 3;
if (!digitalRead(BTN_RIGHT) && playerX < 120) playerX += 3;
// 發射子彈
if (!digitalRead(BTN_FIRE) && !bulletActive) {
bulletActive = true;
bulletX = playerX + 3;
bulletY = 50;
}
// 更新子彈
if (bulletActive) {
bulletY -= 5;
if (bulletY < 0) {
bulletActive = false;
}
}
// 敵人左右移動
enemyX += enemyDir;
if (enemyX <= 0 || enemyX >= 120) {
enemyDir = -enemyDir;
enemyY += 5; // 每次碰到邊界往下移動
}
// 判斷是否擊中敵人
if (bulletActive && enemyAlive &&
bulletX > enemyX && bulletX < enemyX + 10 &&
bulletY > enemyY && bulletY < enemyY + 8) {
enemyAlive = false;
bulletActive = false;
}
// 玩家繪製(飛船)
display.fillRect(playerX, 56, 10, 6, SSD1306_WHITE);
// 子彈繪製
if (bulletActive) {
display.fillRect(bulletX, bulletY, 2, 4, SSD1306_WHITE);
}
// 敵人繪製
if (enemyAlive) {
display.drawRect(enemyX, enemyY, 10, 8, SSD1306_WHITE);
display.drawPixel(enemyX + 3, enemyY + 2, SSD1306_WHITE);
display.drawPixel(enemyX + 6, enemyY + 2, SSD1306_WHITE);
} else {
display.setCursor(40, 30);
display.setTextSize(2);
display.print("WIN!");
display.display();
delay(1500);
resetGame();
return;
}
display.display();
delay(30);
}
void resetGame() {
enemyX = random(0, 100);
enemyY = 10;
enemyDir = 1;
enemyAlive = true;
bulletActive = false;
} |
|