【问题标题】:How to cause collision in Python Turtle如何在 Python Turtle 中引起碰撞
【发布时间】:2018-06-15 22:59:25
【问题描述】:

我是 Python 3 的新手,我目前正在制作一个海龟游戏,如果你击中一只红海龟,你就会从头开始。我不知道如何让玩家移动以使它们发生碰撞。我的代码:

from turtle import Turtle, Screen

wn = Screen()
wn.bgcolor("black")

artist = Turtle()
artist.color('white')
artist.speed(0)
artist.penup()
artist.setposition(-300, -300)
artist.pendown()
artist.pensize(4)
for side in range(4):
    artist.fd(600)
    artist.lt(90)
artist.hideturtle()

player = Turtle()
player.color("white")
player.penup()
player.setposition(260, 260)
player.speed(10)

enemy = Turtle('circle')
enemy.color('red')
enemy.penup()
enemy.speed(9)

if player.distance(enemy) < 5:
    player.hideturtle()
    player.setposition(260, 260)
    player.showturtle()

【问题讨论】:

  • 请用正确的制表符缩进编辑您的问题

标签: python python-3.x turtle-graphics


【解决方案1】:

我不知道如何让它们碰撞并移动玩家,它不会 移动。

由于 OP 使用了正确的海龟导入(用于海龟的面向对象 API)并使用 distance() 方法而不是像许多人一样重新实现一个,+1!

下面我重新编写了代码以提供玩家移动,以便它最终可以与敌人发生碰撞。为了使这个示例保持简约,我将边界设置为圆形而不是原来的矩形:

from turtle import Screen, Turtle

RADIUS = 300
CURSOR_RADIUS = 10
CURSOR_DIAMETER = CURSOR_RADIUS * 2
START = RADIUS / 2 ** 0.5 - CURSOR_DIAMETER

def move_forward():
    screen.onkey(None, 'Up')  # disable handler inside handler

    player.forward(CURSOR_RADIUS)
    if player.distance(0, 0) >= RADIUS:
        player.undo()

    if player.distance(enemy) < CURSOR_RADIUS:
        player.hideturtle()
        player.setposition(START, START)
        player.showturtle()

    screen.onkey(move_forward, 'Up')  # reenable handler

screen = Screen()
screen.bgcolor('black')

artist = Turtle(visible=False)
artist.color('white')
artist.speed('fastest')
artist.pensize(4)

artist.penup()
artist.sety(-RADIUS)
artist.pendown()

artist.circle(RADIUS)

artist.penup()
artist.setposition(START, START)
artist.pendown()

artist.dot(CURSOR_DIAMETER, 'green')

enemy = Turtle('circle')
enemy.color('red')
enemy.penup()

player = Turtle()
player.speed('fastest')
player.color('white')

player.penup()
player.setposition(START, START)
player.setheading(player.towards(enemy))

screen.onkey(lambda: player.right(45), 'Right')
screen.onkey(lambda: player.left(45), 'Left')
screen.onkey(move_forward, 'Up')

screen.listen()
screen.mainloop()

您可以使用箭头键控制播放器。现在需要让敌人做一些事情,而不仅仅是坐在中间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2014-06-26
    • 2014-04-13
    • 1970-01-01
    • 2012-11-27
    相关资源
    最近更新 更多