2016-08-01 6 views
0

私はメモリゲームに取り組んでいます。私はカードの画像を2列に表示したい。 2番目の行の最初のカードを除いて、すべてのカードが正しく表示されます。このコードを実行するには、CodeSkulptorを使用する必要があります。プログラム全体はここにある: http://www.codeskulptor.org/#user41_a22429Vx58_2.py最初のコードを除く、すべての画像でコードが機能するのはなぜですか?

def draw(canvas): 
    global deck, cards, WIDTH, HEIGHT 
    num_start = 10 
    w = 67 
    h = 100 
    center_source = [w // 2, h // 2] 
    center_dest = [w // 2, h // 2] 
    for c in deck: 
     for card in cards: 
      if card == c: 
       if center_dest[0] <= WIDTH: 
        canvas.draw_image(cards[card], (center_source), (w , h), (center_dest), (w, h)) 
        center_dest[0] += w + 2 
       elif center_dest[0] > WIDTH: 
        center_dest = [w // 2, h // 2 + h] 
        canvas.draw_image(cards[card], (center_source), (w , h), (center_dest), (w, h *2)) 
        center_dest[0] += w + 2 
+0

リンクを – njzk2

+0

が動作していないので、あなたが引き分けを複製していない次のようにもロジックを再構築でき'if card == c:'なぜ? – njzk2

+0

@ njzk2リスト**デッキ**がシャッフルされているためです。プレイヤーがゲームを開始するたびに異なる位置にカードを置く必要があります。カードは辞書のキーです。 – Ekaterina1234

答えて

1

center_destは、その水平方向の位置をリセットする必要があるときにあなたのelif条件が1つのだけの時間をトリガします。これは、h * 2が不適切な描画を引き起こすところでcanvas.draw_image(cards[card], (center_source), (w , h), (center_dest), (w, h *2))が呼び出されたときです。

*2を削除すると機能します。

if center_dest[0] > WIDTH: 
    center_dest = [w // 2, h // 2 + h] 
canvas.draw_image(cards[card], (center_source), (w , h), (center_dest), (w, h)) 
center_dest[0] += w + 2 

が、それは任意の数の行に拡張への更新に変更するには::

if center_dest[0] > WIDTH: 
    center_dest[0] = w // 2 
    center_dest[1] += h 
+0

ありがとう@Sean McMillan – Ekaterina1234