我已經開始用python最近研究tkinter,並開始製作一個馬里奧式的遊戲,涉及一個玩家(矩形)移動,碰撞平臺等,並收集硬幣。我的玩家擊中地面的檢測系統涉及玩家座標的* .find_overlapping方法,如果他們重疊地面或者說每個人說另一個平臺,那麼它將玩家的座標設置爲在所述對象的頂部。我如何將一個列表中的值作爲if語句的範圍包含在另一個列表中?
def collide():
playerBox = screen.find_overlapping(screen.coords(player)[0], screen.coords(player)[1]
, screen.coords(player)[2], screen.coords(player)[3])
if playerBox in [(1, 3)]:
screen.coords(player, screen.coords(player)[0], screen.coords(root.floor)[1] - defaultHeight
, screen.coords(player)[2], screen.coords(root.floor)[1])
(這就是(1,3)返回重疊代表與地面(樓面玩家重疊),以及defaultHeight是56,如果你想知道,讓玩家的高度保持不變。)
但是,如果玩家與硬幣接觸,然後他們在地面下跌,並保持在表面之下。爲了解決這個問題,我已經取得了硬幣看起來像的對象開始列表(從旁邊的實際硬幣創建創建一個字典制造):
coinList = [4, 5, 6...] #For however many coins are made (As the first coin is the fourth object on screen, this may change though)
我希望能夠以包括此coinList進入if語句如上所示,類似於:
if playerBox in [(1, 3), (1, 3, coinList)]:
這不工作,但我不明白爲什麼或如何這可以工作。
我很樂意爲解決此問題提供任何其他建議!
在此先感謝。
PS:很抱歉,如果我的文章格式不正確或者信息不夠,請隨時索取更多信息。
你能給什麼'playerBox'將是一個例子(A值進行比較?一個包含值列表?一個包含元組的列表?)以及你在''in ...'子句中看起來像什麼(比如說,'[(1,3),(1,3,4,5,6)]' )?我不太清楚你真正想要得到什麼結果,說實話:) – Deneb
如果你使用Python 3.x,那麼你所要做的就是寫'if playerBox in [(1,3),(1 ,3,* coinList)]:'* star將把列表取消到元組中。 (如果這是你想要的) – Nf4r