如何将一个列表中的值作为if语句的范围包含在另一个列表中?

时间:2016-11-23 23:09:43

标签: python tkinter

我最近开始使用python查看tkinter,并开始制作一个马里奥风格的游戏,包括一个玩家(矩形)四处移动,与平台碰撞等等并收集硬币。

我对球员击球的检测系统涉及球员坐标的* .find_overlapping方法,如果它们与地面重叠,或者说是另一个平台,那么它将球员的坐标设置为在所述对象之上。

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)返回重叠表示玩家与地面(地板)重叠的地方,如果你想知道,则默认高度为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:很抱歉,如果我的帖子格式错误或信息不足,请随时根据需要提供更多信息。

1 个答案:

答案 0 :(得分:0)

find_overlapping返回与玩家矩形重叠的对象元组。你必须逐个比较每个元素

playerBox = screen.find_overlapping(*screen.coords(player))

all_elements = [1, 3] + coinList  

found = False
for x in playerBox:
    if x in all_elements:
       found = True
       break

if found:
   screen.coords(player, ...)

或者您可以使用set()

playerBox = screen.find_overlapping(*screen.coords(player))

all_elements = [1, 3] + coinList  

if set(playerBox) & set(all_elements):
    screen.coords(player, ...)