Использование кнопки, чтобы выйти из игры "Каменная бумага"
Новичок в программировании, пожалуйста, потерпите меня.......
У меня есть игра "камень / бумага / ножницы", которая отлично работает. Я знаю, что, вероятно, мог бы сделать это с 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
Спасибо
1 ответ
Ваш основной игровой цикл - это цикл while. Вместо while True
ты мог бы иметь while running
а затем установить running
в False, когда вы хотите, чтобы ваша игра закончилась. Затем вы можете использовать gpiozero's btn.when_pressed
функция обратного вызова для установки кнопки running
Ложь в любой точке, отдельно от вашего игрового цикла.
Например:
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
Вы должны продолжить до конца итерации, прежде чем она остановится.