还剩6页未读,继续阅读
文本内容:
大作业子棋嬉戏Python姓名吴欣学号姓名张雨清学号一嬉戏介绍我们设计的是五子棋嬉戏,支持两人一个鼠标对下,黑方用左键单击,白方用右键单击,谁先下均可,落子无悔,下过的棋子对方点击后不会变色,程序可自行推断输赢并在五子连珠时弹出结果对话框,嬉戏双方需遵守不在空地点击和一次下一子的规则二嬉戏代码设计:代码均为原创,没有借鉴和抄袭,首先是用户GUI界面设计,点击start进入嬉戏界面,点击quit则退出程序,为了便利推断和记录,我们按从左到右,从上到下的依次给15x15二225颗棋子编号225,左键绑定函数callbackl,点击后可算出它位于哪颗棋子上再画出来黑子,并把对应编号计入record这个列表,之后进入推断函数右键绑定函数callback2,点击后画出白子,对应编号计入recor这个列表,之后进入推断函数,其中总列表rec的作用是使棋子不被下其次遍三作业感想这个嬉戏虽然很小但是可以供室友们晚上消遣之用,我们倾注了许多心血,之前采纳模块化编程失败了许多次,有事务响应问题,参数传递问题,到第七个程序才胜利,感谢张同珍老师指引了许多,我们学会了运用类,受益匪浅,对Python产生了深厚的爱好四过程截图
五、试验代码from Tkinterimport*from tkMessageBoximport*class Game:def initself:self.A=[]self.B=[]self.record=set self,recordset self.rec=self.record|self,recorself.root=Tkself.root,geometry180x250〃self.root,title,zWu ZiQi Gameself.r=Canvasself,root,width=180,height=210,bg=〃purplepic=PhotoImagefile=〃beijing.gif〃self.r.create_image90,100,image=picself.r.place x=0,y=15Labelself,root,text=〃***Wu ZiQiGame***,fg=〃red.placex=20,y=0Buttonself,root,text=〃start”,command=self start.place x=30,・y=230Buttonself,root,text二〃quit〃,command=self.root,destroy.placex=100,y=230self.r.mainloop defstartself:self.root,destroy self=Tk self,title CGameStartself.c=Canvas self,width=480,height=480,bg=〃whiteself.c.packself.c.create_rectangle25,25,455,455,fill=〃grayfor iin range30,451,30:for jin range30,451,30:self.c.create_oval i-2,j-2,i+2,j+2,fill=〃bluefor iin range1,16:self.c.create_line30,30*i,450,30*iself.c.create_line30*i,30,30*i,450self.c.create_oval234,234,246,246,fill二〃blackself.c.create_oval115,115,125,125,fill二〃blackself.c.create_oval355,115,365,125,fill二〃blackself.c.create_oval115,355,125,365,fill二〃blackself.c.create oval355,355,365,365,fill=〃blackself.c.bind〃〈Button—l〉〃,self,callbacklself.c.bind〃〈Button—3〃,self.callback2self.c.mainloop defcallbacklself,event:u,v=event.x,event,ys=u/15if s%2==l:self.x=s+1/2else:self.x=s/2l=v/15if1%2=1:self,y=1+1/2else:self.y=l/2g=self,y-1*15+self.xwhile gnot in self,rec:self.c.create_oval self.x*30-12,self.y*30T2,self.x*30+12,s elf.y*30+12,fiH=〃black〃self.A.append gself.record=setself.Aself.rec=self.record|self,recorjudge=panduang,self,recordif judge==l:answer=showinfo Z/Game over,Black wins!/z self,destroy defcallback2self,event:u,v=event.x,event,ys=u/15if s%2==l:self.m=s+l/2else:self.m=s/21二v/15if1%2==1:self,n=1+1/2else:self.n=l/2k=self.n-l*15+self.m whilek notinself.rec:self.c.create_oval self,m*30T2,self,n*30T2,self.m*30+12,self.n*30+12,fill二〃whiteself.B.append kself.recor=setself.Bself.rec=self.record|self,recorjudge=panduank,self,recorif judge==l:answer=showinfoGame over,White wins!”self,destroy defpanduang,record:#推断横排是否出现赢的状况if{g-4,g-3,g-2,g-1}=record:return1elif{g-3,g-2,g-1,g+1}=record:return1elif g-2,g-1,g+1,g+2}=record:return1elif g-1,g+1,g+2,g+3}=record:return1elif g+1,g+2,g+3,g+4=record:#推断竖列是否出现赢的状况elif{g-60,g-45,g-30,g-15}〈二record:return1elif{g-45,g-30,g-15,g+15=record:return1elif g-30,g-15,g+15,g+30=record:return1elif{g-15,g+15,g+30,g+45=record:return1elif{g+15,g+30,g+45,g+60=record:return1#推断列是否出现赢的状况elif{g_16,g-32,g-48,g-64}=record:return1elif{g-48,g-32,g-16,g+16}=record:return1elif{g-32,g-16,g+16,g+32}〈=record:return1elif{g-16,g+16,g+32,g+48}=record:return1elif{g+16,g+32,g+48,g+60}=record:#推断/列是否出现赢的状况elif{g-14,g-28,g-42,g-56}二record:return1elif{g-14,g-28,g-42,g+14}=record:return1elif{g-14,g-28,g+14,g+28=record:return1elif{g-14,g+14,g+28,g+42=record:return1elif{g+14,g+28,g+42,g+56}=record:return1else:return0def main:print〃欢迎来到五子棋战场!黑方用左键,白方用右键,谁先下都可以,落子无悔,不要在棋盘四周空地点击Are youready”game=Game main。