|
|
|
@ -2,37 +2,66 @@ import socket
|
|
|
|
|
import requests
|
|
|
|
|
import sys
|
|
|
|
|
import json
|
|
|
|
|
class GameState:
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
def uploadtoServer(self,move):
|
|
|
|
|
#将move转换为json格式
|
|
|
|
|
|
|
|
|
|
#将json格式的move上传到服务器
|
|
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
class Network:
|
|
|
|
|
def __init__(self):
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
def getEnemyMove(self):
|
|
|
|
|
#从服务器获取json信息
|
|
|
|
|
self.msg = self.connect()
|
|
|
|
|
|
|
|
|
|
#将json信息转化成move
|
|
|
|
|
def getPos(self):
|
|
|
|
|
return self.pos
|
|
|
|
|
|
|
|
|
|
#返回move
|
|
|
|
|
pass
|
|
|
|
|
def connect(self):
|
|
|
|
|
try:
|
|
|
|
|
self.client.connect(self.addr)
|
|
|
|
|
#return self.client.recv(2048).decode()
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def updatefromServer(self,move):
|
|
|
|
|
move=getEnemyMove()
|
|
|
|
|
self.makeMove(move)
|
|
|
|
|
pass
|
|
|
|
|
def send(self, msg):
|
|
|
|
|
try:
|
|
|
|
|
packet = json.dumps(msg)
|
|
|
|
|
if (sys.version[:1] == '3'):
|
|
|
|
|
packet = packet.encode('utf-8')
|
|
|
|
|
#return self.client.recv(2048).encode()
|
|
|
|
|
self.client.send(packet)
|
|
|
|
|
except socket.error as e:
|
|
|
|
|
print(e)
|
|
|
|
|
|
|
|
|
|
def getLoginInfo(self):
|
|
|
|
|
#从服务器获取登录信息
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
#返回登录信息
|
|
|
|
|
pass
|
|
|
|
|
'''
|
|
|
|
|
def receive(self):
|
|
|
|
|
try:
|
|
|
|
|
msg = json.loads(self.client.recv(2048))
|
|
|
|
|
print(msg)
|
|
|
|
|
return msg
|
|
|
|
|
except socket.error as e:
|
|
|
|
|
print(e)
|
|
|
|
|
return e
|
|
|
|
|
|
|
|
|
|
def __init__(self, isNet = False, MySide = True):
|
|
|
|
|
class Move:
|
|
|
|
|
def __init__(self,start_loc,end_loc,board):
|
|
|
|
|
self.start_row = start_loc[0]
|
|
|
|
|
self.start_col = start_loc[1]
|
|
|
|
|
self.end_row = end_loc[0]
|
|
|
|
|
self.end_col = end_loc[1]
|
|
|
|
|
self.nxt_piece = board[self.end_row][self.end_col]
|
|
|
|
|
self.cur_piece = board[self.start_row][self.start_col]
|
|
|
|
|
self.attack = self.nxt_piece != '00'
|
|
|
|
|
self.moveID = self.start_row + self.start_col*10 + self.end_row *100 +self.end_col * 1000 #Hash
|
|
|
|
|
def __eq__(self, __o: object) -> bool:
|
|
|
|
|
if isinstance(__o, Move):
|
|
|
|
|
return self.moveID == __o.moveID
|
|
|
|
|
return False
|
|
|
|
|
class GameState:
|
|
|
|
|
def __init__(self, isNet = False, MySide = True,
|
|
|
|
|
game_id = None, client:Network = None ):
|
|
|
|
|
'''
|
|
|
|
|
有关信息:
|
|
|
|
|
1. 棋盘尺寸为7*9(横向)
|
|
|
|
@ -69,7 +98,9 @@ class GameState:
|
|
|
|
|
self.red_pieces=[7,6,5,4,3,2,1]
|
|
|
|
|
#红方(右)先行
|
|
|
|
|
self.isNet = isNet
|
|
|
|
|
self.game_id = game_id
|
|
|
|
|
self.red_to_move=MySide
|
|
|
|
|
self.client = client
|
|
|
|
|
self.conquered=False
|
|
|
|
|
self.win_person=''
|
|
|
|
|
self.MASSACRE=False
|
|
|
|
@ -77,8 +108,28 @@ class GameState:
|
|
|
|
|
def color(self):
|
|
|
|
|
return 'r' if self.red_to_move else 'b'
|
|
|
|
|
#网络版相关组件
|
|
|
|
|
def upld2server(self,move):
|
|
|
|
|
pass
|
|
|
|
|
def upldmv_server(self,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 dnldmv_server(self):
|
|
|
|
|
thisMovejson = self.client.receive()
|
|
|
|
|
thisMove =
|
|
|
|
|
return thisMove
|
|
|
|
|
|
|
|
|
|
# 判断特殊位置
|
|
|
|
|
def inHome(self,row,col,color):
|
|
|
|
@ -287,62 +338,7 @@ class GameState:
|
|
|
|
|
self.board[move.start_row][move.start_col] = '00'
|
|
|
|
|
if not self.isNet: self.red_to_move = not self.red_to_move
|
|
|
|
|
else:
|
|
|
|
|
#直接在这里完成两步实现看起来不可行……
|
|
|
|
|
#因为界面更新在main中
|
|
|
|
|
self.upldmv_server(move)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Network:
|
|
|
|
|
def __init__(self):
|
|
|
|
|
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()
|
|
|
|
|
|
|
|
|
|
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')
|
|
|
|
|
#return self.client.recv(2048).encode()
|
|
|
|
|
self.client.send(packet)
|
|
|
|
|
except socket.error as e:
|
|
|
|
|
print(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:
|
|
|
|
|
msg = json.loads(self.client.recv(2048))
|
|
|
|
|
print(msg)
|
|
|
|
|
return msg
|
|
|
|
|
except socket.error as e:
|
|
|
|
|
print(e)
|
|
|
|
|
return e
|
|
|
|
|
|
|
|
|
|
class Move:
|
|
|
|
|
def __init__(self,start_loc,end_loc,board):
|
|
|
|
|
self.start_row = start_loc[0]
|
|
|
|
|
self.start_col = start_loc[1]
|
|
|
|
|
self.end_row = end_loc[0]
|
|
|
|
|
self.end_col = end_loc[1]
|
|
|
|
|
self.nxt_piece = board[self.end_row][self.end_col]
|
|
|
|
|
self.cur_piece = board[self.start_row][self.start_col]
|
|
|
|
|
self.attack = self.nxt_piece != '00'
|
|
|
|
|
self.moveID = self.start_row + self.start_col*10 + self.end_row *100 +self.end_col * 1000 #Hash
|
|
|
|
|
def __eq__(self, __o: object) -> bool:
|
|
|
|
|
if isinstance(__o, Move):
|
|
|
|
|
return self.moveID == __o.moveID
|
|
|
|
|
return False
|