首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跟踪海龟的位置,让另一只乌龟去那里

跟踪海龟的位置,让另一只乌龟去那里
EN

Stack Overflow用户
提问于 2020-05-19 00:38:01
回答 2查看 265关注 0票数 1

我正在使用海龟模块的Python,我试图做一个游戏。我正试着让一只乌龟射出另一只乌龟作为子弹。我想不出如何追踪射击龟的xcor()ycor(),然后再把子弹龟运到那里。这是我的代码:

代码语言:javascript
运行
复制
# Projectiles

bullet = turtle.Turtle()
bullet.hideturtle()
bullet.color('purple')
bullet.shape('circle')
bullet.penup()
bullet.shapesize(0.5, 0.5)

bulletspeed = 0


# The player  

player = turtle.Turtle()
player.speed(0)
player.color('blue')
player.shape('triangle')
player.penup()
player.setposition(0, -250)
player.setheading(90)

x = player.xcor()
y = player.ycor()
ph = player.heading()

def right():
    player.right(30) 

def left():
    player.left(30)

def increasespeed():
    global speed
    speed += 1

def decreasespeed():
    global speed
    speed -= 1

def bulletmove():
    global bulletspeed
    bullet.pos() == player.pos()
    bullet.showturtle()
    bulletspeed += 10


# Keybindings

turtle.listen()
turtle.onkey(left, 'Left')
turtle.onkey(right, 'Right')
turtle.onkey(increasespeed, 'Up')
turtle.onkey(decreasespeed, 'Down')
turtle.onkey(bulletmove, 'space')
EN

回答 2

Stack Overflow用户

发布于 2020-05-19 04:50:59

在这里,我完全修改了你的代码。这仍然是一个小问题,但这是因为turtle模块本身。我不得不让球员掉头,但这很有效。

代码语言:javascript
运行
复制
import turtle

# Projectiles

bullet = turtle.Turtle()

bullet.color('purple')
bullet.penup()
bullet.speed("fastest")
bullet.hideturtle()
bullet.shape("circle")

bullet.setposition(0, -250)



bulletspeed = 0

s = turtle.Screen()
# The player  


player = turtle.Turtle()
player.speed("fastest")
player.color('blue')
player.shape('triangle')
player.penup()
player.setposition(0, 0)
player.setheading(90)
#player.hideturtle()
x = player.xcor()
y = player.ycor()
ph = player.heading()
player.right(180)

speed = 5

def right():
    player.right(30) 

def left():
    player.left(30)

def increasespeed():
    global speed
    speed += 1

def decreasespeed():
    global speed
    speed -= 1


def bulletmove():
    global bulletspeed
    bullet.hideturtle()
    turtlex = 0
    turtley = -250
    bullet.setposition(turtlex, turtley)

    bullet.reset()
    bullet.penup()

    bullet.goto(0, -250)




# Keybindings

turtle.listen()
turtle.onkey(left, 'Left')
turtle.onkey(right, 'Right')
turtle.onkey(increasespeed, 'Up')
turtle.onkey(decreasespeed, 'Down')
turtle.onkey(bulletmove, 'space')

#s.tracer(0, 0)
s.exitonclick()

另外,我建议用一颗移动的子弹来做一个游戏,使用海龟是不可取的。我建议吡咯

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2020-05-19 05:53:36

不要相信试图在另一个图书馆卖给你的人给你的一个海龟例子。我并不是说游戏对这类程序没什么好处,只是海龟的能力经常被低估。

下面是你的代码重写,允许你旋转和射击-多个子弹在一次!为了保持示例的简单性,我抛出了您的增减速度功能:

代码语言:javascript
运行
复制
from turtle import Screen, Turtle

def right():
    player.right(30)
    screen.update()

def left():
    player.left(30)
    screen.update()

def move_bullet(bullet):
    screen.onkey(None, 'space')  # disable handler inside handler

    if bullet.distance(player) < 300:
        bullet.forward(10)
        screen.ontimer(lambda: move_bullet(bullet), 100)
    else:
        bullet.hideturtle()
        bullets.append(bullet)  # reduce, reuse & recycle

    screen.update()
    screen.onkey(fire_bullet, 'space')  # reenable handler

def fire_bullet():
    bullet = bullets.pop() if bullets else bullet_prototype.clone()

    bullet.setposition(player.position())
    bullet.setheading(player.heading())
    bullet.showturtle()

    move_bullet(bullet)

screen = Screen()
screen.tracer(False)

bullet_prototype = Turtle()
bullet_prototype.hideturtle()
bullet_prototype.shape('circle')
bullet_prototype.shapesize(0.5)
bullet_prototype.color('purple')
bullet_prototype.penup()

bullets = []

player = Turtle()
player.shape('triangle')
player.color('blue')
player.penup()
player.setheading(90)

screen.onkey(left, 'Left')
screen.onkey(right, 'Right')
screen.onkey(fire_bullet, 'space')
screen.listen()

screen.update()
screen.mainloop()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61881314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档