An Introduction to Interactive Programming in Python 第五课作业 memory

# implementation of card game - Memory


import simplegui
import random


card_list = []
frame_width = 800
card_number = 16
card_width = frame_width / card_number
turn = 0
current = []


# helper function to initialize globals
def new_game():
    global card_list, turn, current, label
    turn = 0
    current = []
    label.set_text("Turns = " + str(turn))
    lst = range(card_number)
    random.shuffle(lst)
    lst1 = [x if x < 8 else x-8 for x in lst]
    card_list = [[(x+0.5)* card_width, lst1[x], False] for x in range(card_number)]
     
# define event handlers
def mouseclick(pos):
    # add game state logic here
    global card_list, current, turn, label
    idx = pos[0] / card_width
    if not card_list[idx][2]:
        card_list[idx][2] = True
        if turn % 2 == 0:
            if len(current) > 0 and card_list[current[0]][1] != card_list[current[1]][1]:
                card_list[current[0]][2] = False
                card_list[current[1]][2] = False
            label.set_text("Turns = " + str(turn / 2 + 1))
            current = [idx]
        else:
            current.append(idx)
        turn += 1
    
                        
# cards are logically 50x100 pixels in size    
def draw(canvas):
    for card in card_list:
        canvas.draw_polygon([[card[0] - card_width / 2, 0], [card[0] + card_width / 2, 0], 
                             [card[0] + card_width / 2, 100], [card[0] - card_width / 2, 100]],
                            1, 'Red',
                            'White' if card[2] else 'Green')
        if card[2]:
            canvas.draw_text(str(card[1]), [card[0] - 10, 70], 50, 'Black')




# create frame and add a button and labels
frame = simplegui.create_frame("Memory", frame_width, 100)
frame.add_button("Reset", new_game)
label = frame.add_label("Turns = 0")


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


# get things rolling
new_game()
frame.start()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值