Clean up for version 0.2

This commit is contained in:
Nguyễn Gia Phong 2017-11-20 22:29:56 +07:00
parent 242cc15584
commit 2c5cba167e
4 changed files with 37 additions and 40 deletions

View File

@ -128,9 +128,9 @@ class Enemy:
self.spin_speed = self.maze.fps / ENEMY_HP
self.spin_queue = self.wound = 0.0
def pos(self):
def get_pos(self):
"""Return coordinate of the center of the enemy."""
x, y = self.maze.pos(self.x, self.y)
x, y = self.maze.get_pos(self.x, self.y)
step = self.maze.distance * HERO_SPEED / self.maze.fps
return x + self.offsetx*step, y + self.offsety*step
@ -154,20 +154,20 @@ class Enemy:
dx = (self.x-MIDDLE)*distance + self.maze.centerx - self.maze.x
dy = (self.y-MIDDLE)*distance + self.maze.centery - self.maze.y
mind = cosin(abs(atan(dy / dx)) if dx else 0) * distance
def length(x, y): return abs(dy*x - dx*y) / (dy**2 + dx**2)**0.5
def get_distance(x, y): return abs(dy*x - dx*y) / (dy**2 + dx**2)**0.5
for i in range(startx, stopx + 1):
for j in range(starty, stopy + 1):
if self.maze.map[i][j] != WALL: continue
x, y = self.maze.pos(i, j)
if length(x - self.maze.x, y - self.maze.y) <= mind:
x, y = self.maze.get_pos(i, j)
if get_distance(x - self.maze.x, y - self.maze.y) <= mind:
return False
self.awake = True
return True
def fire(self):
"""Return True if the enemy has just fired, False otherwise."""
x, y = self.pos()
if (self.maze.length(x, y) > FIRANGE*self.maze.distance
x, y = self.get_pos()
if (self.maze.get_distance(x, y) > FIRANGE*self.maze.distance
or self.next_strike > pygame.time.get_ticks()
or (self.x, self.y) in AROUND_HERO or self.offsetx or self.offsety
or randrange((self.maze.hero.slashing+self.maze.isfast()+1) * 3)):
@ -204,7 +204,7 @@ class Enemy:
def slash(self):
"""Return the enemy's close-range damage."""
if self.spin_queue:
d = self.maze.slashd - self.maze.length(*self.pos())
d = self.maze.slashd - self.maze.get_distance(*self.get_pos())
wound = d / self.maze.hero.R / self.spin_speed
if wound >= 0:
self.maze.hit(wound, self.color)
@ -214,15 +214,15 @@ class Enemy:
def draw(self):
"""Draw the enemy."""
radious = self.maze.distance/SQRT2 - self.awake*2
square = regpoly(4, radious, self.angle, *self.pos())
square = regpoly(4, radious, self.angle, *self.get_pos())
color = TANGO[self.color][int(self.wound)] if self.awake else FG_COLOR
fill_aapolygon(self.maze.surface, square, color)
def update(self):
"""Update the enemy."""
if self.awake:
self.spin_speed, old_speed = self.maze.fps / ENEMY_HP, self.spin_speed
self.spin_queue *= self.spin_speed / old_speed
self.spin_speed, tmp = self.maze.fps / ENEMY_HP, self.spin_speed
self.spin_queue *= self.spin_speed / tmp
if not self.spin_queue and not self.fire() and not self.move():
self.spin_queue = randsign() * self.spin_speed
if abs(self.spin_queue) > 0.5:

View File

@ -32,7 +32,7 @@ from .utils import round2, sign, regpoly, fill_aapolygon
from .weapons import Bullet
def cell(bit, upper=True):
def new_cell(bit, upper=True):
"""Return a half of a cell of the maze based on the given bit."""
if bit: return deque([WALL]*ROAD_WIDTH + [EMPTY]*ROAD_WIDTH)
if upper: return deque([WALL] * (ROAD_WIDTH<<1))
@ -45,8 +45,8 @@ def new_column():
upper, lower = deque(), deque()
for _ in range(MAZE_SIZE):
b = getrandbits(1)
upper.extend(cell(b))
lower.extend(cell(b, False))
upper.extend(new_cell(b))
lower.extend(new_cell(b, False))
for _ in range(ROAD_WIDTH): column.append(upper.__copy__())
for _ in range(ROAD_WIDTH): column.append(lower.__copy__())
return column
@ -100,25 +100,24 @@ class Maze:
def add_enemy(self):
"""Add enough enemies."""
walls = []
walls, plum = [], None
for i in self.rangex:
for j in self.rangey:
if self.map[i][j] == WALL: walls.append((i, j))
for enemy in self.enemies:
if enemy.color == 'Plum' and enemy.awake: plum = enemy
while walls and len(self.enemies) < log(self.score, INIT_SCORE):
x, y = choice(walls)
if all(self.map[x + a][y + b] == WALL for a, b in ADJACENT_GRIDS):
continue
enemy = new_enemy(self, x, y)
self.enemies.append(enemy)
if enemy.color == 'Plum':
for e in self.enemies:
if e.color == 'Plum' and e.awake: x, y = e.x, e.y
try:
if plum is None or enemy.color != 'Plum':
walls.remove((x, y))
except ValueError:
enemy.x, enemy.y = x, y
else:
enemy.x, enemy.y, enemy.wound = plum.x, plum.y, plum.wound
def pos(self, x, y):
def get_pos(self, x, y):
"""Return coordinate of the center of the grid (x, y)."""
return (self.centerx + (x - MIDDLE)*self.distance,
self.centery + (y - MIDDLE)*self.distance)
@ -129,7 +128,7 @@ class Maze:
for i in self.rangex:
for j in self.rangey:
if self.map[i][j] != WALL: continue
x, y = self.pos(i, j)
x, y = self.get_pos(i, j)
square = regpoly(4, self.distance / SQRT2, pi / 4, x, y)
fill_aapolygon(self.surface, square, FG_COLOR)
@ -180,9 +179,9 @@ class Maze:
for k in range(ROAD_WIDTH):
self.map[c + k][LAST_ROW + j] = grid
def length(self, x, y):
"""Return the length of the line segment joining the center of
the maze and the point (x, y).
def get_distance(self, x, y):
"""Return the distance from the center of the maze to the point
(x, y).
"""
return ((self.x-x)**2 + (self.y-y)**2)**0.5
@ -208,8 +207,8 @@ class Maze:
if not self.hero.spin_queue: return
unit, killist = self.distance/SQRT2 * self.hero.spin_speed, []
for i, enemy in enumerate(self.enemies):
x, y = enemy.pos()
d = self.length(x, y)
x, y = enemy.get_pos()
d = self.get_distance(x, y)
if d <= self.slashd:
enemy.hit((self.slashd-d) / unit)
if enemy.wound >= ENEMY_HP:
@ -239,8 +238,8 @@ class Maze:
fallen.append(i)
continue
for j, enemy in enumerate(self.enemies):
x, y = enemy.pos()
if bullet.length(x, y) < self.distance:
x, y = enemy.get_pos()
if bullet.get_distance(x, y) < self.distance:
enemy.hit(wound)
if enemy.wound >= ENEMY_HP:
self.score += enemy.wound
@ -248,7 +247,7 @@ class Maze:
self.enemies.pop(j)
fallen.append(i)
break
elif bullet.length(self.x, self.y) < self.distance:
elif bullet.get_distance(self.x, self.y) < self.distance:
if not self.hero.spin_queue: self.hit(wound, bullet.color)
fallen.append(i)
for i in reversed(fallen): self.bullets.pop(i)
@ -261,12 +260,12 @@ class Maze:
herox, heroy, dx, dy = self.x - vx, self.y - vy, sign(vx), sign(vy)
for gridx in range(MIDDLE - dx - 1, MIDDLE - dx + 2):
for gridy in range(MIDDLE - dy - 1, MIDDLE - dy + 2):
x, y = self.pos(gridx, gridy)
x, y = self.get_pos(gridx, gridy)
if (max(abs(herox - x), abs(heroy - y)) < d
and self.map[gridx][gridy] == WALL):
return 0.0
for enemy in self.enemies:
x, y = self.pos(enemy.x, enemy.y)
x, y = self.get_pos(enemy.x, enemy.y)
if (max(abs(herox - x), abs(heroy - y)) * 2 < self.distance
and enemy.awake):
return 0.0

View File

@ -59,8 +59,6 @@ class Bullet:
self.x += x
self.y += y
def length(self, x, y):
"""Return the length of the line segment joining the center of
the bullet and the point (x, y).
"""
def get_distance(self, x, y):
"""Return the from the center of the bullet to the point (x, y)."""
return ((self.x-x)**2 + (self.y-y)**2)**0.5

View File

@ -7,7 +7,7 @@ with open('README.rst') as f:
setup(
name='brutalmaze',
version='0.1.3',
version='0.2.0',
description='A hash and slash game with fast-paced action and a minimalist art style',
long_description=long_description,
url='https://github.com/McSinyx/brutalmaze',
@ -15,7 +15,7 @@ setup(
author_email='vn.mcsinyx@gmail.com',
license='GPLv3+',
classifiers=[
'Development Status :: 2 - Pre-Alpha',
'Development Status :: 3 - Alpha',
'Environment :: MacOS X',
'Environment :: Win32 (MS Windows)',
'Environment :: X11 Applications',
@ -25,7 +25,7 @@ setup(
'Operating System :: OS Independent',
'Programming Language :: Python',
'Topic :: Games/Entertainment :: Arcade'],
keywords='pygame action-game',
keywords='pygame action-game arcade-game maze',
packages=['brutalmaze'],
install_requires=['pygame>=1.9'],
package_data={'brutalmaze': ['icon.png']},