Я не знаю, что заставило их перестать работать
Мне трудно поверить, что этот код когда-либо работал. Кажется, это Франкенпаста битов от других программ, которые ожидают хорошего грозового шторма. Например:
mario.ycor==simon.ycor
while simon.xcor<500 and simon.xcor>-500:
if mario.xcor==simon.xcor and mario.ycor==simon.ycor:
if mario.xcor<=border_pen.xcor and mario.ycor<=border_pen.ycor:
mario.xcor()
и .ycor()
являются методами, mario.xcor
и .ycor
ничего не делают. Кроме того:
if mario.setheading(180) and mario.forward (100):
turtle.register_shape("marioleft.gif")
mario.shape("marioleft.gif")
И mario.setheading(180)
, и mario.forward(100)
всегда возвращают None
, поэтому этого никогда не произойдет. Там много логики настройки, но нет реального цикла выполнения. Я переработал код как можно лучше в играбельную игру, хотя, возможно, это не та игра, которую вы намеревались:
from turtle import Screen, Turtle, mainloop
FONT = ("Courier", 24, "normal")
def jump():
screen.onkey(None, 'space') # disable handler inside handler
if mario.ycor() == 0: # if mario isn't already in the air
mario.forward(150)
mario.backward(150)
screen.onkey(jump, 'space')
def left():
x = mario.xcor()
if x > -250:
mario.setx(x - 10)
def right():
x = mario.xcor()
if x < 250:
mario.setx(x + 10)
def escape():
screen.bye()
def reset():
global hearts_mario
mario.goto(0, 0)
hearts_mario = 3
score.write("Score: {} Hearts: {}".format(score_mario, hearts_mario), align="center", font=FONT)
# setting up the dimensions of the screen + color
screen = Screen()
screen.screensize(650, 650)
screen.title("Mario vs the turtles")
border_pen = Turtle()
border_pen.hideturtle()
border_pen.speed('fastest')
border_pen.pensize(3)
border_pen.penup()
border_pen.setposition(-275, -275)
border_pen.pendown()
for _ in range(4):
border_pen.fd(550)
border_pen.lt(90)
# score
score_mario = 0
hearts_mario = 3
score = Turtle()
score.hideturtle()
score.speed('fastest')
score.penup()
score.sety(300)
score.pendown()
score.write("Score: {} Hearts: {}".format(score_mario, hearts_mario), align="center", font=FONT)
# color of the turtle, speed, two variables for the position
mario = Turtle()
mario.hideturtle()
mario.shape("turtle")
mario.color('dark green', 'light green')
mario.speed('slowest')
mario.penup()
mario.setheading(90)
mario.showturtle()
simon = Turtle()
simon.hideturtle()
simon.shape("turtle")
simon.color('black', 'red')
simon.penup()
simon.setx(-250)
simon.showturtle()
# Main game loop
def game_loop():
global hearts_mario
if simon.xcor() < -250 or simon.xcor() > 250:
simon.setheading(180 - simon.heading())
simon.forward(10)
if mario.distance(simon) < 5:
hearts_mario -= 1
score.undo()
score.write("Score: {} Hearts: {}".format(score_mario, hearts_mario), align="center", font=FONT)
if hearts_mario > 0:
screen.ontimer(game_loop, 100)
screen.onkey(left, "Left")
screen.onkey(right, "Right")
screen.onkey(escape, "Escape")
screen.onkey(reset, "r")
screen.onkey(jump, "space")
screen.listen()
game_loop()
mainloop()