2015-07-03 60 views
0

抱歉,模糊的標題,我不確定如何描述我的問題。RNG不符合我的預期

我正在製作一個遊戲,其中包含大量隨機在屏幕上移動的細胞,但問題是它們似乎都傾向屏幕的左上角。不僅僅是我變得不幸,他們總是走到左上方。

這裏是有問題的代碼:

for cell in cell_list: 

      direction = randint(0, 3) 

      if direction == 0: 
        cell.rect.x += cell.speed 
      elif direction == 1: 
         cell.rect.x -= cell.speed 
      elif direction == 2: 
        cell.rect.y += cell.speed 
      elif direction == 3: 
        cell.rect.y -= cell.speed 

這裏是我的全碼:http://pastebin.com/3hK4s2qL(使用Python 3.4)

+3

您需要削減代碼,以便只包含不工作的部分。如果它的顏色不相關,那麼可以將顏色填充。 – TankorSmash

+0

'TypeError:super()至少需要1個參數(0給出)'這意味着這可能不是最新版本。請檢查 –

+0

哎呀,我的壞,我發誓我只把非工作部分...讓我解決這個問題。另外,我正在使用Python 3,並且不需要在該超類參數中傳遞 –

回答

3

有什麼不妥的隨機數發生器。 cell.rect.xcell.rect.y是整數,而cell.speed不是。當您將cell.speed添加到cell.rect.xcell.rect.y時,結果是四捨五入的 - 可能具有底線函數,因此偏向左上角。請注意,如果您將單元速度硬編碼爲1(或任何整數),則問題會消失。如果你想保持細胞的速度小的變化,你可以創建cell.xcell.y,然後做到這一點:

for cell in cell_list: 
    direction = randint(0, 3) 

    if direction == 0: 
     cell.x += cell.speed 
    elif direction == 1: 
     cell.x -= cell.speed 
    elif direction == 2: 
     cell.y += cell.speed 
    elif direction == 3: 
     cell.y -= cell.speed 
    cell.rect.x = cell.x 
    cell.rect.y = cell.y 

這樣一來,即使顯示器被四捨五入爲整數,cell.xcell.y跟蹤的「真實」的位置,不會有偏見。如果你不需要有小的速度變化,只需使用randint來生成它。

+0

正確的解決方案。你也許可以更進一步,製作'x'和'y'屬性,自動更新'cell.rect.x'和'cell.rect.y'。 – sloth