Моя черепаха не обнаруживает входные данные, и она может просто пройти за границу - PullRequest
3 голосов
/ 12 июня 2019

Итак, я вообще не могу двигать свою черепаху, хотя для этого есть функции. И когда я мог, когда он достигал границы, он просто продолжал идти. Я попытался изменить положение функций, но это не работает. У меня есть все функции для этого, и они работали в прошлом, я не знаю, что заставило их перестать работать. Кроме того, контакт между черепахой и границей ничего не делает.

  import turtle, os, math
    #setting up the dimensions of the screen + color

    wn = turtle.Screen()
    wn.screensize(500,500)
    wn.title("Mario vs the turtles")
    wn.bgcolor("white")
    border_pen = turtle.Turtle()
    border_pen.speed(0)
    border_pen.color("black")
    border_pen.penup()
    border_pen.setposition(-350,-350)
    border_pen.pendown()
    border_pen.pensize(3)
    for side in range (4):
        border_pen.fd(600)
        border_pen.lt(90)
    border_pen.hideturtle()
    score_mario=0
    hearts_mario=3
    #score
    score = turtle.Turtle()
    score.speed(0)
    score.color("black")
    score.penup()
    score.hideturtle()
    score.goto(50,300)
    score.pendown()
    score.write("Score: 0 Hearts: 3", align="center", font=("Courier", 24, "normal"))
    #Main game loop
    #color of the turtle, speed, two variables for the position
    mario=turtle.Turtle()
    mario.shape("turtle")
    colors = ['red', 'blue', 'green', 'purple', 'yellow', 'orange', 'black']
    mario.penup()
    mario.hideturtle()
    mario.goto(-320,-320)
    mario.showturtle()
    simon=turtle.Turtle()
    simon.shape("turtle")
    simon.color("black")
    simon.penup()
    simon.hideturtle()
    simon.setposition(-270,-320)
    simon.showturtle()
    while hearts_mario>0:
     mario.ycor==simon.ycor
    x,y=mario.position()
    x,y=simon.position()
    while simon.xcor<500 and simon.xcor>-500:
        simon.setheading(180)
        mario.forward(100)
    mario.speed(0)
    mario.shapesize(stretch_wid=1, stretch_len=1)


    def jump():
        cor1=mario.ycor()
        cor1+=10
        mario.delay=2
        mario.setposition(x,cor1)
        cor1-=10
        mario.setposition(x,cor1)


    def left():
        mario.setheading(180)
        mario.forward(100)


    def right():
        mario.setheading(0)
        mario.forward(100)


    def escape():
        wn.bye()


    def reset():
        mario.reset()
    if mario.xcor==simon.xcor and mario.ycor==simon.ycor:
         hearts_mario=2

    #all these functions are for movement/boundaries
    #boundaries
    if mario.xcor<=border_pen.xcor and mario.ycor<=border_pen.ycor:
         mario.setposition(250,250)



    if  mario.setheading(180) and mario.forward (100):
        turtle.register_shape("marioleft.gif")
        mario.shape("marioleft.gif")

    turtle.onkey(left, "Left")
    turtle.onkey(right, "Right")
    turtle.onkey(escape, "Escape")
    turtle.onkey(reset, "r")
    turtle.onkey(jump, "space")
    turtle.listen()
    turtle.mainloop()

1 Ответ

1 голос
/ 13 июня 2019

Я не знаю, что заставило их перестать работать

Мне трудно поверить, что этот код когда-либо работал. Кажется, это Франкенпаста битов от других программ, которые ожидают хорошего грозового шторма. Например:

 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()
...