2016-11-23 6 views
0

私は最近pythonでtkinterを調べ始めました。プレーヤー(矩形)が動き回ったり、プラットフォームなどに衝突したり、コインを集めたりするマリオ風のスタイルのゲームを始めました。あるリストの値をifステートメントの範囲として別のリストに含めるにはどうすればよいですか?

地面に当たったプレイヤーの検出システムは、プレーヤーの座標の* .find_overlappingメソッドを使用します。地面が重なっている場合や、言い換えれば別のプラットフォームの場合は、y座標を前記物体の上にある。

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で返される場合。)

しかし、プレイヤーがコインと接触している場合、彼らは地面に落下し、表面の下に留まります。私はif文の中にこのcoinListを含めることができるようにしたい

coinList = [4, 5, 6...] #For however many coins are made (As the first coin is the fourth object on screen, this may change though) 

:この問題を解決するために、私は次のようになります作られたコインの(実際のコインの作成と一緒に作成した辞書から作られた)オブジェクト開始リストを持っています

if playerBox in [(1, 3), (1, 3, coinList)]: 

これはうまくいかないのですが、なぜこれが機能するのか理解できません。

私はこの問題を解決するための他の提案がありますか?

ありがとうございます。

PS:申し訳ありません投稿のフォーマットが間違っているか、十分な情報がない場合は、必要に応じて詳細情報をお気軽にお尋ねください。

+0

は、あなたが(値をplayerBox'がどうなるか 'の例を与えることができます使用することができ、一つ一つ

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, ...) 

またはすべての要素を比較する必要がありますか?値を含むリストを(1、3)、(1、3、4、5、6)]のように見えるようにするには? )?あなたが本当に正直である結果として得たいと思っているものはあまり確かではありません:) – Deneb

+0

Python 3.xを使用している場合、あなたがする必要があるのは 'if playerBox in [(1,3)、(1 、3、* coinList)]: '* starはリストをタプルにパックしません。 (これが欲しいのなら) – Nf4r

答えて

0

find_overlappingは、プレーヤーrectをオーバーラップするオブジェクトのタプルを返します。あなたはset()

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

all_elements = [1, 3] + coinList 

if set(playerBox) & set(all_elements): 
    screen.coords(player, ...) 
関連する問題