如何让Turtle画布屏幕与Turtle模块一起移动?

2024-05-12 23:10:36 发布

您现在位置:Python中文网/ 问答频道 /正文

对于一个类项目,我试图用Python(3.7.3)Turtle制作一个类似流氓的游戏。我想知道画布屏幕是否可以集中在我的turtle“player”模块上,这样它就不会超出用户的视野,用户也不必使用滚动条。在

我试着寻找一些不同的解决办法,但似乎没有一个是关于我的问题的。我也试过查看Python网站上的turtle部分,但我不知道什么会有帮助。在

# Draw border
border_pen = turtle.Turtle()
border_pen.speed(0)
border_pen.color('black')
border_pen.penup()
border_pen.setposition(-600,-600)
border_pen.pendown()
border_pen.pensize(3)
for side in range(4):
    border_pen.fd(600)
    border_pen.lt(90)
border_pen.hideturtle()

上面是我用来制作画布的代码。如你所见,它相当大(它需要)。起初我并不认为这是个问题,但现在我发现这是一个相当困难的问题。我的模块,如我所说,可以离开屏幕。在


Tags: 模块项目用户游戏屏幕画布playerturtle
1条回答
网友
1楼 · 发布于 2024-05-12 23:10:36

下面是一个在tkinter级别操作滚动以获得所需行为的示例。在本例中,我保持海龟静止在屏幕中央,但使用箭头键移动其下方的景观。在

### Generate a landscape ...和{}之间的代码来自于我之前回答的一个SO问题,它是为了创建一个有趣的分形景观来探索:

from turtle import Turtle, Screen
from random import random

MAGNIFICATION = 10

def move_left():
    canvas.xview_scroll(-1, "units")
    turtle.setx(turtle.xcor() - MAGNIFICATION)

def move_right():
    canvas.xview_scroll(1, "units")
    turtle.setx(turtle.xcor() + MAGNIFICATION)

def move_up():
    canvas.yview_scroll(-1, "units")
    turtle.sety(turtle.ycor() + MAGNIFICATION)

def move_down():
    canvas.yview_scroll(1, "units")
    turtle.sety(turtle.ycor() - MAGNIFICATION)

screen = Screen()
width, height = screen.screensize()
screen.screensize(width * MAGNIFICATION, height * MAGNIFICATION)

canvas = screen.getcanvas()
canvas.config(xscrollincrement=str(MAGNIFICATION))
canvas.config(yscrollincrement=str(MAGNIFICATION))

# turtle initialization
turtle = Turtle("turtle", visible=False)
turtle.width(MAGNIFICATION)
turtle.resizemode('auto')

### Generate a landscape to explore

screen.tracer(False)

RULES = {'x':'x+yf+', 'y':'-fx-y', 'f':'f', '+':'+', '-':'-'}
sub_string = string = "fx"
LEVEL = 13

for _ in range(LEVEL):

    turtle.pencolor(random(), random(), random())

    for character in sub_string:
        if character == '+':
            turtle.right(90)
        elif character == '-':
            turtle.left(90)
        elif character == 'f':
            turtle.forward(5 * MAGNIFICATION)

    screen.update()

    full_string = "".join(RULES[character] for character in string)
    sub_string = full_string[len(string):]
    string = full_string

screen.tracer(True)

### Finished generating a landscape to explore

turtle.penup()
turtle.home()
turtle.setheading(90)
turtle.color('dark green', 'light green')
turtle.showturtle()

screen.onkey(move_left, "Left")
screen.onkey(move_right, "Right")
screen.onkey(move_up, "Up")
screen.onkey(move_down, "Down")
screen.listen()

screen.mainloop()

滚动条反映了整个空间的移动。不幸的是,滚动条仍然是活动的,并且会使东西倾斜(使用箭头键代替),它需要在景观边缘附近工作,但这只是一个例子,表明如果你花时间探索tkinter/Tk基础,几乎任何事情都是可能的。在

enter image description here

相关问题 更多 >