1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#纸牌游戏,共有两组0-7的数字
#若点击前后两张纸牌数字一致,则纸牌翻面
#翻完所有纸牌则游戏结束

import simplegui
import random

#定义全局变量
lst = []   #纸牌列表
exposed = []  #纸牌正面是否朝上列表
state = 0  #当前状况下被翻动纸牌数
turn = 0   #游戏轮数,点击两张纸牌为1轮
first_card = []  #被翻开的第一张纸牌的位置与数字
second_card = [] #被翻开的第二张纸牌的位置与数字


# 游戏初始化
def new_game():
    global lst, exposed
    lst = range(0,8) * 2
    exposed = [False] * len(lst)
    random.shuffle(lst)
     
# 点击功能
def mouseclick(pos):
    
    global lst, exposed, state, first_card, second_card, turn
    index = pos[0] // 50
    if exposed[index] == False : #if the num is not shown
        if state == 0:
            exposed[index] = True
            first_card = [index, lst[index]]     
            state = 1
                
        elif state == 1:
            exposed[index] = True
            second_card = [index, lst[index]]   
            state = 2
            turn += 1
                
        elif state == 2:
            if first_card[1] != second_card[1]:
                exposed[first_card[0]] = False
                exposed[second_card[0]] = False
            exposed[index] = True   
            first_card = [index, lst[index]] 
            state = 1
            
                        
# cards are logically 50x100 pixels in size   
#定义画布,每张纸牌大小为 50x100
def draw(canvas):
    global lst, exposed
    label.set_text("Turns = " + str(turn))
    for i in range(len(lst)):
    #若纸牌所在位置为True,则显示数字,否则显示背面
        if exposed[i] == True:
            canvas.draw_image(img, [lst[i]*50 + 25, 50],(50,100), [i*50 +25, 50],(50,100))
        else:
            canvas.draw_polygon([(i*50, 0), ((i+1)*50, 0), ((i+1)*50, 100),(i*50, 100)], 3, 'Black', 'Green')

# create frame and add a button and labels
frame = simplegui.create_frame("Memory", 800, 100)
frame.add_button("Reset", new_game)
label = frame.add_label("Turns = 0")
img = simplegui.load_image('https://lh5.googleusercontent.com/-8E2wYduat8M/U1-brzUkZvI/AAAAAAAAAYM/KvXo0lQ4YKw/w400-h100-no/num.png')

# register event handlers
frame.set_mouseclick_handler(mouseclick)
frame.set_draw_handler(draw)

# 开始运行
new_game()
frame.start()