五子棋 Python實現

2022-05-11 19:09:42 字數 4282 閱讀 8901

​ 使用python中的turtle庫實現棋盤棋子的控制。

​ 程式功能:遊戲雙方輪流使用滑鼠進行落子,並自動判定勝負

​ 查閱資料可知,標準五子棋棋盤大小為15格*15格

​ 考慮電腦螢幕大小,取棋盤大小為420*420

​ 用灰色填充棋盤區域

color('grey')

begin_fill()

penup()

goto(-210,-210)

pendown()

goto(-210,210)

goto(210,210)

goto(210,-210)

goto(-210,-210)

end_fill()

color('black')

for i in range(-210,211,30):

penup()

goto(i,-550)

pendown()

goto(i,550)

for i in range(-210,211,30):

penup()

goto(-550,i)

pendown()

goto(550,i)

此處使用了奇怪的實現方式,不建議學習。**如下:

for i in range(1,16):

for j in range(1,16):

for x in range(-240+30*i-15,-240+30*i+15):

for y in range(240-30*j-15,240-30*j+15):

p[(x,y)]=(i,j)

p是從螢幕上點的座標到棋盤上的行、列數的對映

用乙個 bool變數表示 [當前是白方回合]

def play(x,y):

global t

t=not t

每次呼叫play函式都交換落子權

if t:

color('white')

draw(p[0],p[1])

m[p]=-1

else:

color('black')

draw(p[0],p[1])

m[p]=1

if (x,y) not in p:

t=not t

return

p=p[(x,y)]

if m[p]!=0:

t=not t

return

其中m的含義在交換落子權處可以看出。

m[p]=1表示p點有黑棋,m[p]=-1表示有白棋,m[p]=0表示沒有棋子

def game_end(x,y):

global gmov

for i in tw:

tot[i]=0

xn=x+i[0]

yn=y+i[1]

while (xn in range(1,16)) and (yn in range(1,16)) and m[(xn,yn)]==m[(x,y)]:

tot[i]=tot[i]+1

xn=xn+i[0]

yn=yn+i[1]

for i in range(4):

if tot[tw[i]]+tot[tw[7-i]]+1 >= 5:

begin_fill()

penup()

goto(-210,-210)

pendown()

goto(-210,210)

goto(210,210)

goto(210,-210)

goto(-210,-210)

end_fill()

print("game over")

gmov=true

return

如上,在每次落子後向周圍8個方向搜尋連續的相同顏色的棋子的個數。

from turtle import *

ht()

speed(0)

rt(90)

gmov=false

# 15*15

def drawnet():

# too slow?

# use:

# tracer(false)

color('grey')

begin_fill()

penup()

goto(-210,-210)

pendown()

goto(-210,210)

goto(210,210)

goto(210,-210)

goto(-210,-210)

end_fill()

color('black')

for i in range(-210,211,30):

penup()

goto(i,-550)

pendown()

goto(i,550)

for i in range(-210,211,30):

penup()

goto(-550,i)

pendown()

goto(550,i)

t=true

m={}

p={}

for i in range(1,16):

for j in range(1,16):

for x in range(-240+30*i-15,-240+30*i+15):

for y in range(240-30*j-15,240-30*j+15):

p[(x,y)]=(i,j)

m[(i,j)]=0

tw=[(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)]

tot={}

def game_end(x,y):

global gmov

for i in tw:

tot[i]=0

xn=x+i[0]

yn=y+i[1]

while (xn in range(1,16)) and (yn in range(1,16)) and m[(xn,yn)]==m[(x,y)]:

tot[i]=tot[i]+1

xn=xn+i[0]

yn=yn+i[1]

for i in range(4):

if tot[tw[i]]+tot[tw[7-i]]+1 >= 5:

begin_fill()

penup()

goto(-210,-210)

pendown()

goto(-210,210)

goto(210,210)

goto(210,-210)

goto(-210,-210)

end_fill()

print("game over")

gmov=true

return

def draw(i,j):

x=-240+30*i

y=240-30*j

penup()

goto(x-5,y)

pendown()

begin_fill()

circle(5)

end_fill()

def play(x,y):

if(gmov):

return

global t

t=not t

if (x,y) not in p:

t=not t

return

p=p[(x,y)]

if m[p]!=0:

t=not t

return

if t:

color('white')

draw(p[0],p[1])

m[p]=-1

else:

color('black')

draw(p[0],p[1])

m[p]=1

game_end(p[0],p[1])

def undo(x,y):

print("sorry,not supported yet.")

setup(550,550)

drawnet()

onscreenclick(play,1,none)

onscreenclick(undo,3,none)

done()

Python實現AI五子棋

開發工具 python版本 3.6.4 graphics模組。環境搭建 安裝python並新增到環境變數即可。注 graphics模組在相關檔案中已經提供,就是乙個py檔案,直接放在當前路徑或者放到python安裝資料夾下的site packages資料夾內均可。原理簡介 對於五子棋這樣的博弈類ai...

Java實現五子棋

一定義常量類 public class constant二定義我們的棋盤類 public class chess private void playchess 錯誤輸入 if str.length 2 正常輸入的情況 判斷是否越界 if isoverstep str else end if 判斷是否...

C 實現五子棋

自己寫了一下午,但是還是除錯的時候存在很多問題 繼續改善繼續調整 game.h define game h define row 5 define col 5 void displayboard char board row col int row,int col void gameplayer c...