維基少年:樹莓派/樹莓派“Simon Says”遊戲
| 本教程正在開發中,尚未測試。 |

Simon Says(或簡稱為 Simon)是一款電子棋盤遊戲,其目標是記住紅色、黃色、藍色和綠色的順序,然後按順序按下相應的按鈕。

迷你麵包板 有頂部和底部部分。每個部分中每列的所有點都連線在一起,因此我們可以進行電氣連線。
您將需要 ×1 麵包板。
| LED 始終需要與電阻器連線。如果您在沒有電阻器的情況下連線它們,它們會燒燬,而且可能無法再次使用。 |

LED(發光二極體) 有一條短腿和一條長腿。如果您用手摸摸邊緣,您還會發現一個平邊。短腿和平邊始終連線到負極(接地)。
您將需要 ×4 LED:×1 紅色,×1 藍色,×1 綠色和 ×1 黃色。

電阻器 可以以任何方式連線。我們使用的是 270 歐姆電阻器,但 220-470 歐姆之間的任何電阻器都可以正常工作。
您將需要 ×4 電阻器。

開關 可以以任何方式連線。按下時,它允許電流透過;鬆開時,電流停止。這種型別的按鈕被稱為“瞬時按下式開關”。
您將需要 ×4 瞬時開關。

跳線(也稱為杜邦線)將電子元件連線到 GPIO 引腳。您還應該有兩根短跳線和一根長跳線(所有跳線都是“母對母” – 兩端都有孔)。
您將需要 ×16 跳線。
| 線的顏色並不重要 – 您放置線的位置非常重要!麵包板上的每個孔都有編號 – 確保所有東西都放在正確的孔中。 |

樹莓派有兩種標記通用輸入輸出 (GPIO) 引腳的方式
- 板號 – 僅從左下角開始,從 1 開始,一直向上和向右,一直到 40。
- BCM 號碼(Broadcom 號碼) – 是樹莓派處理器檢視引腳連線的方式。
步驟 1: 將 LED 連線到樹莓派的 GPIO 引腳。您可以使用任何組合的 GPIO 引腳,但請注意,LED 必須連線到支援 PWM(脈寬調製)的引腳。
| 元件 | GPIO 引腳 |
|---|---|
| 紅色 LED | 引腳 17(GPIO 17) |
| 藍色 LED | 引腳 27(GPIO 27) |
| 黃色 LED | 引腳 22(GPIO 22) |
| 綠色 LED | 引腳 23(GPIO 23) |
步驟 2: 將按鈕連線到樹莓派的 GPIO 引腳。您可以使用任何組合的 GPIO 引腳,但請注意,按鈕必須連線到支援輸入的引腳。
| 元件 | GPIO 引腳 |
|---|---|
| 按鈕 | 引腳 5(GPIO 5) |
| 按鈕 | 引腳 6(GPIO 6) |
| 按鈕 | 引腳 13(GPIO 13) |
| 按鈕 | 引腳 19(GPIO 19) |
步驟 3: 編寫一個 Python 程式來控制 LED 和按鈕。該程式應該生成一個隨機的 LED 點亮序列,然後等待使用者按順序按下相應的按鈕。如果使用者正確地按下了按鈕,程式應該進入下一級。如果使用者按下了錯誤的按鈕,程式應該結束遊戲。
編寫完 Python 程式後,您可以將其儲存為一個副檔名為 `.py` 的檔案,例如 `simon_says.py`。然後,您可以在終端視窗中輸入以下命令來執行程式
python simon_says.py
遊戲將開始,LED 會以隨機順序點亮。按順序按下相應的按鈕以進入下一級。如果您按下了錯誤的按鈕,遊戲將結束。
您可以透過增加序列的長度並新增不同的動作型別(例如拍手或跺腳)來使遊戲更具挑戰性。您還可以使用蜂鳴器或揚聲器為遊戲新增聲音效果。
|
|
|
| 無法收聽此檔案?請參閱 媒體幫助。 | |
|
|
|
| 無法收聽此檔案?請參閱 媒體幫助。 | |
import RPi.GPIO as GPIO
import random
# Define the GPIO pins for the LEDs and buttons
led_pins = [17, 27, 22, 23]
button_pins = [5, 6, 13, 19]
# Set up the GPIO pins
GPIO.setmode(GPIO.BCM)
for pin in led_pins:
GPIO.setup(pin, GPIO.OUT)
for pin in button_pins:
GPIO.setup(pin, GPIO.IN)
# Define a function to light up an LED
def light_led(pin):
GPIO.output(pin, GPIO.HIGH)
# Define a function to turn off an LED
def turn_off_led(pin):
GPIO.output(pin, GPIO.LOW)
# Define a function to generate a random sequence of LEDs
def generate_random_sequence():
sequence = []
for i in range(4):
sequence.append(random.randint(0, 3))
return sequence
# Define a function to check if the user pressed the buttons in the correct sequence
def check_user_input(sequence):
for i in range(len(sequence)):
if GPIO.input(button_pins[sequence[i]]) == False:
return False
return True
# Start the game
sequence = generate_random_sequence()
# Light up the LEDs in the sequence
for i in range(len(sequence)):
light_led(led_pins[sequence[i]])
time.sleep(0.5)
turn_off_led(led_pins[sequence[i]])
# Wait for the user to press the buttons in the sequence
while True:
if check_user_input(sequence):
# The user pressed the buttons correctly
sequence += generate_random_sequence()
else:
# The user pressed the wrong button
print("Game over!")
break
# Clean up the GPIO pins
GPIO.cleanup()
