Как сбросить игру, когда моя черепаха сталкивается со спрайтом?

Название объясняет, что я хочу сделать с этой программой, когда моя черепашка попадает в круг, игра сбрасывается/заканчивается.

Вот код космического корабля (вашего персонажа):

move = turtle.Turtle()

showturtle()
turtle.hideturtle()
move.setposition(-500,0)
move.pencolor('cyan')
move.fillcolor("blue")
move.penup()
move.speed()
move.shapesize(3,3,3)



turtle.fillcolor("blue")
turtle.shapesize(3,3,3)
outline = ['white', 'green', 'red', 'blue', 'purple', 'yellow', 'orange']
colors = ['red', 'blue', 'green', 'purple', 'yellow', 'orange', 'black']


def up():
   move.forward(25)

def down():
   move.backward(15)

def left():
    move.left(30)


def right():
    move.right(30)
 


def clickleft(x,y):
    move.fillcolor(random.choice(colors))

def clickright(x,y):
    move.pencolor(random.choice(outline))


    
turtle.listen()

turtle.onscreenclick(clickleft, 1)
turtle.onscreenclick(clickright, 3)

turtle.onkey(up, 'Up')
turtle.onkey(down, 'Down')
turtle.onkey(left, 'Left')
turtle.onkey(right, 'Right')

А вот и астероид (спрайт, при попадании в который происходит сброс игры):

asteroid_prototype = Turtle()
asteroid_prototype.hideturtle()
asteroid_prototype.color('grey')
asteroid_prototype.shape('circle')
asteroid_prototype.shapesize(ASTEROID_RADIUS / CURSOR_SIZE)
asteroid_prototype.speed('fastest')  # because 15 isn't a valid argument
asteroid_prototype.penup()

asteroids = []

for _ in range(NUMBER_ASTEROIDS):
    asteroid = asteroid_prototype.clone()
    asteroid.setposition( \
        randint(ASTEROID_RADIUS - WIDTH, WIDTH - ASTEROID_RADIUS), \
        randint(ASTEROID_RADIUS - HEIGHT, HEIGHT - ASTEROID_RADIUS) \
    )

    while any(map((lambda a: lambda b: a.distance(b) < ASTEROID_RADIUS)(asteroid), asteroids)):
        asteroid.setposition( \
            randint(ASTEROID_RADIUS - WIDTH, WIDTH - ASTEROID_RADIUS), \
            randint(ASTEROID_RADIUS - HEIGHT, HEIGHT - ASTEROID_RADIUS) \
        )

    asteroid.showturtle()
    asteroids.append(asteroid)

Мне это нужно, чтобы при перемещении по asteroid_prototype игра сбрасывалась или, по крайней мере, заканчивалась. заранее спасибо


person avid2474    schedule 05.12.2020    source источник


Ответы (1)


Вы можете попробовать создать функцию для перемещения всего в исходное положение (я назвал ее startPos). Я бы поместил все позиции черепах, сбросил все подсчеты очков до 0 и очистил все списки врагов и т. Д. Внутри этой функции. Затем вызовите его, когда asteroid_prototype и ваша черепаха окажутся в одном положении. Например, внутри вашего основного цикла

for i in range(asteroids):
    if i.xcor == turtle.xcor and i.ycor == turtle.ycor:
        startPos()

Вы всегда можете немного изменить параметры, чтобы они не находились в одной и той же позиции if i.xcor > turtle.xcor - 5 and i.xcor < turtle.xcor + 5 and i.ycor > turtle.ycor - 5 and i.ycor < turtle.ycor + 5 или что-то в этом роде. Вы можете сделать параметры равными радиусу черепахи/астероида (я выбрал 5 как произвольное число).

Я надеюсь, что это поможет и написано достаточно ясно.

person Lilwen    schedule 17.12.2020