2016-08-01 53 views
0

我正在做一個記憶遊戲。我想顯示兩行卡片的圖像。除了第二行中的第一張卡之外,所有卡均正確顯示。運行這個代碼需要使用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

'如果card == c:'爲什麼? – njzk2

+0

@ njzk2因爲列表**牌組**被洗牌。每次玩家開始遊戲時,牌必須位於不同的位置。卡是詞典中的關鍵。 – Ekaterina1234

回答

1

你elif的條件纔會觸發1時center_dest需要重置其水平位置。這是當canvas.draw_image(cards[card], (center_source), (w , h), (center_dest), (w, h *2))被調用時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

相關問題