2016-08-01 2 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

'if card == c:' почему? – njzk2

+0

@ njzk2 потому что список ** колода ** перетасовывается. карты должны быть в разных положениях каждый раз, когда игрок начинает игру. карта - это ключ в словаре. – Ekaterina1234

ответ

1

Ваше состояние Элиф срабатывает только 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

Смежные вопросы