日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

编写五子棋的完整python代码_python实现五子棋小程序

發(fā)布時(shí)間:2025/3/20 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写五子棋的完整python代码_python实现五子棋小程序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文實(shí)例為大家分享了python實(shí)現(xiàn)五子棋小程序的具體代碼,供大家參考,具體內(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

yPoint

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()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

本文標(biāo)題: python實(shí)現(xiàn)五子棋小程序

本文地址: http://www.cppcns.com/jiaoben/python/262475.html

總結(jié)

以上是生活随笔為你收集整理的编写五子棋的完整python代码_python实现五子棋小程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。