def __init__(self, playerColor): """ Simple client object used to communicate to server :param playerColor: The active players color. options red, or blue """ self.playerColor = playerColor if not self.playerColor.lower() in utils.getGameContent().keys(): raise utils.ServerException("Invalid player color %s" % self.playerColor) self.context = None self.redScore = 0 self.blueScore = 0 self.turn = 4 self.timeout = 10
#------------------------------------------------------------------------------ # server.py - server for simple zero-sum game #------------------------------------------------------------------------------ import zmq import json import utils GAME_CONTENT = utils.getGameContent() PORT = utils.defaultServerPort() HOST = utils.defaultHost() def start(): """ Start the game server and wait for other players to join game """ context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://%s:%s" % (HOST, PORT)) print "server started.." while True: # Wait for next request from client gameData = json.loads(socket.recv()) print "data recieved %s" % gameData score = gameData.get('score') try: computerData = getComputerChoice(gameData) except utils.ServerException, e: errorData = {"Error": e.message}
#------------------------------------------------------------------------------ # __init__.py - windows used to visualize game #------------------------------------------------------------------------------ import functools import utils import Tkinter import ttk GAME_CONTENT = utils.getGameContent() class GameWindow(Tkinter.Tk): def __init__(self, newPlayerCallback, requestCallback, *args, **kwargs): """ Simple Tk UI to give visualization to game :param newPlayerCallback: Callback for when a new player is created :param requestCallback: Callback for when player makes a choice """ Tkinter.Tk.__init__(self, *args, **kwargs) self.newPlayerCallback = newPlayerCallback self.requestCallback = requestCallback self.center(240, 80) self.title("You'll never win!") self.call('wm', 'attributes', '.', '-topmost', True) self.after_idle(self.call, 'wm', 'attributes', '.', '-topmost', False) self.protocol("WM_DELETE_WINDOW", self.close) self.initUi() self.lift() self.wait_window(self) def initUi(self):