Пример #1
0
from Config import Config
from Data import GrowthMap, MAP_SIZE
from Terrain import Terrain
from Player import Player

PLAYER_COUNT = 800

players = [Player('player_%d' % i, None) for i in xrange(PLAYER_COUNT)]
terrain = Terrain()
terrain.size = MAP_SIZE
terrain.growth = copy.deepcopy(GrowthMap)
terrain.sugar = copy.deepcopy(GrowthMap)

for player in players:
    player.sugar = 10
    terrain.born(player)

start = time.clock()
cb = GConnection(host=Config['dbHost'], bucket=Config['dbBucket'])
#cb = Couchbase.connect(host=Config['dbHost'], bucket=Config['dbBucket'])

cb.set('sugarscape', {'playerKeys': ','.join((p.Key() for p in players))})

for player in players:
    cb.set(player.Key(), player.Data())

cb.set(terrain.Key(), terrain.Data())

end = time.clock()
print 'success, elapsed:%s' % (end - start)
Пример #2
0
class SugarScape:
    def __init__(self):
        self.players = []
        self.terrain = Terrain()
        self.judge = MoveJudge(self.terrain)

    @LoadObject
    def load(self):
        for key in itersplit(self.playerKeys, ','):
            player = Player(key, self)
            player.load()
            self.players.append(player)

        self.terrain.load(self.players)

    def start(self):
        self.terrain.start()
        self.judge.start()
        for player in self.players:
            player.start()

    @SaveObject
    def join(self):
        try:
            gevent.joinall([self.terrain] + [self.judge] + self.players)
        except SystemExit:
            for player in self.players:
                player.running = False
            gevent.joinall(self.players)
            self.judge.running = False
            self.terrain.running = False
            gevent.joinall([self.terrain])

    @SaveObject
    def born(self, player):
        self.players.append(player)
        return self.terrain.born(player)

    @SaveObject
    def dead(self, player):
        self.players.remove(player)
        return self.terrain.dead(player)
        
    def peek(self, position):
        return self.terrain.peek(position)

    def existPlayer(self, position):
        return self.terrain.existPlayer(position)

    def isMovable(self, position):
        return self.terrain.isMovable(position)

    def requestMove(self, request):
        return self.judge.inbox.put(request)

    def movePlayer(self, player, position):
        return self.terrain.movePlayer(player, position)

    def gather(self, position):
        return self.terrain.gather(position)

    def Data(self):
        return {'playerKeys': ','.join((p.Key() for p in self.players))}

    def Key(self):
        return 'sugarscape'