Я разработал 2 игры, обрабатываемые 2 функциями (в отдельном модуле), которые вызываются из MAIN:
F1: играет в игру «Зарисовка эскиза», в которой пользовательские действия используются для перемещения
Черепахи для рисования
F2: Играет в черепаховую гонку, где 5 Черепахи (я
использовал список для управления 5 объектами) движутся со случайной скоростью, чтобы увидеть, кто
победит.
Проблема :
- Игры работают нормально по отдельности на первой итерации, но у меня в MAIN есть цикл, в котором пользователь может выбирать игры несколько раз. На второй итерации появляется экран, но я не вижу черепах, и когда я нажимаю, я получаю ошибку Turtle Terminator.
- Я инициализировал create_screen () в отдельном файле config.py, который я импортирую в каждый FN для создания экрана. Затем я использую exitonclick(), чтобы завершить отображение. Mainloop() здесь не сработал. (Следует ли мне использовать Global — просто хотел посмотреть, как заставить его работать БЕЗ Global)
- Мне нужно, чтобы FN1 прекратил прослушивание, и спросить пользователя, хочет ли он FN2, затем перейти к FN2, и я Кажется, это невозможно сделать без exitonclick() на FN1. Как я могу сохранить экран живым, отображаемым и готовым к FN2? Это единственная причина, по которой я использую Screen в файле конфигурации и создаю его с помощью FN. Я уверен, что способ есть, просто я его еще не знаю.
Скелет кода: я загружаю config.py в модуль FN и игровые функции из MAIN
# Module : config.py
from turtle import Turtle, Screen
squad = []
for i in range(0, 5): # List of Turtle Objects available to all Modules
raphael = Turtle()
raphael.speed(0)
squad.append(raphael)
def create_screen():
"""Creates and Returns a screen Object"""
screen = Screen()
screen.screensize(400, 400)
screen.colormode(255)
return screen
# Module : gamefunction.py
from config import squad, create_screen
def etch_sketch_game():
"""Plays the Etch a Sketch Game"""
screen_fn = create_screen()
def forwards(): # Other FNs designed but not included for this Question
squad[0].fd(30)
screen_fn.listen()
screen_fn.onkey(key="w", fun=forwards)
screen_fn.exitonclick()
def turtle_race(): # Only adde
"""Plays the Turtle Race Game"""
screen_fn = create_screen()
squad[0].setpos(-200, 30)
squad[1].setpos(-200, 20)
squad[2].setpos(-200, 0)
squad[3].setpos(-200, -20)
squad[4].setpos(-200, -30)
def forwards(): # Other FNs designed but not included for this Question
squad[0].fd(30)
screen_fn.onkey(key="w", fun=forwards)
screen.exitonclick()
Подробнее здесь: https://stackoverflow.com/questions/785 ... nt-listene