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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。