From 08849209729daddcb6ba40a8e5cb1a7c047772cc Mon Sep 17 00:00:00 2001 From: "john.wohl@uconn.edu" Date: Thu, 12 Dec 2019 20:29:23 -0500 Subject: [PATCH] client first interaction --- Konane.py | 20 +++++++++++- __pycache__/client.cpython-36.pyc | Bin 0 -> 2049 bytes __pycache__/state.cpython-36.pyc | Bin 0 -> 6135 bytes client.py | 50 ++++++++++++++++++++++++------ 4 files changed, 59 insertions(+), 11 deletions(-) create mode 100644 __pycache__/client.cpython-36.pyc create mode 100644 __pycache__/state.cpython-36.pyc diff --git a/Konane.py b/Konane.py index 6a9513f..95a9b8d 100644 --- a/Konane.py +++ b/Konane.py @@ -1,4 +1,5 @@ import client +import sys import state # Top level class that has the client and the state @@ -7,6 +8,23 @@ def __init__(self): self.client = client.ArtemisClient("artemis.engr.uconn.edu", 4705) self.state = state.State() self.playerNumber = None + + def stringToCoords(self, string): + coords = [] + coords.append(int(string[string.find("[")+1:string.find(":")])) + coords.append(int(string[string.find(":")+1:string.find("]")])) + + return coords def start(self): - self.playerNumber = self.client.initialize('TESTOPPONENT') + firstMove = self.state.first_moves_set()[0] + firstMoveCommand = "[{0}:{1}]".format(firstMove[0], firstMove[1]) + firstRemoved = self.client.initialize(firstMoveCommand) + removedCoords = self.stringToCoords(firstRemoved) + self.state.removePiece(removedCoords[0], removedCoords[1]) + + + +k = Konane() +print(k.stringToCoords("[0:14]")) + diff --git a/__pycache__/client.cpython-36.pyc b/__pycache__/client.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8531e5bc70ac102ac4f6a4dd0102a0e8275ecd41 GIT binary patch literal 2049 zcmZuyUvC>l5Z^y{=Z#}KX;QTf6o`bVDh`SZ6wB4g+^*Ym&Ua>a zoivv7{ZPu!~C%xF>xX0QY4{3gCfUl4al}xhyNdg{;EqwY<8kt?I{SFNsxZBQz5qrJcUY z#h_!%S*B$!vcVur!IZo*NIK_AH-`ORmCpSrOENv*Z?fp5&U4SGq^r?b?E(3N=nAk` zyL9j-Am8z?zA5&b7HeWyBR&tvZQ^`Ns`UacW&Qp?=|-~?|ilMW&2TwQzh@cqEDw3R_ZJdw6QuKjRJul7duGuclsD-HGh+{^8M2`w!P(&EQRhc}&oobaZpk zuSN9;O~41eoM*^~Fd35`0gvc}_89tgK`kG{j6&{!KfDnm8Y6#byPtgxMwekv%hM`4 z%>${TOsd=;fCskD3WtPN266%7h(W#N!OB@Dwg;I$el33w#0KL;=o%Gt^ueM7Z)wlt zvykJPu)Bzjq}K_=34H0XG3)UOK_6T`v&M*3%V0Z#<{ZEbOl2OZ6dkB@XSu!#;?`<6 z)BTRMN`^&b-f}~~4_Y6=FqkBSR`_Ub(QrI^ZmkbG7-yGFw;&4VTNV(9L1C~7Rwf6l zdCvpt!w9+%1xkJ<>9$8~>7=ZmP=YUN>F=Gcn84gF^~xAGN`4_JdxG+1T%U1Uad}F@ zDy-CCR9#eGYt5xAuca&RN*$iHv9o7(YQZtvCEp;@J7M}?iCt#Zol|6vyTj=~JHzS# z`IYplEIB=nO>VY2Kacd*#!yce-q?e@6AgU@V9Uw0gpA&vVx~+H$|>e=eH|(Xx(Qay z?m_rnWB+k$xp}nrC~Q7H-rqee^0X9XX{sXorq|@9qvpQW(3AWq$&AXmIXAhdUc^>o zLgs#)4u)1^++3(N-m9_FH2fThz6PZ37pcC~jiICuq0Tj0sW*VMD!QorA7T}~Qv+q} zPH`uRN9q$$cE19`81-n4-hdI%GF{~Y%ArgvbBZ%q;}s_tpb^j-6RgZeHx_g6&GGY! z$I8dyGOz|8fH-6yX3DJFGl!N&i|Vwfg~i%+q9YI+*Cpv_eeqfcWuv}?{TKfXVVIZ0 zu%F3cg5Q-e{B77t3W-J=9E=X|0%ZKXx=Suqn==7>pT8%x7lGJv5-9AC eQR^0vmS^L>a?AgBQZDWnMty^bxaNac3-%wz?!Dyz literal 0 HcmV?d00001 diff --git a/__pycache__/state.cpython-36.pyc b/__pycache__/state.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e25d00b4b2a017c10d5d935052e03b680f8bd19 GIT binary patch literal 6135 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 A)c^nh literal 0 HcmV?d00001 diff --git a/client.py b/client.py index 6bff94f..7ffeec1 100644 --- a/client.py +++ b/client.py @@ -6,21 +6,35 @@ class ArtemisClient: def __init__(self, server_host, server_port): self.server_host = server_host self.server_port = server_port - self.username = "MHJZ" - self.password = "4705" + self.username = None + self.password = None + self.opponent = None + self.playerNumber = None + self.color = None + # self.username = sys.stdin.readline() + # self.password = sys.stdin.readline() self.server_sock = None + def extractREMOVED(self, string): + # len("Removed:") + offset = 8 + + string = string .rstrip() + segment = string[string.find("Removed:"):string.find("]")+1] + return segment + def waitForResponse(self): - response = self.server_sock.recv(1024).decode('UTF-8').rstrip() - print(response, end="") + response = self.server_sock.recv(1024).decode("utf-8") + print(response) return response def send(self, string): - formatted_string = string + "\r\n" - print(formatted_string, end="") + formatted_string = string.rstrip() + "\r\n" + #formatted_string = string + #print(formatted_string, end="") self.server_sock.send(formatted_string.encode()) - def initialize(self, opponent): + def initialize(self, firstMove): # Create socket and connect to server try: self.server_sock = socket.socket( @@ -34,17 +48,33 @@ def initialize(self, opponent): #self.server_sock.sendall("!".encode("utf-8")) self.waitForResponse() self.waitForResponse() + self.username = input("") self.send(self.username) self.waitForResponse() + self.password = input("") self.send(self.password) self.waitForResponse() + opponent = input("") self.send(opponent) self.waitForResponse() response = self.waitForResponse() - playerNumber = int(response[7]) + + # First player + if(response[7] == "1"): + self.playerNumber = 1 + self.send(firstMove) + response = self.waitForResponse() + self.color = response[6:11] + # Second player + else: + self.playerNumber = 2 + self.color = response[6:11] - # Return player's turn position - return playerNumber + response = self.waitForResponse() + # EX: [0,0] + removedPiece = self.extractREMOVED(response) + + return removedPiece def close(self): self.server_sock.close()