<p>下面是我对您的代码的重新编写,它试图简化它,添加向下运动,并让它测试楼层边界:</p>
<pre><code>from turtle import Turtle, Screen
CELL_SIZE = 32
WIDTH, HEIGHT = 30 * CELL_SIZE, 24 * CELL_SIZE # screen size in cell units
PLATFORM_HEIGHT = 2 * CELL_SIZE # height of platform
LIMIT = PLATFORM_HEIGHT - HEIGHT / 2
STAMP_UNIT = 20 # turtle's default cursor size
def renderPlatform():
""" Go to the bottom of the screen and stamp the platform """
turtle = Turtle('square', visible=False)
turtle.speed('fastest')
turtle.penup()
turtle.goto(0, PLATFORM_HEIGHT / 2 - HEIGHT / 2)
turtle.setheading(90)
turtle.shapesize(WIDTH / STAMP_UNIT, PLATFORM_HEIGHT / STAMP_UNIT)
turtle.color('yellow')
turtle.stamp()
def forward():
character.forward(CELL_SIZE)
def backward():
character.backward(CELL_SIZE)
def up():
character.sety(character.ycor() + CELL_SIZE)
def down():
character.sety(character.ycor() - CELL_SIZE)
if character.ycor() - CELL_SIZE / 2 <= LIMIT: # test for collision with platform
character.stamp() # leave a marker
character.hideturtle()
character.goto(0, CELL_SIZE / 2) # start anew floating downward
character.showturtle()
screen.ontimer(down, 1000) # move character downward once a second
screen = Screen()
screen.setup(WIDTH, HEIGHT)
screen.title('Tutorial Game')
screen.bgcolor('green')
renderPlatform()
character = Turtle('square')
character.shapesize(CELL_SIZE / STAMP_UNIT)
character.penup()
character.color('red')
character.sety(CELL_SIZE / 2) # might want to start higher in actual game
screen.onkey(forward, 'd')
screen.onkey(backward, 'a')
screen.onkey(up, 'space')
screen.listen()
screen.ontimer(down, 1000) # start character falling
screen.mainloop()
</code></pre>
<p>希望您可以在解决方案中使用这些逻辑。</p>
<p><a href="https://i.stack.imgur.com/8rxxW.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/8rxxW.png" alt="enter image description here"/></a></p>
<p>您需要修改您的<code>up()</code>逻辑,将移动限制在阶段顶部。对于侧面,同上<code>forward()</code>和{<cd3>}。</p>