def enw(self, message): """ Lay an egg by a player at x/y pos """ from object_map import Egg try: if len(message) != 4: raise Exception("wrong parameters") if message[1][0] != '#' or message[0][0] != '#': raise Exception("bad player number") message[1] = message[1][1:] message[0] = message[0][1:] message = tuple([int(integer) for integer in message]) e = Egg(*message) if not self.coordinate(message[2], message[3]): raise Exception("bad coordinates %d / %d" % (message[2], message[3])) for i in self.map: for x in self.map[i]: for t in self.map[i][x]: if isinstance(t, Egg) and t == e: raise Exception ("egg %d already exist" % message[0]) for t in self.__class__.teams.keys(): for player in self.__class__.teams[t]: if message[1] == player.n: self.map[message[2]][message[3]].append(e) return log("player %d lay the egg %d" % (message[1], message[0])) raise Exception("player %d does not exist" % message[1]) except Exception, e: return log(e)
def enw(self, message): """ Lay an egg by a player at x/y pos """ from object_map import Egg try: if len(message) != 4: raise Exception("wrong parameters") if message[1][0] != '#' or message[0][0] != '#': raise Exception("bad player number") message[1] = message[1][1:] message[0] = message[0][1:] message = tuple([int(integer) for integer in message]) e = Egg(*message) if not self.coordinate(message[2], message[3]): raise Exception("bad coordinates %d / %d" % (message[2], message[3])) for i in self.map: for x in self.map[i]: for t in self.map[i][x]: if isinstance(t, Egg) and t == e: raise Exception("egg %d already exist" % message[0]) for t in self.__class__.teams.keys(): for player in self.__class__.teams[t]: if message[1] == player.n: self.map[message[2]][message[3]].append(e) return log("player %d lay the egg %d" % (message[1], message[0])) raise Exception("player %d does not exist" % message[1]) except Exception, e: return log(e)
def __init__(self, N, n, X, Y, O, L): super(Player, self).__init__(X, Y) self.n = n self.O = O self.L = L self.team = N log("Player %d created at %d / %d, from %s" % (self.n, self.X, self.Y, self.team))
def loop(s, g): while True: message = s.read().split() if not message: continue if message[0] == 'BIENVENUE': g.welcome() continue mes = message.pop(0) func = getattr(g, mes, None) if func: func(message) else: log("unknown function:" + mes + " " + "".join(message))
def __init__(self, e, n, X, Y, d = 0, o = 0): """ d = mort ? 0 = non, 1 = oui o = eclot ? 0 = non, 1 = oui e = numero de l'oeuf n = numero du joueur qui a pondu X = coordonnee X Y = coordonnee Y """ super(Egg, self).__init__(X, Y) self.o = o self.e = e self.n = n log("Egg %d created at %d / %d from player %d" % (self.e, self.X, self.Y, self.n))
def __init__(self, e, n, X, Y, d=0, o=0): """ d = mort ? 0 = non, 1 = oui o = eclot ? 0 = non, 1 = oui e = numero de l'oeuf n = numero du joueur qui a pondu X = coordonnee X Y = coordonnee Y """ super(Egg, self).__init__(X, Y) self.o = o self.e = e self.n = n log("Egg %d created at %d / %d from player %d" % (self.e, self.X, self.Y, self.n))
def pnw(self, message): """ Create a new player """ from object_map import Player try: if len(message) != 6: raise Exception("wrong parameters") team = message.pop(5) if not team in self.__class__.teams: raise Exception("team %s does not exist" % team) if message[0][0] != '#': raise Exception("bad player number") message[0] = message[0][1:] message = tuple([int(integer) for integer in message]) if not self.coordinate(*message[1:3]): raise Exception("bad coordinates %d / %d" % (message[1], message[2])) if not self.orientation(message[3]): raise Exception("bad orientation %d" % message[3]) p = Player(team, *message[0:5]) for t in self.__class__.teams.keys(): for player in self.__class__.teams[t]: if p == player: raise Exception("player %d already exists" % p.n) except Exception, e: return log(e)
def tna(cls, message): """ Create a team if the team does not exist """ if message[0] in cls.teams: return log("team %s already exists" % message[0]) cls.teams[message[0]] = []
def pbc(self, message): try: if len(message) != 2: raise Exception("wrong parameters") if message[0][0] != '#': raise Exception("bad player number") message[0] = int(message[0][1:]) except Exception, e: return log(e)
def plv(self, message): try: if len(message) != 2: raise Exception("wrong parameters") if message[0][0] != '#': raise Exception("bad player number") message[0] = message[0][1:] message = tuple([int(integer) for integer in message]) except Exception, e: return log(e)
def edi(self, message): from object_map import Egg try: if len(message) != 1: raise Exception("wrong parameters") if message[0][0] != '#': raise Exception("bad number") message[0] = int(message[0][1:]) except Exception, e: return log(e)
def pdr(self, message): from object_map import ObjectFactory X, Y = 0, 0 try: if len(message) != 2: raise Exception("wrong parameters") if message[0][0] != '#': raise Exception("bad player number") message[0] = message[0][1:] message = tuple([int(integer) for integer in message]) except Exception, e: return log(e)
def msz(self, message): """ 0 = nourriture 1 = linemate 2 = deraumere 3 = sibur 4 = mendiane 5 = phiras 6 = thystame """ try: if len(message) != 2: raise Exception("wrong parameters") self.x = int(message[0]) self.y = int(message[1]) if not self.coordinate(self.x, self.y): raise Exception("bad coordinates") except Exception, e: return log(e)
def bct(self, message): """ Create the part of the map[y][x] with a factory """ from object_map import ObjectFactory try: if len(message) != 9: raise Exception("wrong parameters") message = tuple([int(integer) for integer in message]) if not self.coordinate(*message[0:2]): raise Exception("bad coordinates: x:%d / y:%d" % (message[0], message[1])) x, y, map = message[0], message[1], message[2:] if self.map[y][x]: del self.map[y][x] self.map[y][x] = [] for i in range(0, len(map)): for u in range(1, map[i] + 1): self.map[y][x].append(ObjectFactory(i, x, y)) except Exception, e: return log(e)
def smg(self, message): if message[0]: log("server says " + "".join(message))
class Game(object): teams = {} map = {} def __init__(self, Sock): self.s = Sock def welcome(self): """ Send "GRAPHIC" to the server, to start the transmission """ self.s.send("GRAPHIC") def print_map(self): """ Print map """ for key in self.map: print key, self.map[key] def orientation(self, o): if 0 < o <= 4: return True return False def coordinate(self, x, y): if 0 <= x <= self.x and 0 <= y <= self.y: return True return False @classmethod def tna(cls, message): """ Create a team if the team does not exist """ if message[0] in cls.teams: return log("team %s already exists" % message[0]) cls.teams[message[0]] = [] def smg(self, message): if message[0]: log("server says " + "".join(message)) def msz(self, message): """ 0 = nourriture 1 = linemate 2 = deraumere 3 = sibur 4 = mendiane 5 = phiras 6 = thystame """ try: if len(message) != 2: raise Exception("wrong parameters") self.x = int(message[0]) self.y = int(message[1]) if not self.coordinate(self.x, self.y): raise Exception("bad coordinates") except Exception, e: return log(e) for i in range(0, self.y): self.map[i] = {} for j in range(0, self.x): self.map[i][j] = [] log("map x:%d / y:%d created" % (self.x, self.y)) self.s.send("msz")
if len(message) != 9: raise Exception("wrong parameters") message = tuple([int(integer) for integer in message]) if not self.coordinate(*message[0:2]): raise Exception("bad coordinates: x:%d / y:%d" % (message[0], message[1])) x, y, map = message[0], message[1], message[2:] if self.map[y][x]: del self.map[y][x] self.map[y][x] = [] for i in range(0, len(map)): for u in range(1, map[i] + 1): self.map[y][x].append(ObjectFactory(i, x, y)) except Exception, e: return log(e) log("Cell %d/%d filled: %s" % (x, y, self.map[y][x])) self.s.send("bct " + str(x) + " " + str(y)) def pbc(self, message): try: if len(message) != 2: raise Exception("wrong parameters") if message[0][0] != '#': raise Exception("bad player number") message[0] = int(message[0][1:]) except Exception, e: return log(e) for team in self.__class__.teams.keys(): for player in self.__class__.teams[team]: if message[0] == player.n: return log("player %d says %s" %
import sys def loop(s, g): while True: message = s.read().split() if not message: continue if message[0] == 'BIENVENUE': g.welcome() continue mes = message.pop(0) func = getattr(g, mes, None) if func: func(message) else: log("unknown function:" + mes + " " + "".join(message)) # debug # print g.print_map() # print g.teams if __name__ == '__main__': if len(sys.argv) != 3: log("usage: python main.py host port") exit() s = Sock(sys.argv[1], sys.argv[2]) g = Game(s) loop(s, g)
from game import Game from stuff import log import sys def loop(s, g): while True: message = s.read().split() if not message: continue if message[0] == 'BIENVENUE': g.welcome() continue mes = message.pop(0) func = getattr(g, mes, None) if func: func(message) else: log("unknown function:" + mes + " " + "".join(message)) # debug # print g.print_map() # print g.teams if __name__ == '__main__': if len(sys.argv) != 3: log("usage: python main.py host port") exit() s = Sock(sys.argv[1], sys.argv[2]) g = Game(s) loop(s, g)
try: if len(message) != 9: raise Exception("wrong parameters") message = tuple([int(integer) for integer in message]) if not self.coordinate(*message[0:2]): raise Exception("bad coordinates: x:%d / y:%d" % (message[0], message[1])) x, y, map = message[0], message[1], message[2:] if self.map[y][x]: del self.map[y][x] self.map[y][x] = [] for i in range(0, len(map)): for u in range(1, map[i] + 1): self.map[y][x].append(ObjectFactory(i, x, y)) except Exception, e: return log(e) log("Cell %d/%d filled: %s" % (x, y, self.map[y][x])) self.s.send("bct " + str(x) + " " + str(y)) def pbc(self, message): try: if len(message) != 2: raise Exception("wrong parameters") if message[0][0] != '#': raise Exception("bad player number") message[0] = int(message[0][1:]) except Exception, e: return log(e) for team in self.__class__.teams.keys(): for player in self.__class__.teams[team]: if message[0] == player.n: return log("player %d says %s" % (message[0], "".join(message[1:])))