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)
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'