编程新手,请多多包涵.......
我有一款完美玩的石头/剪刀布游戏。我知道我实际上可以用我实际使用的代码的10%完成此操作,但是请使用我的代码向我解释,这就是我目前的理解方式。 我想在代码中的某个位置添加一个按钮(GPIO03),以完全退出游戏。我已经尝试了2天。 but.is_pressed,but.wait_for_press等。我就是无法正常工作。也许有些我不知道的东西,或者我只是在错误地使用它。 有人可以添加或更改代码以在游戏中的任何位置按下按钮时完全退出游戏吗?我机智......
from gpiozero import LED, Buzzer, Button
from time import sleep
buz = Buzzer(2)
but = Button(3)
def rps():
ledg = LED(15)
ledr = LED(14)
ledw = LED(18)
if p1 == 'r' and p2 == 'r':
print("Draw!!")
ledw.on()
sleep(3)
ledw.off()
elif p1 == 'p' and p2 == 'p':
print("Draw!!")
ledw.on()
sleep(3)
ledw.off()
elif p1 == 's' and p2 == 's':
print("Draw!!")
ledw.on()
sleep(3)
ledw.off()
elif p1 == 'r' and p2 == 'p':
print("P2 wins!!")
ledr.on()
sleep(3)
ledr.off()
elif p1 == 'r' and p2 == 's':
print("P1 wins!!")
ledg.on()
sleep(3)
ledg.off
elif p1 == 'p' and p2 == 'r':
print("P1 wins!!")
ledg.on()
sleep(3)
ledg.off
elif p1 == 'p' and p2 == 's':
print("P2 wins!!")
ledr.on()
sleep(3)
ledr.off()
elif p1 == 's' and p2 == 'r':
print("P2 wins!!")
ledr.on()
sleep(3)
ledg.off
elif p1 == 's' and p2 == 'p':
print("P1 wins!!")
ledg.on()
sleep(3)
ledr.off()
while True:
p1 = input("Choose r/p/s P1: (Type 'quit' to exit) ")
if p1 == 'r' or p1 == 'p' or p1 == 's':
pass
elif p1 == 'quit':
print("Bye!!")
break
else:
print("Invalid choice P1. Try again")
buz.on()
sleep(1)
buz.off()
continue
while True:
p2 = input("Choose r/p/s P2: (Type 'quit' to exit) ")
if p2 == 'r' or p2 == 'p' or p2 == 's':
pass
elif p2 == 'quit':
print("Chow!!")
return
else:
print("Invalid choice P2. Try again")
buz.on()
sleep(1)
buz.off()
continue
rps()
break
谢谢
答案 0 :(得分:0)
您的主要游戏循环是while循环。如果您不想结束游戏,可以使用while True
代替while running
,然后将running
设置为False。然后,您可以使用gpiozero的btn.when_pressed
回调功能,随时将按钮running
设置为False,与游戏循环分开。
例如:
stop_btn = Button(20)
def end_game():
global running
running = False
btn.when_pressed = end_game
running = True
while running:
i = input("Enter a number or type 'quit': ")
if i == 'quit':
running = False
continue
if i == '1':
print("running")
print("finished")
但是,您必须意识到它必须完成循环迭代才能使while条件结束,因此在您的版本中,如果您停留在input
行,则必须继续执行在迭代结束之前停止。