defwin_lose():
a =str(turn)print('a=', a)# 判斷X=Y軸上是否形成五子連珠for i inrange(11):for j inrange(11):ifmap[i][j]==a andmap[i+1][j+1]==a andmap[i+2][j+2]==a andmap[i+3][j+3]==a andmap[i+4][j+4]==a:print('X=Y軸上形成五子連珠!')returnTrue# 判斷X=-Y軸上是否形成五子連珠for i inrange(4,15):for j inrange(11):ifmap[i][j]==a andmap[i-1][j+1]==a andmap[i-2][j+2]==a andmap[i-3][j+3]==a andmap[i-4][j+4]==a:print('X=-Y軸上形成五子連珠!')returnTrue# 判斷Y軸上是否形成五子連珠for i inrange(15):for j inrange(4,15):ifmap[i][j]==a andmap[i][j-1]==a andmap[i][j-2]==a andmap[i][j-3]==a andmap[i][j-4]==a:print('Y軸上形成五子連珠!')returnTrue# 判斷X軸上是否形成五子連珠for i inrange(11):for j inrange(15):ifmap[i][j]==a andmap[i+1][j]==a andmap[i+2][j]==a andmap[i+3][j]==a andmap[i+4][j]==a:print('X軸上形成五子連珠!')returnTruereturnFalse
不掃描整個棋盤判斷輸贏的算法,只掃描周邊
defcheckWin(x, y):# 當前下棋的位置點,同時代表了顏色!!!
flag =False
color =map[x][y]# 橫向的判斷
count =1for k inrange(2):
s =(-1)**k
i =1while color ==map[x+i*s][y]:
count +=1
i +=1if count >=5:
flag =True# 縱向的判斷
count =1for k inrange(2):
s =(-1)**k
i =1while color ==map[x][y+i*s]:
count +=1
i +=1if count >=5:
flag =True# 斜方向的判斷(右上 + 左下)
count =1for k inrange(2):
s =(-1)**k
i =1while color ==map[x+i*s][y-i*s]:
count +=1
i +=1if count >=5:
flag =True# 斜方向的判斷(右下 + 左上)
count =1for k inrange(2):
s =(-1)**k
i =1while color ==map[x+i*s][y+i*s]:
count +=1
i +=1if count >=5:
flag =Truereturn flag
14.3 關鍵技術
1、UDP編程
編寫一個簡單的UDP演示下棋程序
下面是服務器:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('127.0.0.1',8888))# In[ ]:print('Bind UDP on 8888...')whileTrue:# 接收數據
data, addr = s.recvfrom(1024)print('Received from %s:%s.'% addr)print('reveived:', data)
p = data.decode('utf-8').split(',')
x =int(p[0])
y =int(p[1])print(p[0], p[1])# 處理之後發過去!
pos =str(x+1)+','+str(y+1)
s.sendto(pos.encode('utf-8'), addr)
下面是客戶端:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
x =input('請輸入x座標')
y =input('請輸入y座標')
data =str(x)+','+str(y)
s.sendto(data.encode('utf-8'),('127.0.0.1',8888))# 接收服務器加一之後的座標數據
data2, addr = s.recvfrom(1024)print('接收服務器加1後坐標數據:', data2.decode('utf-8'))
s.close()