我正在使用海龟模块的Python,我试图做一个游戏。我正试着让一只乌龟射出另一只乌龟作为子弹。我想不出如何追踪射击龟的xcor()
和ycor()
,然后再把子弹龟运到那里。这是我的代码:
# 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')
发布于 2020-05-18 20:50:59
在这里,我完全修改了你的代码。这仍然是一个小问题,但这是因为turtle
模块本身。我不得不让球员掉头,但这很有效。
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()
另外,我建议用一颗移动的子弹来做一个游戏,使用海龟是不可取的。我建议吡咯。
希望这能有所帮助!
发布于 2020-05-18 21:53:36
不要相信试图在另一个图书馆卖给你的人给你的一个海龟例子。我并不是说游戏对这类程序没什么好处,只是海龟的能力经常被低估。
下面是你的代码重写,允许你旋转和射击-多个子弹在一次!为了保持示例的简单性,我抛出了您的增减速度功能:
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()
https://stackoverflow.com/questions/61881314
复制