簡體   English   中英

用python制作彈跳龜

[英]make bouncing turtle with python

我是 python 的初學者,我寫了這段代碼來制作帶有 python 龜的彈跳球它可以工作,但有一些錯誤,比如球消失

import turtle
turtle.shape("circle")
xdir = 1
x = 1
y = 1
ydir = 1
while True:
     x = x + 3 * xdir
     y = y + 3 * ydir
    turtle.goto(x , y)
    if x >= turtle.window_width():
        xdir = -1
    if x <= -turtle.window_width():
        xdir = 1
    if y >= turtle.window_height():
        ydir = -1
    if y <= -turtle.window_height():
        ydir = 1
    turtle.penup()
turtle.mainloop()

盡管您解決問題的方法有效(我的返工):

import turtle

turtle.shape("circle")
turtle.penup()

x, y = 0, 0
xdir, ydir = 3, 3
xlimit, ylimit = turtle.window_width() / 2, turtle.window_height() / 2

while True:
    x = x + xdir
    y = y + ydir

    if not -xlimit < x < xlimit:
        xdir = -xdir
    if not -ylimit < y < ylimit:
        ydir = -ydir

    turtle.goto(x, y)

turtle.mainloop()

從長遠來看,這是錯誤的方法。 在這種情況下,由於無限循環while Truemainloop()方法永遠不會被調用,因此沒有其他海龜事件處理程序處於活動狀態。 例如,如果我們想使用exitonclick()而不是mainloop() ,它就行不通。 而是考慮:

import turtle

turtle.shape("circle")
turtle.penup()

x, y = 0, 0
xdir, ydir = 3, 3
xlimit, ylimit = turtle.window_width() / 2, turtle.window_height() / 2

def move():
    global x, y, xdir, ydir

    x = x + xdir
    y = y + ydir

    if not -xlimit < x < xlimit:
        xdir = -xdir
    if not -ylimit < y < ylimit:
        ydir = -ydir

    turtle.goto(x, y)

    turtle.ontimer(move, 5)

turtle.ontimer(move, 5)

turtle.exitonclick()

在這里,我們已將控制權轉回主循環,並且運動在事件計時器上。 可以執行其他海龜事件,以便exitonclick()起作用。 在您將自己和您的烏龜編入一個角落之前,請考慮一下前進的方向。

您需要window_width()/2window_height()/2才能保持在窗口內。

IE。

if x >= turtle.window_width()/2:
    xdir = -1
if x <= -turtle.window_width()/2:
    xdir = 1
if y >= turtle.window_height()/2:
    ydir = -1
if y <= -turtle.window_height()/2:
    ydir = 1

您應該將turtle.penup() 放在while 循環之前,以使您的代碼更好更快。 這幾乎是一個錯誤!

你可以反彈你的牆,如果你想從上牆反彈,屏幕寬度為800,長度為600

from turtle import turtle
turtle=Turtle()
    def move(self)://This will move your ball in diagonal direction
        x_dir=self.xcor()+self.x
        y_dir=self.ycor()+self.y
        self.goto(x_dir,y_dir)
    def bounce(self)://This will bounce back
        self.y *=-1
turtle.bounce()

這段代碼正在運行,因為我是通過繼承來完成的。 您需要創建一個類,然后繼承所有屬性,然后在那里創建兩個方法,然后在主類中調用這些函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM