侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python实现五子棋小程序

Python  /  管理员 发布于 7年前   287

本文实例为大家分享了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()

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


  • 上一条:
    python 弹窗提示警告框MessageBox的实例
    下一条:
    Python 实现还原已撤回的微信消息
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客