#include <LedControl.h>
// 定義LED矩陣的接腳
#define DIN 12
#define CS 10
#define CLK 11
// 定義搖桿的接腳
#define JOYSTICK_X A0
#define JOYSTICK_Y A1
#define JOYSTICK_BUTTON 2
// 初始化LED矩陣
LedControl lc = LedControl(DIN, CLK, CS, 1);
// 遊戲變數
int paddlePos = 3; // 板子的初始位置
int ballX = 3; // 球的初始X位置
int ballY = 6; // 球的初始Y位置
int ballDirX = 1; // 球的X方向
int ballDirY = -1; // 球的Y方向
bool gameOver = false;
void setup() {
// 初始化LED矩陣
lc.shutdown(0, false);
lc.setIntensity(0, 8);
lc.clearDisplay(0);
// 初始化搖桿按鈕
pinMode(JOYSTICK_BUTTON, INPUT_PULLUP);
// 初始化隨機種子
randomSeed(analogRead(0));
}
void loop() {
if (!gameOver) {
// 讀取搖桿的X軸值
int joystickX = analogRead(JOYSTICK_X);
// 根據搖桿的值移動板子
if (joystickX < 400 && paddlePos > 0) {
paddlePos--;
} else if (joystickX > 600 && paddlePos < 6) {
paddlePos++;
}
// 更新球的位置
ballX += ballDirX;
ballY += ballDirY;
// 檢查球是否碰到邊界
if (ballX <= 0 || ballX >= 7) {
ballDirX *= -1;
}
if (ballY <= 0) {
ballDirY *= -1;
}
// 檢查球是否碰到板子
if (ballY == 7 && ballX >= paddlePos && ballX <= paddlePos + 2) {
ballDirY *= -1;
}
// 檢查球是否掉到底部
if (ballY >= 7) {
gameOver = true;
}
// 清除LED矩陣
lc.clearDisplay(0);
// 繪製板子
lc.setLed(0, 7, paddlePos, true);
lc.setLed(0, 7, paddlePos + 1, true);
lc.setLed(0, 7, paddlePos + 2, true);
// 繪製球
lc.setLed(0, ballY, ballX, true);
// 延遲一段時間
delay(200);
} else {
// 遊戲結束,顯示Game Over
lc.clearDisplay(0);
lc.setRow(0, 0, 0b00111100);
lc.setRow(0, 1, 0b01000010);
lc.setRow(0, 2, 0b10000001);
lc.setRow(0, 3, 0b10000001);
lc.setRow(0, 4, 0b01000010);
lc.setRow(0, 5, 0b00111100);
lc.setRow(0, 6, 0b00000000);
lc.setRow(0, 7, 0b00000000);
// 按下搖桿按鈕重新開始遊戲
if (digitalRead(JOYSTICK_BUTTON) == LOW) {
gameOver = false;
paddlePos = 3;
ballX = 3;
ballY = 6;
ballDirX = 1;
ballDirY = -1;
delay(500); // 防抖動
}
}
}
留言
張貼留言