コード例 #1
0
ファイル: game.py プロジェクト: roxteddy/Zappy
 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)
コード例 #2
0
 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)
コード例 #3
0
ファイル: object_map.py プロジェクト: roxteddy/Zappy
 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))
コード例 #4
0
ファイル: object_map.py プロジェクト: roxteddy/Zappy
 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))
コード例 #5
0
ファイル: main.py プロジェクト: roxteddy/Zappy
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))
コード例 #6
0
ファイル: main.py プロジェクト: roxteddy/Zappy
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))
コード例 #7
0
ファイル: object_map.py プロジェクト: roxteddy/Zappy
 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))
コード例 #8
0
ファイル: object_map.py プロジェクト: roxteddy/Zappy
 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))
コード例 #9
0
ファイル: game.py プロジェクト: roxteddy/Zappy
 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)
コード例 #10
0
ファイル: game.py プロジェクト: roxteddy/Zappy
 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]] = []
コード例 #11
0
 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)
コード例 #12
0
 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]] = []
コード例 #13
0
ファイル: game.py プロジェクト: roxteddy/Zappy
 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)
コード例 #14
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)
コード例 #15
0
ファイル: game.py プロジェクト: roxteddy/Zappy
 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)
コード例 #16
0
 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)
コード例 #17
0
ファイル: game.py プロジェクト: roxteddy/Zappy
 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)
コード例 #18
0
 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)
コード例 #19
0
ファイル: game.py プロジェクト: roxteddy/Zappy
 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)
コード例 #20
0
 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)
コード例 #21
0
 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)
コード例 #22
0
ファイル: game.py プロジェクト: roxteddy/Zappy
 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)
コード例 #23
0
ファイル: game.py プロジェクト: roxteddy/Zappy
 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)
コード例 #24
0
 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)
コード例 #25
0
 def smg(self, message):
     if message[0]:
         log("server says " + "".join(message))
コード例 #26
0
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")
コード例 #27
0
            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" %
コード例 #28
0
ファイル: game.py プロジェクト: roxteddy/Zappy
 def smg(self, message):
     if message[0]:
         log("server says " + "".join(message))
コード例 #29
0
ファイル: main.py プロジェクト: roxteddy/Zappy
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)
コード例 #30
0
ファイル: main.py プロジェクト: roxteddy/Zappy
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)
コード例 #31
0
ファイル: game.py プロジェクト: roxteddy/Zappy
        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:])))