1.先安裝函示庫
工具 >> 管理程式庫>>輸入 ledcontrol
2.程式碼
#include <LedControl.h>
// 初始化LedControl物件
// Vcc 接 5V,GND 接 GND,DIN 接到 5 號腳位,CS 接到 6 號腳位,CLK 接到 7 號腳位
LedControl lc = LedControl(5, 7, 6, 1);
const int buttonPinLeft1 = 2; // 玩家1向左按鈕接到 2 號腳位
const int buttonPinRight1 = 3; // 玩家1向右按鈕接到 3 號腳位
int paddleX1 = 3; // 玩家1的初始 x 座標
int paddleX2 = 3; // 玩家2的初始 x 座標(電腦控制)
int ballX = 3; // 球的初始 x 座標
int ballY = 3; // 球的初始 y 座標
int ballDX = 1; // 球的 x 方向移動速度
int ballDY = 1; // 球的 y 方向移動速度
void setup() {
lc.shutdown(0, false); // 啟動顯示
lc.setIntensity(0, 8); // 設定亮度(0到15)
lc.clearDisplay(0); // 清除顯示
pinMode(buttonPinLeft1, INPUT_PULLUP); // 啟用內建上拉電阻
pinMode(buttonPinRight1, INPUT_PULLUP); // 啟用內建上拉電阻
}
void loop() {
lc.clearDisplay(0); // 清除顯示
// 移動玩家1
if (digitalRead(buttonPinLeft1) == LOW && paddleX1 > 0) {
paddleX1--;
delay(200); // 防止按鈕抖動
} else if (digitalRead(buttonPinRight1) == LOW && paddleX1 < 5) {
paddleX1++;
delay(200); // 防止按鈕抖動
}
// 電腦控制玩家2
if (ballDY < 0) { // 當球向上移動時
if (ballX < paddleX2 + 1 && paddleX2 > 0) {
paddleX2--; // 向左移動
} else if (ballX > paddleX2 + 1 && paddleX2 < 5) {
paddleX2++; // 向右移動
}
}
// 繪製玩家1
lc.setLed(0, 7, paddleX1, true);
lc.setLed(0, 7, paddleX1 + 1, true);
lc.setLed(0, 7, paddleX1 + 2, true);
// 繪製玩家2
lc.setLed(0, 0, paddleX2, true);
lc.setLed(0, 0, paddleX2 + 1, true);
lc.setLed(0, 0, paddleX2 + 2, true);
// 移動球
ballX += ballDX;
ballY += ballDY;
// 撞到邊緣時反彈
if (ballX <= 0 || ballX >= 7) {
ballDX = -ballDX;
}
// 撞到玩家1時反彈
if (ballY == 6 && (ballX == paddleX1 || ballX == paddleX1 + 1 || ballX == paddleX1 + 2)) {
ballDY = -ballDY;
}
// 撞到玩家2時反彈
if (ballY == 1 && (ballX == paddleX2 || ballX == paddleX2 + 1 || ballX == paddleX2 + 2)) {
ballDY = -ballDY;
}
// 繪製球
lc.setLed(0, ballY, ballX, true);
// 如果球掉到最底部或最頂部,顯示 X 並重新開始
if ((ballY > 7 && ballY != 6) || (ballY < 0 && ballY != 1)) {
showX();
delay(1000); // 顯示 X 一秒鐘
resetGame();
}
delay(700); // 控制遊戲速度,將速度調慢一些
}
void showX() {
byte xPattern[8] = {
0b10000001,
0b01000010,
0b00100100,
0b00011000,
0b00011000,
0b00100100,
0b01000010,
0b10000001
};
for (int i = 0; i < 8; i++) {
lc.setRow(0, i, xPattern[i]);
}
}
void resetGame() {
paddleX1 = 3; // 重置玩家1位置
paddleX2 = 3; // 重置玩家2位置
ballX = 3; // 重置球的位置
ballY = 3;
ballDX = 1;
ballDY = 1;
}
留言
張貼留言