您好,登錄后才能下訂單哦!
這篇文章主要介紹如何使用python實(shí)現(xiàn)五子棋小程序,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
具體內(nèi)容如下
一、結(jié)合書(shū)上例子,分三段編寫(xiě):
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) #顯示初始化的棋盤(pán) who=True while True: t=input("請(qǐng)輸入棋子的位置(x,y),現(xiàn)在由"+("O" if who else "X")+"方下子:").split(",") #輸入坐標(biāo) 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) #顯示當(dāng)前棋盤(pán) win_not(qipan,x,y) #判斷有沒(méi)有人贏 else: print("當(dāng)前位置已有棋子,請(qǐng)重新下子") else : print("輸入位置有誤,請(qǐng)輸入要下的位置,如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="") # 無(wú)棋子 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]): # 向左統(tǒng)計(jì)連續(xù)棋子數(shù) 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("斜向五子相連,勝利")
二、下面的代碼沒(méi)有驗(yàn)證
#coding:utf-8 import os import pdb import pickle class Player(object): number=0 def __init__(self,name=''): """ 玩家類(lèi)構(gòu)造方法 """ 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 #棋盤(pán)類(lèi) class Board(object): class Status(object): """ 狀態(tài)量,提供轉(zhuǎn)態(tài)常量 """ NONE=0 WHITE=1 BLACK=2 def __init__(self,maxx=10,maxy=10): """ 棋盤(pán)類(lèi)構(gòu)造方法 確定尺寸,以及創(chuàng)建棋盤(pán)成員對(duì)象 """ 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): """ 玩家在某個(gè)位置落子 """ 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): """ 玩家在某個(gè)位置落子 """ return xPoint<self.maxx and\ yPoint<self.maxy and\ xPoint>=0 and\ yPoint>=0 def checkFiveInRow(self,xPoint,yPoint,xDir,yDir): """ 判斷以(xpoint,ypoiny)點(diǎn)(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)點(diǎn)為中心在四個(gè)方向分別判斷五子連珠 """ 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): """ 打印棋盤(pán) """ qiType=["十","O","X"] print(' O 一 二 三 四 五 六 七 八 九') for i in range(self.maxx): print(i," ",end='') print(' '.join(qiType[x] for x in self.qipan[i])) #文件存讀檔類(lèi) class FileStatus(object): def save(self): """ 存檔方法 """ fpath=input("請(qǐng)輸入保持文件的路徑:") file=open(fpath,'w') pickle.dump(self,file) file.close() def load(self): """ 讀檔方法 """ pass #游戲類(lèi) class GoBang(FileStatus): def __init__(self,qipan,white,black): """ 游戲類(lèi)構(gòu)造方法 創(chuàng)建成員變量 """ 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):#判斷游戲是否結(jié)束 print(self.white.name if\ self.who else self.black.name)+'Win' break self.who=not self.who #切換游戲角色 os.system('pause') def load(self): """ 重寫(xiě)讀檔方法 """ fpath=input("請(qǐng)輸入讀取文件的路徑") 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實(shí)現(xiàn)五子棋小程序”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。