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