Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Replaced the magic numbers for the map and window dimensions with con…

…stant variables.
  • Loading branch information...
commit e1834e155712e02300297b979769ce010d673f4b 1 parent 0d0a7e9
@asweigart authored
Showing with 39 additions and 23 deletions.
  1. +39 −23 square-shooter/square-shooter_makeover.py
View
62 square-shooter/square-shooter_makeover.py
@@ -32,11 +32,26 @@
SILVER = (204, 204, 204)
WHITE = (255, 255, 255)
+WINDOW_WIDTH = 640
+WINDOW_HEIGHT = 480
+
+MAP_WIDTH = 480
+MAP_HEIGHT = 480
+
+MAP_SIZE = max(MAP_WIDTH, MAP_HEIGHT)
+
+MAP_QUARTER_WIDTH = int(MAP_WIDTH / 4.0)
+MAP_HALF_WIDTH = int(MAP_WIDTH / 2.0)
+MAP_THREE_QUARTER_WIDTH = int(3 * MAP_WIDTH / 4.0)
+
+MAP_QUARTER_HEIGHT = int(MAP_HEIGHT / 4.0)
+MAP_HALF_HEIGHT = int(MAP_HEIGHT / 2.0)
+MAP_THREE_QUARTER_HEIGHT = int(3 * MAP_HEIGHT / 4.0)
+
def scale_and_round(x, y):
- x = int(round(x * 480))
- y = int(round(y * 480))
- return x, y
+ return int(round(x * MAP_WIDTH)), int(round(y * MAP_HEIGHT))
+
class Vector2D:
def __init__(self, x, y):
@@ -390,7 +405,7 @@ def render(self):
def render_backround(self):
self.bglayer.fill(BLACK)
- self.bglayer.fill(GREEN, (480, 0, 160, 480))
+ self.bglayer.fill(GREEN, (MAP_WIDTH, 0, 160, MAP_HEIGHT))
msg = ["Level", "Lives", "Score"]
for i in range(3):
@@ -404,26 +419,27 @@ def render_backround(self):
def render_title_screen(self):
text = self.hud_font.render("SQUARE", False, GREEN)
- self.screen.blit(text, text.get_rect(midbottom = (240, 240)))
+ self.screen.blit(text, text.get_rect(midbottom = (MAP_HALF_WIDTH, MAP_HALF_HEIGHT)))
text = self.hud_font.render("SHOOTER", False, GREEN)
- self.screen.blit(text, text.get_rect(midtop = (240, 240)))
+ self.screen.blit(text, text.get_rect(midtop = (MAP_HALF_WIDTH, MAP_HALF_HEIGHT)))
text = self.msg_font.render("FCP", False, GREEN)
- self.screen.blit(text, text.get_rect(midbottom = (240, 120)))
+ self.screen.blit(text, text.get_rect(midbottom = (MAP_HALF_WIDTH, MAP_QUARTER_HEIGHT)))
text = self.msg_font.render("presents", False, GREEN)
- self.screen.blit(text, text.get_rect(midtop = (240, 120)))
+ self.screen.blit(text, text.get_rect(midtop = (MAP_HALF_WIDTH, MAP_QUARTER_HEIGHT)))
high_score = "High score: " + str(self.model.high_score)
text = self.msg_font.render(high_score, False, GREEN)
- self.screen.blit(text, text.get_rect(midbottom = (240, 360)))
+ self.screen.blit(text, text.get_rect(midbottom = (MAP_HALF_WIDTH, MAP_THREE_QUARTER_HEIGHT)))
+
max_level = "Max level: " + str(self.model.max_level)
text = self.msg_font.render(max_level, False, GREEN)
- self.screen.blit(text, text.get_rect(midtop = (240, 360)))
+ self.screen.blit(text, text.get_rect(midtop = (MAP_HALF_WIDTH, MAP_THREE_QUARTER_HEIGHT)))
def render_game_world(self):
m = self.model
- self.screen.set_clip((0, 0, 480, 480))
+ self.screen.set_clip((0, 0, MAP_WIDTH, MAP_HEIGHT))
if m.ship != None: self.render_ship()
if m.bullet != None: self.render_bullet()
@@ -437,7 +453,7 @@ def render_game_world(self):
self.screen,
bubble.color,
scale_and_round(pos.x, pos.y),
- int(round(bubble.radius * 480)),
+ int(round(bubble.radius * MAP_SIZE)),
1)
for explosion in m.explosions:
pos = explosion.position
@@ -445,7 +461,7 @@ def render_game_world(self):
self.screen,
RED,
scale_and_round(pos.x, pos.y),
- int(round(explosion.radius * 480)),
+ int(round(explosion.radius * MAP_SIZE)),
1)
for i in m.powerups:
self.render_powerup(i)
@@ -459,12 +475,12 @@ def render_ship(self):
self.screen,
SILVER,
scale_and_round(pos.x, pos.y),
- int(round(ship.radius * 480)))
+ int(round(ship.radius * MAP_SIZE)))
pygame.draw.circle(
self.screen,
BLACK,
scale_and_round(pos.x, pos.y),
- int(round(ship.radius * 0.5 * 480)),
+ int(round(ship.radius * 0.5 * MAP_SIZE)),
1)
if self.model.ship_shield_timer > 0:
pygame.draw.rect(self.screen, SILVER, bbox, 1)
@@ -476,13 +492,13 @@ def render_bullet(self):
self.screen,
RED,
scale_and_round(pos.x, pos.y),
- int(round(bullet.radius * 480)))
+ int(round(bullet.radius * MAP_SIZE)))
if self.model.bullet_shield_timer > 0:
pygame.draw.rect(self.screen, RED, bbox, 1)
def render_powerup(self, powerup):
pos = powerup.position
- radius = powerup.radius * 480
+ radius = powerup.radius * MAP_SIZE
if powerup.kind == "shield":
bbox = pygame.draw.circle(
self.screen,
@@ -499,11 +515,11 @@ def render_powerup(self, powerup):
int(round(radius * 0.3)),
1)
bbox = pygame.Rect(0, 0, radius * 2, radius * 2)
- bbox.center = (pos.x * 480, pos.y * 480)
+ bbox.center = (pos.x * MAP_WIDTH, pos.y * MAP_HEIGHT)
pygame.draw.rect(self.screen, WHITE, bbox, 1)
elif powerup.kind == "freeze":
bbox = pygame.Rect(0, 0, radius * 2, radius * 2)
- bbox.center = (pos.x * 480, pos.y * 480)
+ bbox.center = (pos.x * MAP_WIDTH, pos.y * MAP_HEIGHT)
pygame.draw.rect(self.screen, WHITE, bbox, 1)
bbox.inflate_ip(-radius, -radius)
pygame.draw.rect(self.screen, WHITE, bbox, 1)
@@ -516,11 +532,11 @@ def render_pause_text(self):
pause_text = self.msg_font.render("Game paused", False, GREEN)
self.screen.blit(
pause_text,
- pause_text.get_rect(midbottom = (240, 480)))
+ pause_text.get_rect(midbottom = (MAP_HALF_WIDTH, MAP_HEIGHT)))
pygame.init()
-screen = pygame.display.set_mode((640, 480))
+screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
clock = pygame.time.Clock()
model = GameWorld()
renderer = GameScreen(model, screen)
@@ -554,8 +570,8 @@ def render_pause_text(self):
elif ev.type == pygame.MOUSEBUTTONDOWN:
if model.level > 0 and not renderer.game_paused:
x, y = ev.pos
- model.shoot_at(x / 480.0, y / 480.0)
- model.thrust_at(x / 480.0, y / 480.0)
+ model.shoot_at(x / float(MAP_WIDTH), y / float(MAP_HEIGHT))
+ model.thrust_at(x / float(MAP_WIDTH), y / float(MAP_HEIGHT))
elif ev.type == pygame.MOUSEBUTTONUP:
if model.level > 0:
model.stop_thrust()
Please sign in to comment.
Something went wrong with that request. Please try again.