|
|
|
@ -27,108 +27,108 @@ def startNewThread(target):
|
|
|
|
|
thread.daemon = True
|
|
|
|
|
thread.start()
|
|
|
|
|
|
|
|
|
|
class Network:
|
|
|
|
|
def __init__(self,isNet=False): #注意:这里是否在传引用?
|
|
|
|
|
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
|
self.server = "127.0.0.1"
|
|
|
|
|
self.port = 50005
|
|
|
|
|
self.addr = (self.server, self.port)
|
|
|
|
|
self.msg = self.connect()
|
|
|
|
|
#self.game_state = game_state #考虑将game_state接入Network以方便修改
|
|
|
|
|
global msg_from_serv
|
|
|
|
|
thread = Thread(target = self.receive())#开线程始终监听
|
|
|
|
|
thread.setDaemon(True)
|
|
|
|
|
thread.start() #专用数据接收线程
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getPos(self):
|
|
|
|
|
return self.pos
|
|
|
|
|
|
|
|
|
|
def connect(self):
|
|
|
|
|
try:
|
|
|
|
|
self.client.connect(self.addr)
|
|
|
|
|
#return self.client.recv(2048).decode()
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def send(self, msg):
|
|
|
|
|
try:
|
|
|
|
|
packet = json.dumps(msg)
|
|
|
|
|
if (sys.version[:1] == '3'):
|
|
|
|
|
packet = packet.encode('utf-8')
|
|
|
|
|
self.client.send(packet)
|
|
|
|
|
print("send complete")
|
|
|
|
|
return self.client.recv(2048).encode()
|
|
|
|
|
except socket.error as e:
|
|
|
|
|
print(e)
|
|
|
|
|
return e
|
|
|
|
|
|
|
|
|
|
def post(self, data): #using requests lib, data is json
|
|
|
|
|
headers = {'Content-Type': 'application/json'}
|
|
|
|
|
response = requests.post(url='http://localhost',data=data)
|
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
|
def receive(self): #写成持续监听模式
|
|
|
|
|
try:
|
|
|
|
|
while True:
|
|
|
|
|
recvMsg = self.client.recv(2048).decode('utf-8')
|
|
|
|
|
if len(recvMsg) != 0:
|
|
|
|
|
msg_from_serv = json.loads(recvMsg)
|
|
|
|
|
self.dataDealer(msg_from_serv)
|
|
|
|
|
except socket.error as e:
|
|
|
|
|
print(e)
|
|
|
|
|
return e
|
|
|
|
|
|
|
|
|
|
def dataDealer(self, msg_json): #根据相关数据对棋盘状态进行更新
|
|
|
|
|
if 'status' in msg_json.keys():
|
|
|
|
|
#处理相关特殊情况
|
|
|
|
|
if msg_json['status'] == '1':
|
|
|
|
|
print('Waiting 4 the other player...')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
elif 'src' and 'dst' in msg_json.keys(): #侦测到移动
|
|
|
|
|
theMove = Move([msg_json['src']['x'],msg_json['src']['y']],[msg_json['dst']['x'],msg_json['dst']['y']],self.game_state.board)
|
|
|
|
|
self.game_state.makeMove(theMove,toUpload = False)
|
|
|
|
|
self.game_state.exchange()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def dataReceiver(self):
|
|
|
|
|
try:
|
|
|
|
|
while True:
|
|
|
|
|
msg = self.client.recv(2048).decode('utf-8')
|
|
|
|
|
if len(msg) != 0: self.dataDealer(json.loads(msg))
|
|
|
|
|
|
|
|
|
|
except socket.error as e:
|
|
|
|
|
print(e)
|
|
|
|
|
return e
|
|
|
|
|
|
|
|
|
|
def tell_move(self, move: Move):
|
|
|
|
|
thisMove = {
|
|
|
|
|
'type': 1,
|
|
|
|
|
'msg':{
|
|
|
|
|
"game_id": self.game_id,
|
|
|
|
|
"side": int(self.red_to_move),
|
|
|
|
|
"chessman": move.cur_piece,
|
|
|
|
|
"src": {
|
|
|
|
|
"x": move.start_row,
|
|
|
|
|
"y": move.start_col
|
|
|
|
|
},
|
|
|
|
|
"dst": {
|
|
|
|
|
"x": move.end_row,
|
|
|
|
|
"y": move.end_col
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
self.client.send(thisMove)
|
|
|
|
|
|
|
|
|
|
def login(self,myName):
|
|
|
|
|
myPlayerData = {
|
|
|
|
|
'type': 0, # game state type ?
|
|
|
|
|
'msg': {
|
|
|
|
|
'name': myName
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
self.client.send(myPlayerData)
|
|
|
|
|
# class Network:
|
|
|
|
|
# def __init__(self,isNet=False): #注意:这里是否在传引用?
|
|
|
|
|
# self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
|
# self.server = "127.0.0.1"
|
|
|
|
|
# self.port = 50005
|
|
|
|
|
# self.addr = (self.server, self.port)
|
|
|
|
|
# self.msg = self.connect()
|
|
|
|
|
# #self.game_state = game_state #考虑将game_state接入Network以方便修改
|
|
|
|
|
# global msg_from_serv
|
|
|
|
|
# thread = Thread(target = self.receive())#开线程始终监听
|
|
|
|
|
# thread.setDaemon(True)
|
|
|
|
|
# thread.start() #专用数据接收线程
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# def getPos(self):
|
|
|
|
|
# return self.pos
|
|
|
|
|
|
|
|
|
|
# def connect(self):
|
|
|
|
|
# try:
|
|
|
|
|
# self.client.connect(self.addr)
|
|
|
|
|
# #return self.client.recv(2048).decode()
|
|
|
|
|
# except:
|
|
|
|
|
# pass
|
|
|
|
|
|
|
|
|
|
# def send(self, msg):
|
|
|
|
|
# try:
|
|
|
|
|
# packet = json.dumps(msg)
|
|
|
|
|
# if (sys.version[:1] == '3'):
|
|
|
|
|
# packet = packet.encode('utf-8')
|
|
|
|
|
# self.client.send(packet)
|
|
|
|
|
# print("send complete")
|
|
|
|
|
# return self.client.recv(2048).encode()
|
|
|
|
|
# except socket.error as e:
|
|
|
|
|
# print(e)
|
|
|
|
|
# return e
|
|
|
|
|
|
|
|
|
|
# def post(self, data): #using requests lib, data is json
|
|
|
|
|
# headers = {'Content-Type': 'application/json'}
|
|
|
|
|
# response = requests.post(url='http://localhost',data=data)
|
|
|
|
|
# return response
|
|
|
|
|
|
|
|
|
|
# def receive(self): #写成持续监听模式
|
|
|
|
|
# try:
|
|
|
|
|
# while True:
|
|
|
|
|
# recvMsg = self.client.recv(2048).decode('utf-8')
|
|
|
|
|
# if len(recvMsg) != 0:
|
|
|
|
|
# msg_from_serv = json.loads(recvMsg)
|
|
|
|
|
# self.dataDealer(msg_from_serv)
|
|
|
|
|
# except socket.error as e:
|
|
|
|
|
# print(e)
|
|
|
|
|
# return e
|
|
|
|
|
|
|
|
|
|
# def dataDealer(self, msg_json): #根据相关数据对棋盘状态进行更新
|
|
|
|
|
# if 'status' in msg_json.keys():
|
|
|
|
|
# #处理相关特殊情况
|
|
|
|
|
# if msg_json['status'] == '1':
|
|
|
|
|
# print('Waiting 4 the other player...')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# elif 'src' and 'dst' in msg_json.keys(): #侦测到移动
|
|
|
|
|
# theMove = Move([msg_json['src']['x'],msg_json['src']['y']],[msg_json['dst']['x'],msg_json['dst']['y']],self.game_state.board)
|
|
|
|
|
# self.game_state.makeMove(theMove,toUpload = False)
|
|
|
|
|
# self.game_state.exchange()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# def dataReceiver(self):
|
|
|
|
|
# try:
|
|
|
|
|
# while True:
|
|
|
|
|
# msg = self.client.recv(2048).decode('utf-8')
|
|
|
|
|
# if len(msg) != 0: self.dataDealer(json.loads(msg))
|
|
|
|
|
|
|
|
|
|
# except socket.error as e:
|
|
|
|
|
# print(e)
|
|
|
|
|
# return e
|
|
|
|
|
|
|
|
|
|
# def tell_move(self, move: Move):
|
|
|
|
|
# thisMove = {
|
|
|
|
|
# 'type': 1,
|
|
|
|
|
# 'msg':{
|
|
|
|
|
# "game_id": self.game_id,
|
|
|
|
|
# "side": int(self.red_to_move),
|
|
|
|
|
# "chessman": move.cur_piece,
|
|
|
|
|
# "src": {
|
|
|
|
|
# "x": move.start_row,
|
|
|
|
|
# "y": move.start_col
|
|
|
|
|
# },
|
|
|
|
|
# "dst": {
|
|
|
|
|
# "x": move.end_row,
|
|
|
|
|
# "y": move.end_col
|
|
|
|
|
# }
|
|
|
|
|
# }
|
|
|
|
|
# }
|
|
|
|
|
# self.client.send(thisMove)
|
|
|
|
|
|
|
|
|
|
# def login(self,myName):
|
|
|
|
|
# myPlayerData = {
|
|
|
|
|
# 'type': 0, # game state type ?
|
|
|
|
|
# 'msg': {
|
|
|
|
|
# 'name': myName
|
|
|
|
|
# }
|
|
|
|
|
# }
|
|
|
|
|
# self.client.send(myPlayerData)
|
|
|
|
|
class GameState:
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
@ -221,6 +221,7 @@ class GameState:
|
|
|
|
|
for col in range(len(self.board[row])):
|
|
|
|
|
player = self.board[row][col][0]
|
|
|
|
|
if (player == 'r' and self.red_to_move or player == 'b' and not self.red_to_move):
|
|
|
|
|
#print('what color is the valid move? ',player)
|
|
|
|
|
self.moveFunctions[self.board[row][col][1]](row,col,moves)
|
|
|
|
|
return moves
|
|
|
|
|
|
|
|
|
|