python-大作业之五子棋游戏(附代码)
Python 大作业大作业五子棋游戏五子棋游戏姓名吴欣 学号姓名张雨清 学号 一一 游戏介绍游戏介绍我们设计的是五子棋游戏,支持两人一个鼠标对下,黑方用左键单击,白方用右键单击,谁先下均可,落子无悔,下过的棋子对方点击后不会变色,程序可自行判断输赢并在五子连珠时弹出结果对话框,游戏双方需遵守不在空地点击和一次下一子的规则。二二 游戏代码设计游戏代码设计代码均为原创,没有借鉴和抄袭,首先是用户 GUI 界面设计,点击 start 进入游戏界面,点击 quit 则退出程序,为了方便判断和记录,我们按从左到右,从上到下的顺序给 15x15225 颗棋子编号225,左键绑定函数 callback1,点击后可算出它位于哪颗棋子上再画出来黑子,并把对应编号计入 record 这个列表,之后进入判断函数。右键绑定函数 callback2,点击后画出白子,对应编号计入 recor 这个列表,之后进入判断函数,其中总列表 rec 的作用是使棋子不被下第二遍。三三 作业感想作业感想这个游戏虽然很小但是可以供室友们晚上娱乐之用,我们倾注了很多心血,之前采用模块化编程失败了很多次,有事件响应问题,参数传递问题,到第七个程序才成功,感谢张同珍老师指点了很多,我们学会了使用类,受益匪浅,对 Python 产生了浓厚的兴趣。四四 过程截图过程截图五、实验代码from Tkinter import * from tkMessageBox import * class Gamedef initselfself.Aself.Bself.recordsetself.recorsetself.recself.record|self.recorself.rootTkself.root.geometry“180 x250“self.root.title“Wu Zi Qi Game“self.rCanvasself.root,width180,height210,bg“purple“picPhotoImagefile“beijing.gif“self.r.create_image90,100,imagepicself.r.placex0,y15Labelself.root,text“*Wu Zi Qi Game*“,fg“red“.placex20,y0Buttonself.root,text“start“,commandself.start.placex30,y230Buttonself.root,text“quit “,commandself.root.destroy.placex100,y230self.r.mainloopdef startselfself.root.destroyself.topTkself.top.title“Game Start“self.cCanvasself.top,width480,height480,bg“white“self.c.packself.c.create_rectangle25,25,455,455,fill“gray“for i in range30,451,30for j in range30,451,30self.c.create_ovali-2,j-2,i2,j2,fill“blue“for i in range1,16self.c.create_line30,30*i,450,30*iself.c.create_line30*i,30,30*i,450self.c.create_oval234,234,246,246,fill“black“self.c.create_oval115,115,125,125,fill“black“self.c.create_oval355,115,365,125,fill“black“self.c.create_oval115,355,125,365,fill“black“self.c.create_oval355,355,365,365,fill“black“self.c.bind,self.callback1self.c.bind,self.callback2self.c.mainloop def callback1self,eventu,vevent.x,event.ysu/15if s21self.xs1/2elseself.xs/2lv/15if l21self.yl1/2elseself.yl/2gself.y-1*15self.xwhile g not in self.recself.c.create_ovalself.x*30-12,self.y*30- 12,self.x*3012,self.y*3012,fill“black“self.A.appendgself.recordsetself.Aself.recself.record|self.recorjudgepanduang,self.recordif judge1answershowinfo“Game over“,“Black wins“self.top.destroydef callback2self,eventu,vevent.x,event.ysu/15if s21self.ms1/2elseself.ms/2lv/15if l21self.nl1/2elseself.nl/2kself.n-1*15self.mwhile k not in self.recself.c.create_ovalself.m*30-12,self.n*30- 12,self.m*3012,self.n*3012,fill“white“self.B.appendkself.recorsetself.Bself.recself.record|self.recorjudgepanduank,self.recorif judge1answershowinfo“Game over“,“White wins“self.top.destroydef panduang,record判断横排是否出现赢的情况if g-4,g-3,g-2,g-1recordreturn 1elif g-3,g-2,g-1,g1recordreturn 1elif g-2,g-1,g1,g2recordreturn 1 elif g-1,g1,g2,g3recordreturn 1 elif g1,g2,g3,g4recordreturn 1 判断竖列是否出现赢的情况elif g-60,g-45,g-30,g-15recordreturn 1 elif g-45,g-30,g-15,g15recordreturn 1 elif g-30,g-15,g15,g30recordreturn 1 elif g-15,g15,g30,g45recordreturn 1 elif g15,g30,g45,g60recordreturn 1判断列是否出现赢的情况elif g-16,g-32,g-48,g-64recordreturn 1 elif g-48,g-32,g-16,g16recordreturn 1 elif g-32,g-16,g16,g32recordreturn 1 elif g-16,g16,g32,g48recordreturn 1 elif g16,g32,g48,g60recordreturn 1判断/列是否出现赢的情况elif g-14,g-28,g-42,g-56recordreturn 1 elif g-14,g-28,g-42,g14recordreturn 1elif g-14,g-28,g14,g28recordreturn 1elif g-14,g14,g28,g42recordreturn 1elif g14,g28,g42,g56recordreturn 1elsereturn 0def mainprint “欢迎来到五子棋战场黑方用左键,白方用右键,谁先下都可以,落子无悔,不 要在棋盘周围空地点击。Are you ready“gameGame main