莱斯大学Python课程Mini-project#5 - Memory

要求在这里。  我编的这一坨虽然执行起来像模像样的,但真是乱七八糟。




# Memory
import simplegui
import random
import math


# 初始化
n=8 # 牌的张数是2*n
counter=0 # 显示翻牌次数 
color='Teal' # 翻牌前后的颜色变化
new_pos=0 # 鼠标目前点击的哪张牌


Mlist=list(range(0,n)*2)# 创建List
random.shuffle(Mlist)#随机调整顺序


exposed=[] #初始化exposed数组
for i in range(0,2*n):
  exposed.append(False)
  
state_counter=0  # state 状态计数器
state=[] #初始化state数组
for i in range(0,2*n):
  state.append(0)
    
# helper function: 判断牌的现有状态
def judge_state():
 
 for i in range (0,2*n):
        if exposed[i]==False:# 牌扣住
           state[i]=0    # 状态为0不理睬
            
        elif exposed[i]==True: # 如果牌翻开
            for j in range(0,2*n):
              if exposed[j]==True and  Mlist[i]==Mlist[j] and i!=j:
               state[i]=2 # 已经翻开的成对牌状态为2不理睬
               state[j]=2 # 已经翻开的成对牌状态为2不理睬
              elif state[i]!=2:
               state[i]=1         
                    
 down_two_single()  #调用另一个helper function
            
            
#  helper  function  把两个单张牌扣上            
def down_two_single():
    global state_counter
    state_counter=0
    for i in range (0,2*n):
        if  state[i]==1 :
            state_counter +=1 
           
    if  state_counter>2:
            for i in range (0,2*n) :             
              if state[i]==1 and i!=new_pos: # 不能把鼠标目前所点的那张牌消掉
                 exposed[i]=False   
                 state[i]=0
                    
   


# 画出canvas            


def draw(canvas):
    global color
    for i in range(0,2*n):
        if exposed[i]==True:
            show=str(Mlist[i])
            color='Black'
        elif exposed[i]==False: 
            show=" " 
            color='Teal'
        canvas.draw_polygon([[i*60, 0], [(i+1)*60,0], [(i+1)*60, 100], [i*60, 100]], 1, "Orange",color)    
        canvas.draw_text(show,[20+i*60,60],40,'White')
         
# 鼠标点击的event handler


def click(pos):
    global new_pos
    for i in range(0,2*n):
      if pos[0]>i*60 and pos[0]<(i+1)*60:
         if exposed[i]==False:
            global counter
            exposed[i]= True
            counter +=1
            new_pos=i
    label.set_text("counter: "+str(counter))        
    judge_state()  # 调用一个helper
    
    #下面这些print 都是用来检查的
    print "Mlist:" ,Mlist
    print "exposed:" ,exposed
    print "state:" ,state
    print "state_counter:",state_counter
    print"  "
    
# 新开一局 按钮event handler
def newgame():
    global counter
    random.shuffle(Mlist)#随机调整顺序
    counter=0
    for i in range(0,2*n):
       exposed[i]=False
       state[i]=0
        
# Create a frame and assign callbacks to event handlers
frame = simplegui.create_frame("Memory", 2*n*60, 100)
frame.set_draw_handler(draw)
frame.add_button("newgame",newgame )
frame.set_mouseclick_handler(click)
label=frame.add_label(" counter: ",200) # 显示翻牌次数   
   
# start frame
frame.start()     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值