diff options
| author | Florian Jung <flo@windfisch.org> | 2015-08-25 19:53:35 +0200 | 
|---|---|---|
| committer | Florian Jung <flo@windfisch.org> | 2015-08-25 19:53:35 +0200 | 
| commit | 5b91b2732ed339a1c2559e06833cc4f1daec01ae (patch) | |
| tree | 3e74df508b7b8695032a1b6b26c6bf3a2bae7e95 | |
| parent | 0df1c5f7799fdd63c3cd3fdc92bc9ccc60d1da8f (diff) | |
statistics
| -rw-r--r-- | main.py | 2 | ||||
| -rw-r--r-- | stats.py | 34 | 
2 files changed, 36 insertions, 0 deletions
@@ -80,4 +80,6 @@ while gui.running:          else:              autorespawn_counter-=1 +stats.save("stats.pickle") +  print("bye") @@ -1,4 +1,6 @@  import time +from collections import defaultdict +import pickle  class Stats:      def __init__(self,c): @@ -12,6 +14,10 @@ class Stats:          self.cell_aggressivity = {}          self.cell_split_frequency = {}          self.cell_defensiveness = {} + +        self.size_vs_speed = defaultdict(lambda : defaultdict(lambda : 0)) +        self.size_vs_visible_window = defaultdict(lambda : []) +        self.mass_vs_visible_window = defaultdict(lambda : [])      def log_mass(self, mass):          self.mass_history.append((time.time(), mass)) @@ -39,3 +45,31 @@ class Stats:      def process_frame(self):          self.log_pos(self.c.player.center)          self.log_mass(self.c.player.total_mass) +         +        cells = self.c.world.cells.values() +        own_cells = self.c.player.own_cells + +        own_total_size = sum( map(lambda cell : cell.size, own_cells) ) +        own_total_mass = sum( map(lambda cell : cell.mass, own_cells) ) + +        n = 3 +        for cell in filter(lambda cell : not cell.is_food and not cell.is_virus and not cell.is_ejected_mass, cells): +            if hasattr(cell,'poslog') and len(cell.poslog) > n+1: +                cellspeed = 0 +                for i in range(1,n+1): +                    cellspeed += (cell.poslog[-i] - cell.poslog[-i-1]).len() / n +                 +                cellspeed = int(cellspeed) +                self.size_vs_speed[cell.size][cellspeed] += 1 + +        visible_width = max( map(lambda cell : cell.pos.x - cell.size, cells) ) - min( map(lambda cell : cell.pos.x + cell.size, cells) ) +        visible_height = max( map(lambda cell : cell.pos.y - cell.size, cells) ) - min( map(lambda cell : cell.pos.y + cell.size, cells) ) + +        self.size_vs_visible_window[own_total_size].append((visible_width,visible_height)) +        self.mass_vs_visible_window[own_total_mass].append((visible_width,visible_height)) + +    def save(self,filename): +        pickle.dump(self, open(filename,"wb")) + +    def load(filename): +        return pickle.load(open(filename,"rb"))  | 
