本文实例为大家分享了python实现五子棋小程序的具体代码,供大家参考,具体内容如下
一、结合书上例子,分三段编写:
wuziqi.py
#coding:utf-8 from win_notwin import * from show_qipan import * maxx=10 #10行10列 maxy=10 qipan=[[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=True while 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-8 import os import pdb import 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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年11月26日
2024年11月26日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]