维基少年:树莓派/树莓派“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()