Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
import socket
import sys
import time
class ArtemisClient:
def __init__(self, server_host, server_port, pretty=False):
self.server_host = server_host
self.server_port = server_port
self.username = None
self.password = None
self.opponent = None
self.playerNumber = None
self.color = None
self.server_sock = None
self.pretty = pretty
self.gameOver = False
def extractREMOVED(self, string):
# len("Removed:")
offset = 8
string = string.rstrip()
segment = string[string.find("Removed:")+offset:string.find("]")+1]
return segment
def extractMOVED(self, string):
#len(Move)
offset = 4
firstSegment = string[string.find("Move")+offset:string.find("]")+1]
string = string[string.find("]")+2:]
secondSegment = string[:string.find("]")+1]
return (firstSegment, secondSegment)
def waitForResponse(self):
if(self.gameOver):
return "GAME OVER"
response = self.server_sock.recv(4096).decode("utf-8")
if(response.find("Opponent wins!") != -1):
self.gameOver = True
elif(response.find("You win!") != -1):
self.gameOver = True
elif(response.find("Error") != -1):
self.gameOver = True
print("----------------------\n" + response + "----------------------")
return response
def send(self, string):
if(self.gameOver):
return "GAME OVER"
formatted_string = string.rstrip() + "\r\n"
if(self.pretty):
print("**********************\n" + formatted_string + "**********************")
self.server_sock.send(formatted_string.encode())
def sendREMOVE(self, piece):
self.send(piece)
def sendMOVE(self, start, end):
string = "{0}:{1}".format(start, end)
#print("I AM SENDING THIS MOVE: " + string)
self.send(string)
def waitREMOVE(self):
response = self.waitForResponse()
return self.extractREMOVED(response)
def waitMOVE(self, myTurn):
response = dummyResponse = self.waitForResponse()
# wait til i receive '?Move', so I know can transmit once it's my turn
while(not myTurn and dummyResponse.find("?Move") == -1 and (not self.gameOver)):
dummyResponse = self.waitForResponse()
#print("I JUST GOT THIS MOVE:" + response)
return self.extractMOVED(response)
def initialize(self, firstMove):
# Create socket and connect to server
try:
self.server_sock = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
self.server_sock.connect((self.server_host, self.server_port))
except OSError:
if self.server_sock:
self.server_sock.close()
sys.exit(1)
#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()
# 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]
response = self.waitForResponse()
# EX: [0,0]
removedPiece = self.extractREMOVED(response)
return removedPiece
def close(self):
self.server_sock.close()