第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python選擇特定區(qū)間的隨機數(shù)

Python選擇特定區(qū)間的隨機數(shù)

慕運維8079593 2021-11-16 18:20:23
所以我正在制作一個棒球從上面掉下來的 PyGame,底部的用戶必須接住球。球以隨機速度下落,但我很難讓球以不同速度下落。例如,我當前的球代碼是:def update(self):    if self.is_falling:        """Move the ball down."""        self.y += random.randint(10, 200) / 100        self.rect.y = self.y在這里,當我運行程序時,球以不同的速度下落,但幾乎沒有什么不同。如果我將數(shù)字更改為 (10, 20000) / 100,那么每個球都會掉得非???。原因是什么?似乎隨機數(shù)不是那么隨機。我使用的功能有誤嗎?我想讓每個球以非常不同的速度下降,例如一個非常快,另一個非常慢。而且我希望它是隨機數(shù),以便用戶可以以多種不同的速度進行游戲...我想知道,是否有可以在生成的隨機數(shù)之間設置特定間隔的隨機函數(shù)?或者我應該嘗試不同的方法?如果是這樣,我該怎么做?我是 Python 的初學者,所以如果你能盡可能簡單地解釋它,那將不勝感激!
查看完整描述

3 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

稍微調整一下數(shù)字,20000 與 200 相比有很大的跳躍。因為您現(xiàn)在得到的值是 10/100 和 200/100。這是 0.1 到 2 像素,所以我不認為它們會有很大不同。你跳到 10/100 到 20000/100,這是一個巨大的速度,大約是 200 像素上限與原始 2。所以這就是你的問題??赡苁?200 到 2000 甚至 200 到 2500 的范圍。你不需要像你說的球開始很快下降那樣大的調整。我以前也做過類似的游戲,我可以說你只需要稍微調整一下數(shù)字。


查看完整回答
反對 回復 2021-11-16
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

如果這是 Python 2,則有問題

random.randint(10, 200) / 100

因為除法將在整數(shù)數(shù)學中完成。你應該使用

random.randint(10, 200) / 100.

另一個問題是您在每次更新(可能是每一幀)時選擇隨機步驟,這不會產生速度的錯覺,而是更多的隨機抖動運動。選擇一個隨機速度可能會更好,但至少在幾幀甚至整個秋季動畫中保持相同。


查看完整回答
反對 回復 2021-11-16
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

部分問題是亞像素距離。我認為你的主要問題是你的y動作??纯催@個方程self.y +=,有一半的時間它會導致像素距離只有一個像素。將其添加到 self.rect 時,舍入(或截斷)將使小于 1 像素的數(shù)量消失。比如生成的隨機整數(shù)是99,再除以100,就是0.99一個像素。在pythonint(0.99)中為零。因此,大約一半的時間,移動為零,另一半,移動只有 1 個像素,因為int(150/100)=> 1。(每約 190 個時刻中就有一個是 2 像素。)


def update(self):

    if self.is_falling:

        """Move the ball down."""

        self.y += random.randint(10, 200) / 100

        self.rect.y = self.y

同樣正如@6502 指出的那樣,這將產生生澀的隨機運動。最好在 class 中生成每次更新像素的速度__init__,并堅持下去。


def __init__( self, ... ):

    ...

    self.fall_speed = random.randint(10, 200)   # pixels per update


def update(self):

    if self.is_falling:

        """Move the ball down."""

        self.y += self.fall_speed

        self.rect.y = self.y

我喜歡根據(jù)實時計算讓事情發(fā)生變化。這需要對象速度和幀間時間來計算對象移動了多少。我喜歡這個,因為如果你想在程序中添加重力(或其他),很容易計算新的位置。


class FallingSprite( pygame.sprite.Sprite ):

    """ A falling sprite.  Falls at a constant velocity in real-time """

    def __init__( self, image ):

        pygame.sprite.Sprite.__init__( self )

        self.image       = image

        self.rect        = self.image.get_rect()

        self.fall_speed  = random.randint(10, 200) # pixels / second

        self.last_update = int( time.time() * 1000.0 )

        self.rect.center = ( random.randrange( 0, WINDOW_WIDTH ), 0 )  


    def update( self ):

        # There may have been movement since the last update

        # so calculate the new position (if any)

        if ( self.fall_speed > 0 ):

            time_now    = int( time.time() * 1000.0 )

            time_change = time_now - self.last_update      # How long since last update?

            if ( time_change > 0 ):

                distance_moved   = time_change * self.fall_speed / 1000

                now_x, now_y     = self.rect.center        # Where am I, right now

                updated_y        = now_y + distance_moved

                # Did we fall off the bottom of the screen?

                if ( updated_y > WINDOW_HEIGHT ):

                    # sprite disappears

                    self.kill()

                else:

                    self.rect.center = ( now_x, updated_y )

                    self.last_update = time_now


查看完整回答
反對 回復 2021-11-16
  • 3 回答
  • 0 關注
  • 291 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號