首页 > 编程 > Python > 正文

python实现五子棋小程序

2019-11-25 12:44:10
字体:
来源:转载
供稿:网友

本文实例为大家分享了python实现五子棋小程序的具体代码,供大家参考,具体内容如下

一、结合书上例子,分三段编写:

wuziqi.py

#coding:utf-8from win_notwin import *from show_qipan import * maxx=10 #10行10列maxy=10qipan=[[0,0,0,0,1,0,0,2,0,0],[0,1,2,1,1,0,2,0,0,0],[0,0,0,0,1,1,0,2,0,0],[0,0,0,0,2,0,0,1,0,0],  [0,0,0,1,1,1,2,0,0,0],[0,0,0,2,0,0,0,2,0,0],[0,0,1,2,0,2,2,0,1,0],[0,0,0,2,0,0,0,1,0,0],[0,0,0,0,0,0,1,1,0,0],  [0,0,0,0,0,0,0,0,0,0]]sqipan(qipan) #显示初始化的棋盘  who=Truewhile True: t=input("请输入棋子的位置(x,y),现在由"+("O" if who else "X")+"方下子:").split(",") #输入坐标 if len(t)==2:  x=int(t[0])  y=int(t[1])  if qipan[x][y]==0:   qipan[x][y]=1 if who else 2   who=not who    sqipan(qipan) #显示当前棋盘    win_not(qipan,x,y) #判断有没有人赢  else:   print("当前位置已有棋子,请重新下子") else :  print("输入位置有误,请输入要下的位置,如1,1")

show_qipan.py

def sqipan(qipan): maxx=10 maxy=10 print(" O 一 二 三 四 五 六 七 八 九") for i in range(maxx):  print(i, " ", end="")  for j in range(maxy):   if qipan[i][j] == 0:    print("+", " ", end="") # 无棋子   elif qipan[i][j] == 1:    print("O", " ", end="") # 白色   elif qipan[i][j] == 2:    print("X", " ", end="") # 黑色  print("/n")

win_notwin.py

def win_not(qipan,x,y): maxx=10 maxy=10 flag=qipan[x][y] xPoint = x yPoint = y # 横向 count = 0 # x=xPoint # y=yPoint while (x >= 0 and flag == qipan[x][y]): # 向左统计连续棋子数  count += 1  x -= 1 x = xPoint y = yPoint while (x >= 0 and flag == qipan[x][y]):  count += 1  x += 1 if (count > 5): print("纵向五子棋相连,胜利!")  count = 0 x = xPoint y = yPoint while (y >= 0 and flag == qipan[x][y]):  count += 1  y -= 1 y = yPoint while (y <= maxy and flag == qipan[x][y]):  count += 1  y += 1 if (count > 5): print("横向五子相连,胜利")  # 斜向 # 左下 count = 0 x = xPoint y = yPoint while (x >= 0 and y < maxy and flag == qipan[x][y]):  count += 1  x -= 1  y += 1 x = xPoint y = yPoint # 右上 while (x < maxx and y >= 0 and flag == qipan[x][y]):  count += 1  x += 1  y -= 1 if (count > 5): print("斜向五子棋相连,胜利")  # 斜上 count = 0 x = xPoint y = yPoint # 左上 while (x >= 0 and y >= 0 and flag == qipan[x][y]):  count += 1  x -= 1  y -= 1 x = xPoint y = yPoint while (x < maxx and y < maxy and flag == qipan[x][y]):  count += 1  x += 1  y += 1 if (count > 5):  print("斜向五子相连,胜利")

二、下面的代码没有验证

#coding:utf-8import osimport pdbimport pickle class Player(object): number=0 def __init__(self,name=''):  """   玩家类构造方法   """  if not name:   Player.number+=1   name='Player%d'% Player.number  self.name=name def play(self):  """   玩家输入下一步落子位置   """  t=input('Please input(x,y),now is'+self.name+':')    return t  #棋盘类class Board(object): class Status(object):  """   状态量,提供转态常量   """  NONE=0  WHITE=1  BLACK=2  def __init__(self,maxx=10,maxy=10):  """   棋盘类构造方法 确定尺寸,以及创建棋盘成员对象   """  self.maxx,self.maxy=maxx,maxy  self.qipan=[[0]*maxy for i in range(maxx)]  def hasChaessman(self,xPoint,yPoint):  """   判断是否有棋子存在   """  return self.qipan[xPoint][yPoint]!=Board.Status.NONE def downPawn(self,xPoint,yPoint,who):  """   玩家在某个位置落子   """  if self.hasChaessman(xPoint,yPoint):   return False  else:   self.qipan[xPoint][yPoint]=Board.Status.WHITE if who else Board.Status.BLACK   return True  def inRange(self,xPoint,yPoint):  """  玩家在某个位置落子  """  return xPoint<self.maxx and/    yPoint<self.maxy and/    xPoint>=0 and/    yPoint>=0  def checkFiveInRow(self,xPoint,yPoint,xDir,yDir):  """  判断以(xpoint,ypoiny)点(xDir,yDir)方向上是否五子连珠  """  count = 0  t=self.qipan[xPoint][yPoint]  x,y=xPoint,yPoint  while (self.inRange(x,y) and t==self.qipan[x][y]):   count += 1   x+=yDir   y+=yDir  x, y = xPoint, yPoint  while (self.inRange(x, y) and t == self.qipan[x][y]):   count += 1   x -= yDir   y -= yDir  return count>5  def isWin(self,xPoint,yPoint):  """  以(xpoint,ypoiny)点为中心在四个方向分别判断五子连珠  """  pdb.set_trace()#####################  return self.checkFiveInRow(xPoint,yPoint,1,0) or /    self.checkFiveInRow(xPoint, yPoint, 0,1) or /    self.checkFiveInRow(xPoint, yPoint, 1,1) or /    self.checkFiveInRow(xPoint, yPoint, 1,-1)  def printQp(self):  """  打印棋盘  """  qiType=["十","O","X"]  print(' O 一 二 三 四 五 六 七 八 九')  for i in range(self.maxx):   print(i," ",end='')   print(' '.join(qiType[x] for x in self.qipan[i])) #文件存读档类class FileStatus(object): def save(self):  """  存档方法  """  fpath=input("请输入保持文件的路径:")  file=open(fpath,'w')  pickle.dump(self,file)  file.close()  def load(self):  """  读档方法  """  pass  #游戏类class GoBang(FileStatus):  def __init__(self,qipan,white,black):  """  游戏类构造方法  创建成员变量  """  self.qipan=qipan  self.white=white  self.black=black  self.who=True  def start(self):  """  游戏主流方法  """  os.system('cls')  self.printQp()  while True:   t=(self.white if self.who else self.black).play()   if t=='S':    self.save()    continue   if t=='L':    self.load()    continue   t.split(',')   if len(t)==2:    x,y=int(t[0]).int(t[1])    if self.qipan.downPawn(x,y,self.who):     os.system('cls')     self.printQp()     if self.qipan.isWin(x,y):#判断游戏是否结束      print(self.white.name if/        self.who else self.black.name)+'Win'      break     self.who=not self.who #切换游戏角色  os.system('pause')  def load(self):  """  重写读档方法  """  fpath=input("请输入读取文件的路径")  file=open(fpath,'r')  status=pickle.load(file)  file.close()  #读档 拷贝  self.qipan=status.qipan  self.white=status.white  self.black=status.black  self.who=status.who  os.system('cls')  self.printQp()  def printQp(self):  """  打印  """  self.qipan.printQp()  print("按L读取,S保存") if __name__=='__main__': t=GoBang(Board(),Player(),Player()) t.start()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表