diff options
author | Raphael McSinyx <vn.mcsinyx@gmail.com> | 2017-10-17 21:29:03 +0700 |
---|---|---|
committer | Raphael McSinyx <vn.mcsinyx@gmail.com> | 2017-10-17 21:29:03 +0700 |
commit | e879dcf58dc03ae6730d925675ae6ee6f9733e71 (patch) | |
tree | 31afa82e88667f7db220b2cf3854e07c3d08bb89 | |
parent | 22bb77f9184b813bf0841a0939546d5eeb0c58e3 (diff) | |
download | brutalmaze-e879dcf58dc03ae6730d925675ae6ee6f9733e71.tar.gz |
Optimize maze regeneration and show score
-rw-r--r-- | brutalmaze/characters.py | 3 | ||||
-rw-r--r-- | brutalmaze/constants.py | 3 | ||||
-rw-r--r-- | brutalmaze/main.py | 1 | ||||
-rw-r--r-- | brutalmaze/maze.py | 39 |
4 files changed, 29 insertions, 17 deletions
diff --git a/brutalmaze/characters.py b/brutalmaze/characters.py index 0ef5d17..8dc3209 100644 --- a/brutalmaze/characters.py +++ b/brutalmaze/characters.py @@ -136,7 +136,8 @@ class Enemy: def draw(self, distance, middlex, middley, color): """Draw the enemy, given distance between grids and the middle grid.""" - square = regpoly(4, distance / SQRT2, self.angle, + radious = distance/SQRT2 - (self.awake and 2) + square = regpoly(4, radious, self.angle, *self.pos(distance, middlex, middley)) fill_aapolygon(self.surface, square, color) diff --git a/brutalmaze/constants.py b/brutalmaze/constants.py index 367bcb0..427226e 100644 --- a/brutalmaze/constants.py +++ b/brutalmaze/constants.py @@ -32,7 +32,8 @@ FPS = 30 SIZE = 400, 400 MAZE_SIZE = 10 ROAD_WIDTH = 5 -MIDDLE = (MAZE_SIZE + (MAZE_SIZE&1) - 1)*ROAD_WIDTH + (ROAD_WIDTH >> 1) +CELL_WIDTH = ROAD_WIDTH * 2 +MIDDLE = (MAZE_SIZE + MAZE_SIZE%2 - 1)*ROAD_WIDTH + ROAD_WIDTH//2 LAST_ROW = (MAZE_SIZE-1) * ROAD_WIDTH * 2 INIT_SCORE = 208.2016 MOVE_SPEED = 5 # step/grid diff --git a/brutalmaze/main.py b/brutalmaze/main.py index c41d444..40b4116 100644 --- a/brutalmaze/main.py +++ b/brutalmaze/main.py @@ -26,7 +26,6 @@ from .maze import Maze def main(): """Start game and main loop.""" pygame.init() - pygame.display.set_caption('Brutal Maze') pygame.display.set_icon(ICON) pygame.fastevent.init() maze, going, clock = Maze(SIZE), True, pygame.time.Clock() diff --git a/brutalmaze/maze.py b/brutalmaze/maze.py index 1eb1784..4b2abdb 100644 --- a/brutalmaze/maze.py +++ b/brutalmaze/maze.py @@ -132,23 +132,13 @@ class Maze: if x: self.offsetx = 0 self.map.rotate(x) - self.rotatex = (self.rotatex+x) % (ROAD_WIDTH*2) + self.rotatex += x if y: self.offsety = 0 for d in self.map: d.rotate(y) - self.rotatey = (self.rotatey+y) % (ROAD_WIDTH*2) - if not self.rotatex and not self.rotatey: - for _ in range(ROAD_WIDTH * 2): self.map.pop() - self.map.extend(new_column()) - for i in range(MAZE_SIZE): - b = getrandbits(1) - for j, grid in enumerate(cell(b)): - for k in range(ROAD_WIDTH): - self.map[i*2*ROAD_WIDTH+k][LAST_ROW + j] = grid - for j, grid in enumerate(cell(b, False)): - for k in range(ROAD_WIDTH): - self.map[(i*2+1)*ROAD_WIDTH+k][LAST_ROW + j] = grid + self.rotatey += y + # Respawn the enemies that fall off the display killist = [] for i, enemy in enumerate(self.enemies): enemy.place(x, y) @@ -158,6 +148,25 @@ class Maze: for i in reversed(killist): self.enemies.pop(i) self.add_enemy() + # Regenerate the maze + if abs(self.rotatex) == CELL_WIDTH: + self.rotatex = 0 + for _ in range(CELL_WIDTH): self.map.pop() + self.map.extend(new_column()) + for i in range(-CELL_WIDTH, 0): + self.map[i].rotate(self.rotatey) + if abs(self.rotatey) == CELL_WIDTH: + self.rotatey = 0 + for i in range(MAZE_SIZE): + b, c = getrandbits(1), (i-1)*CELL_WIDTH + self.rotatex + for j, grid in enumerate(cell(b)): + for k in range(ROAD_WIDTH): + self.map[c + k][LAST_ROW + j] = grid + c += ROAD_WIDTH + for j, grid in enumerate(cell(b, False)): + for k in range(ROAD_WIDTH): + self.map[c + k][LAST_ROW + j] = grid + def slash(self): """Slash the enemies.""" unit, killist = self.distance/SQRT2 * self.hero.speed, [] @@ -218,7 +227,9 @@ class Maze: if d <= self.slashd: self.hero.wound += (self.slashd-d) / self.hero.R / enemy.speed pygame.display.flip() - if self.hero.wound + 1 >= len(self.hero.color): self.lose() + pygame.display.set_caption('Brutal Maze - Score: {}'.format( + int(self.score - INIT_SCORE))) + if self.hero.wound + 1 > len(self.hero.color): self.lose() def resize(self, w, h): """Resize the maze.""" |