summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gui.py33
-rw-r--r--main.py14
-rw-r--r--stats.py36
3 files changed, 74 insertions, 9 deletions
diff --git a/gui.py b/gui.py
index 0b27187..7040ab0 100644
--- a/gui.py
+++ b/gui.py
@@ -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()
diff --git a/main.py b/main.py
index b8e13ab..a006619 100644
--- a/main.py
+++ b/main.py
@@ -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