python实现简单的五子棋游戏
本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下
#-*-coding:utf-8-*- #@Time:2017/8/29002910:14 #@Author:assasin #@Email:assasin0308@sina.com fromtkinterimport* importmath classchessBoard(): def__init__(self): #创建一个tk对象,窗口 self.window=Tk() #窗口名称 self.window.title('五子棋游戏') #窗口大小 self.window.geometry('660x470') #设置窗口不可缩放 self.window.resizable(0,0) #定义窗口的画布 self.canvas=Canvas(self.window,bg="#EEE8AC",width=470,height=470) #画出画布内容 self.paint_board() #定义画布所在的网格 self.canvas.grid(row=0,column=0) defpaint_board(self): #画横线 forrowinrange(0,15): ifrow==0orrow==14: self.canvas.create_line(25,25+row*30,25+14*30,25+row*30,width=2) else: self.canvas.create_line(25,25+row*30,25+14*30,25+row*30,width=1) #画竖线 forcolumninrange(0,15): ifcolumn==0orcolumn==14: self.canvas.create_line(25+column*30,25,25+column*30,25+14*30,width=2) else: self.canvas.create_line(25+column*30,25,25+column*30,25+14*30,width=1) #画圆 self.canvas.create_oval(112,112,118,118,fill="black") self.canvas.create_oval(352,112,358,118,fill="black") self.canvas.create_oval(112,352,118,358,fill="black") self.canvas.create_oval(232,232,238,238,fill="black") self.canvas.create_oval(352,352,358,358,fill="black") #定义五子棋游戏类 #0为黑子,1为白子,2为空位 classGobang(): #初始化 def__init__(self): self.board=chessBoard() self.game_print=StringVar() self.game_print.set("") #16*16的二维列表,保证不会outofindex self.db=[([2]*16)foriinrange(16)] #悔棋用的顺序列表 self.order=[] #棋子颜色 self.color_count=0 self.color='black' #清空与赢的初始化,已赢为1,已清空为1 self.flag_win=1 self.flag_empty=1 self.options() #黑白互换 defchange_color(self): self.color_count=(self.color_count+1)%2 ifself.color_count==0: self.color="black" elifself.color_count==1: self.color="white" #落子 defchess_moving(self,event): #不点击“开始”与“清空”无法再次开始落子 ifself.flag_win==1orself.flag_empty==0: return #坐标转化为下标 x,y=event.x-25,event.y-25 x=round(x/30) y=round(y/30) #点击位置没用落子,且没有在棋盘线外,可以落子 whileself.db[y][x]==2andself.limit_boarder(y,x): self.db[y][x]=self.color_count self.order.append(x+15*y) self.board.canvas.create_oval(25+30*x-12,25+30*y-12,25+30*x+12,25+30*y+12,fill=self.color,tags="chessman") ifself.game_win(y,x,self.color_count): print(self.color,"获胜") self.game_print.set(self.color+"获胜") else: self.change_color() self.game_print.set("请"+self.color+"落子") #保证棋子落在棋盘上 deflimit_boarder(self,y,x): ifx<0orx>14ory<0ory>14: returnFalse else: returnTrue #计算连子的数目,并返回最大连子数目 defchessman_count(self,y,x,color_count): count1,count2,count3,count4=1,1,1,1 #横计算 foriinrange(-1,-5,-1): ifself.db[y][x+i]==color_count: count1+=1 else: break foriinrange(1,5,1): ifself.db[y][x+i]==color_count: count1+=1 else: break #竖计算 foriinrange(-1,-5,-1): ifself.db[y+i][x]==color_count: count2+=1 else: break foriinrange(1,5,1): ifself.db[y+i][x]==color_count: count2+=1 else: break #/计算 foriinrange(-1,-5,-1): ifself.db[y+i][x+i]==color_count: count3+=1 else: break foriinrange(1,5,1): ifself.db[y+i][x+i]==color_count: count3+=1 else: break #\计算 foriinrange(-1,-5,-1): ifself.db[y+i][x-i]==color_count: count4+=1 else: break foriinrange(1,5,1): ifself.db[y+i][x-i]==color_count: count4+=1 else: break returnmax(count1,count2,count3,count4) #判断输赢 defgame_win(self,y,x,color_count): ifself.chessman_count(y,x,color_count)>=5: self.flag_win=1 self.flag_empty=0 returnTrue else: returnFalse #悔棋,清空棋盘,再画剩下的n-1个棋子 defwithdraw(self): iflen(self.order)==0orself.flag_win==1: return self.board.canvas.delete("chessman") z=self.order.pop() x=z%15 y=z//15 self.db[y][x]=2 self.color_count=1 foriinself.order: ix=i%15 iy=i//15 self.change_color() self.board.canvas.create_oval(25+30*ix-12,25+30*iy-12,25+30*ix+12,25+30*iy+12, fill=self.color,tags="chessman") self.change_color() self.game_print.set("请"+self.color+"落子") #清空 defempty_all(self): self.board.canvas.delete("chessman") #还原初始化 self.db=[([2]*16)foriinrange(16)] self.order=[] self.color_count=0 self.color='black' self.flag_win=1 self.flag_empty=1 self.game_print.set("") #将self.flag_win置0才能在棋盘上落子 defgame_start(self): #没有清空棋子不能置0开始 ifself.flag_empty==0: return self.flag_win=0 self.game_print.set("请"+self.color+"落子") defoptions(self): self.board.canvas.bind("",self.chess_moving) Label(self.board.window,textvariable=self.game_print,font=("Arial",20)).place(relx=0,rely=0,x=495,y=200) Button(self.board.window,text="开始游戏",command=self.game_start,width=13,font=("Verdana",12)).place(relx=0,rely=0,x=495,y=15) Button(self.board.window,text="我要悔棋",command=self.withdraw,width=13,font=("Verdana",12)).place(relx=0,rely=0,x=495,y=60) Button(self.board.window,text="清空棋局",command=self.empty_all,width=13,font=("Verdana",12)).place(relx=0,rely=0,x=495,y=105) Button(self.board.window,text="结束游戏",command=self.board.window.destroy,width=13,font=("Verdana",12)).place(relx=0,rely=0,x=495,y=420) self.board.window.mainloop() if__name__=='__main__': chess_game=Gobang()
更多有趣的经典小游戏实现专题,分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
python俄罗斯方块游戏集合
JavaScript经典游戏玩不停
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。