Python基于pygame实现单机版五子棋对战
python实现的五子棋,能够自动判断输赢,没有是实现电脑对战功能
源码下载:pygame五子棋
#1、引入pygame和pygame.locals importpygame frompygame.localsimport* importtime importsys initChessList=[] initRole=1#代表白子下2:代表当前是黑子下 resultFlag=0 userFlag=True classStornPoint(): def__init__(self,x,y,value=0): ''' :paramx:代表x轴坐标 :paramy:代表y轴坐标 :paramvalue:当前坐标点的棋子:0:没有棋子1:白子2:黑子 ''' self.x=x self.y=y self.value=value pass definitChessSquare(x,y): ''' 初始化棋盘的坐标 :paramx: :paramy: :return: ''' #使用二维列表保存了棋盘是的坐标系,和每个落子点的数值 foriinrange(15):#每一行的交叉点坐标 rowList=[] forjinrange(15):#每一列的交叉点坐标 pointX=x+j*40 pointY=y+i*40 #value=0 sp=StornPoint(pointX,pointY,0) rowList.append(sp) pass initChessList.append(rowList) pass #处理事件 defeventHandler(): globaluserFlag ''' 监听各种事件 :return: ''' foreventinpygame.event.get(): globalinitRole #监听点积退出按钮事件 ifevent.type==QUIT: pygame.quit() sys.exit() pass #监听鼠标点积事件 ifevent.type==MOUSEBUTTONDOWN: x,y=pygame.mouse.get_pos()# print((x,y)) i=j=0 fortempininitChessList: forpointintemp: ifx>=point.x-15andx<=point.x+15\ andy>=point.y-15andy<=point.y+15: #当前区域没有棋子,并且是白子下 ifpoint.value==0andinitRole==1anduserFlag: point.value=1 judgeResult(i,j,1) initRole=2#切换棋子颜色 pass elifpoint.value==0andinitRole==2anduserFlag: point.value=2 judgeResult(i,j,2) initRole=1#切换棋子颜色 pass break pass j+=1 pass i+=1 j=0 pass pass pass #判断输赢函数 defjudgeResult(i,j,value): globalresultFlag flag=False#用于判断是否已经判决出输赢 forxinrange(j-4,j+5):#水平方向有没有出现5连 ifx>=0andx+4<15: ifinitChessList[i][x].value==valueand\ initChessList[i][x+1].value==valueand\ initChessList[i][x+2].value==valueand\ initChessList[i][x+3].value==valueand\ initChessList[i][x+4].value==value: flag=True break pass forxinrange(i-4,i+5):#垂直方向有没有出现5连 ifx>=0andx+4<15: ifinitChessList[x][j].value==valueand\ initChessList[x+1][j].value==valueand\ initChessList[x+2][j].value==valueand\ initChessList[x+3][j].value==valueand\ initChessList[x+4][j].value==value: flag=True break pass #判断东北方向的对角线是否出现了5连 forx,yinzip(range(j+4,j-5,-1),range(i-4,i+5)): ifx>=0andx+4<15andy+4>=0andy<15: ifinitChessList[y][x].value==valueand\ initChessList[y-1][x+1].value==valueand\ initChessList[y-2][x+2].value==valueand\ initChessList[y-3][x+3].value==valueand\ initChessList[y-4][x+4].value==value: flag=True break pass pass pass #判断西北方向的对角是否出现了五连 forx,yinzip(range(j-4,j+5),range(i-4,i+5)): ifx>=0andx+4<15andy>=0andy+4<15: ifinitChessList[y][x].value==valueand\ initChessList[y+1][x+1].value==valueand\ initChessList[y+2][x+2].value==valueand\ initChessList[y+3][x+3].value==valueand\ initChessList[y+4][x+4].value==value: flag=True break pass pass pass ifflag: resultFlag=value pass pass #加载素材 defmain(): globalresultFlag,initChessList initChessSquare(27,27)#初始化棋牌 pygame.init()#初始化游戏环境 #创建游戏窗口 screen=pygame.display.set_mode((620,620),0,0)#第一个参数是元组:窗口的长和宽 #添加游戏标题 pygame.display.set_caption("五子棋小游戏") #图片的加载 background=pygame.image.load('images/bg.png') blackStorn=pygame.image.load('images/storn_black.png') whiteStorn=pygame.image.load('images/storn_white.png') winStornW=pygame.image.load('images/white.png') winStornB=pygame.image.load('images/black.png') rect=blackStorn.get_rect() whileTrue: screen.blit(background,(0,0)) #更新棋盘棋子 fortempininitChessList: forpointintemp: ifpoint.value==1: screen.blit(whiteStorn,(point.x-18,point.y-18)) pass elifpoint.value==2: screen.blit(blackStorn,(point.x-18,point.y-18)) pass pass pass #如果已经判决出输赢 ifresultFlag>0: initChessList=[]#清空棋盘 initChessSquare(27,27)#重新初始化棋盘 ifresultFlag==1: screen.blit(winStornW,(50,100)) else: screen.blit(winStornB,(50,100)) pass pygame.display.update() ifresultFlag>0: time.sleep(3) resultFlag=0 pass eventHandler() pass pass if__name__=="__main__": main() pass
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。