master
tzzzzzzzx 3 years ago
parent 655ef43aa5
commit 33c0989010

@ -260,7 +260,7 @@ def main(mode,p1,p2,network = None):
loadImages()
drawBoard(screen)
isOnline = bool(network != None)
game_state=backend.GameState(isNet=isOnline,MySide=True if not isOnline else bool(NewPlayerMessage['side']))
game_state=backend.GameState(isNet=isOnline,MySide=True if not isOnline else bool(NewPlayerMessage['side']),game_id=NewPlayerMessage['game_id'],client=network)
valid_moves=game_state.getAllMoves()
running = True
mademove = False
@ -316,7 +316,6 @@ def main(mode,p1,p2,network = None):
pg.display.flip()
elif mode == 2:
while running:
for e in pg.event.get():
#接下来处理游戏中的事件
if e.type == pg.QUIT:
@ -352,7 +351,12 @@ def main(mode,p1,p2,network = None):
if mademove:
valid_moves = game_state.getAllMoves()
ShowGameState(screen,game_state,valid_moves,square_selected)
ShowGameState(screen,game_state,valid_moves,square_selected)
#* 网络对战局面更新
if network is not None:
print('waiting for other players to move...')
otherMove = game_state.dnldmv_server()
if game_state.conquer():
showGameOverText(screen,"player "+game_state.win_person+" wins")
game_over = True

@ -2,37 +2,66 @@ import socket
import requests
import sys
import json
class GameState:
'''
def uploadtoServer(self,move):
#将move转换为json格式
#将json格式的move上传到服务器
pass
def getEnemyMove(self):
#从服务器获取json信息
#将json信息转化成move
#返回move
pass
def updatefromServer(self,move):
move=getEnemyMove()
self.makeMove(move)
pass
def getLoginInfo(self):
#从服务器获取登录信息
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)
#返回登录信息
pass
'''
def __init__(self, isNet = False, MySide = True):
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
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
Loading…
Cancel
Save