diff options
| -rw-r--r-- | gui.py | 33 | ||||
| -rw-r--r-- | main.py | 14 | ||||
| -rw-r--r-- | stats.py | 36 | 
3 files changed, 74 insertions, 9 deletions
@@ -22,12 +22,39 @@ logging = False  input = False  clock = pygame.time.Clock() -screensize=(800,600) +screensize=(1280, 720)  screen=pygame.display.set_mode(screensize,HWSURFACE|DOUBLEBUF|RESIZABLE) -def debug_line(p1,p2,col): +def debug_line(p1, p2, color):      global screen -    pygame.draw.line(screen, col, world_to_win_pt(p1, c.player.center), world_to_win_pt(p2, c.player.center)) +    p1win = world_to_win_pt(p1, c.player.center) +    p2win = world_to_win_pt(p2, c.player.center) +    gfxdraw.line(screen, p1win[0], p1win[1], p2win[0], p2win[1], color) + +def debug_box(rect, color, filled=False): +    if filled: +        screen.fill(color, rect) +    else: +        gfxdraw.rectangle(screen, rect, color) + +def debug_circle(pos, r, color, filled=False): +    if filled: +        gfxdraw.filled_circle(screen, pos[0], pos[1], r, color) +    else: +        gfxdraw.circle(screen, pos[0], pos[1], r, color) +    gfxdraw.aacircle(screen, pos[0], pos[1], r, color) + +def debug_polygon(polygon, color, filled=False): +    polygon = list(map(lambda x: world_to_win_pt(x, c.player.center), polygon)) +    if filled: +        gfxdraw.filled_polygon(screen, polygon, color) +    else: +        gfxdraw.polygon(screen, polygon, color) +    gfxdraw.aapolygon(screen, polygon, color) + +def debug_path(path, color): +    for i in range(1, len(path)): +        debug_line(path[i-1], path[i], color)  def update():      pygame.display.update() @@ -6,14 +6,16 @@ from pygame.locals import *  import sys  import math  import time -import gui  import random +import gui +import stats  from subscriber import DummySubscriber  from interval_utils import * +# global vars  sub = DummySubscriber()  c = client.Client(sub) - +stats = stats.Stats()  # find out server and token to connect  try: @@ -33,7 +35,6 @@ c.player.nick="so mal sehen"  # initialize GUI  gui.set_client(c) -  # main loop  while True:      c.on_message() @@ -68,7 +69,6 @@ while True:              c.send_target(runaway_x, runaway_y)              print ("Running away: " + str((runaway_x-c.player.center[0], runaway_y-c.player.center[1])))              gui.debug_line(c.player.center, (runaway_x,runaway_y),(255,0,0)) -            gui.update()          else:              food = list(filter(lambda x: x.is_food or x.mass <= sorted(c.player.own_cells, key = lambda x: x.mass)[0].mass * 0.75 and not x.is_virus, c.world.cells.values()))              def dist(cell): return math.sqrt((cell.pos[0]-c.player.center[0])**2 + (cell.pos[1]-c.player.center[1])**2) @@ -77,12 +77,14 @@ while True:              if len(food) > 0:                  c.send_target(food[0].pos[0], food[0].pos[1])                  gui.debug_line(c.player.center, food[0].pos,(0,0,255)) -                gui.update()                  print("Found food at: " + str(food[0].pos))              else:                  rx = c.player.center[0] + random.randrange(-400, 401)                  ry = c.player.center[1] + random.randrange(-400, 401)                  c.send_target(rx, ry)                  gui.debug_line(c.player.center, (rx, ry),(0,255,0)) -                gui.update()                    print("Nothing to do, heading to random destination: " + str((rx, ry))) +         +        gui.update() +        stats.log_pos(c.player.center) +        stats.log_mass(c.player.total_mass) diff --git a/stats.py b/stats.py new file mode 100644 index 0000000..f850339 --- /dev/null +++ b/stats.py @@ -0,0 +1,36 @@ +import time + +class Stats: +    def __init__(self): +        self.min_mass = 0 +        self.max_mass = 0 +        self.current_mass = 0 +         +        self.mass_history = [] +        self.pos_history = [] +        self.cell_aggressivity = {} +        self.cell_split_frequency = {} +        self.cell_defensiveness = {} +         +    def log_mass(self, mass): +        self.mass_history.append((time.time(), mass)) +        self.current_mass = mass +        if mass > self.max_mass: +            self.max_mass = mass +        if mass < self.min_mass: +            self.min_mass = mass +     +    def log_pos(self, pos): +        self.pos_history.append((time.time(), (pos[0], pos[1]))) +         +    def update_cell_aggressivity(self, cell, value): +        self.cell_aggressivity[cell] = value +         +    def update_cell_split_frequency(self, cell, value): +        self.cell_split_frequency[cell] = value +     +    def update_cell_defensiveness(self, cell, value): +        self.cell_defensiveness[cell] = value +         +    def get_last_steps(self, list, steps = 10): +        return list[-steps:]
\ No newline at end of file  | 
