Я работаю над карточной игрой. Дело в том, что когда пользователь нажимает на две карты, они поворачиваются лицом вверх. Если они не совпадают, когда они нажимают на третий, первые два исчезают (это еще не реализовано).Почему эта переменная не обновляется
Я пытаюсь использовать для переменных: first_card и second_card следить за картами, которые были щелкнули. Я также использую список «выставлен», чтобы изменить значения от False до True, когда пользователь нажимает на карту.
Проблема в том, что список обновляется, но переменные не обновляются. Я имею в виду, когда я нажимаю на вторую карту, first_card имеет значение Нет, значение которого я инициализировал переменной. Почему это происходит?
Во всяком случае, вот код (он не будет работать, если вы запустите его в CodeSkulptor): http://www.codeskulptor.org/#user41_RwBwWy2tSI_2.py
# implementation of card game - Memory
import simplegui
import random
deck = range(0, 8)* 2
exposed = [False] * len(deck)
print exposed
w = 50
h = 100
WIDTH = w * 16 + 2
HEIGHT = 102
first_card = 0
second_card = 0
# helper function to initialize globals
def new_game():
global exposed, state
random.shuffle(deck)
exposed = [False] * len(deck)
state = 0
print deck
print exposed
# define event handlers
def mouseclick(pos):
global state, exposed, first_card, second_card
first_card = None
second_card = None
position = pos[0] // 50
for index in range(len(deck)):
if position == index and exposed[index] != True:
if state == 0:
#exposed = [False] * len(deck)
exposed[position] = True
first_card = position
state = 1
elif state == 1:
#exposed = [False] * len(deck)
exposed[index] = True
second_card = index
state = 2
elif state == 2:
#exposed = [False] * len(deck)
exposed[index] = True
second_card = first_card
first_card = index
state = 1
print state
print "first card", first_card
print "second card", second_card
print exposed
# cards are logically 50x100 pixels in size
def draw(canvas):
line = 1
x = 1
y = 1
for i in range(len(deck)):
if exposed[i] == True:
canvas.draw_text(str(deck[i]), [(0.3* w) + w * i, (y + h) * 0.66], 40, "Black")
else:
canvas.draw_polygon([[x, y], [x + w, y], [x + w, y + h], [x, y + h]], line, "White", '#55aa55')
x += w
# create frame and add a button and labels
frame = simplegui.create_frame("Memory", WIDTH, HEIGHT)
frame.add_button("Reset", new_game)
label = frame.add_label("Turns = ")
frame.set_canvas_background("White")
# register event handlers
frame.set_mouseclick_handler(mouseclick)
frame.set_draw_handler(draw)
# get things rolling
new_game()
frame.start()
Потому что вы всегда устанавливаете их в None в начале функции mouseclick, конечно. –
* «это не сработает, если вы не запустите его в CodeSkulptor» * - почему бы и нет? Можете ли вы сделать [mcve], что делает? – jonrsharpe
Вам не нужен libgui lib, этот код так легко отлаживать его мучительный emabarassing, вы, ребята, его ниспровергаете, просто добавьте некоторое значение случайного кортежа в метод mouseclick и помогите ему – lapinkoira