今天用wxPython做了一个小游戏.
import wx
from random import choice,shuffle
class frame(wx.Frame):
def __init__(self,app):
wx.Frame.__init__(self,None,title='翻牌',size=(400,300))
p=wx.Panel(self)
p.SetBackgroundColour('White')#设置背景颜色
gs=wx.GridSizer(4,5,5,5)#创建GridSizer网格布局
self.button=list()
for i in range(1,21):
b=wx.Button(p,i,label='快来翻我!')
self.button.append(b)
gs.Add(b,0,wx.EXPAND)
b.Bind(wx.EVT_BUTTON,self.onbutton,id=i)
#循环往布局中加入按钮
p.SetSizer(gs)
self.l=[None,None]#被按下的按钮
self.dats=list()#按钮代表的值
for i in range(1,11):
self.dats.append(choice([1,2,3,4,5]))#随机添加十个数字(1-5)
for i in range(1,11):
self.dats.append(self.dats[i-1])#复制另外十个数字,因为要保证哪一个数字都有至少一对,这样才能翻完.
shuffle(self.dats)#打乱顺序
self.timer=wx.Timer(self)
self.Bind(wx.EVT_TIMER,self.ontimer,self.timer)
self.ID=list()#被按过按钮的ID
self.IDs=[None,None]#对应self.l,这是被按下的两个按钮的ID
self.ActiveIDCount=0#在ID中还没有被翻回的按钮的数量
self.Show()
app.MainLoop()#主循环
def onbutton(self,e):#当按下按钮
event=e.GetEventObject()
if event.GetLabel()=='我已阵亡。':
return -1
if(self.l[0] and self.IDs[0]!=event.GetId()):
self.l[1]=str(self.dats[event.GetId()-1])
self.IDs[1]=event.GetId()#设置self.l
elif not self.l[0]:
self.l[0]=str(self.dats[event.GetId()-1])
self.IDs[0]=event.GetId()
event.SetLabel(str(self.dats[event.GetId()-1]))
self.ID.append(event)
self.ActiveIDCount+=1
self.timer.Start(700)#700毫秒后翻回按钮
def ontimer(self,e):#返回并监测是否有两个按钮被翻开且数值一样
if self.ActiveIDCount==0:
return -1
if not len(self.ID)==self.ActiveIDCount:
del self.ID[0:len(self.ID)-self.ActiveIDCount]
if self.l[0]==self.l[1]:
self.l=[None,None]
for i in self.ID:
i.SetLabel('我已阵亡。')
self.ActiveIDCount-=1
return -1
for i in self.ID:
i.SetLabel('快来翻我!')
self.ActiveIDCount-=1
self.l=[None,None]
app = wx.App()#创建app对象
frame(app)#调用