-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathalien_invasion.py
More file actions
123 lines (100 loc) · 3.8 KB
/
alien_invasion.py
File metadata and controls
123 lines (100 loc) · 3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import sys
import pygame
from settings import Settings
from ship import Ship
from character import Character
from bullet import Bullet
from alien import Alien
class AlienInvasion:
"""General class to manage the behaviour and resources of the game"""
def __init__(self):
"""Initializes the game and creates resources"""
pygame.init()
self.clock = pygame.time.Clock()
self.settings = Settings()
self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
pygame.display.set_caption("Alien invasion")
self.ship = Ship(self)
# self.character = Character(self)
self.bg_color = (230,230,230)
self.bullets = pygame.sprite.Group()
self.aliens = pygame.sprite.Group()
self._create_fleet()
def run_game(self):
"""Inicia el bucle principal para el juego"""
while True:
self._check_events()
self._update_screen()
self._update_bullets()
self.clock.tick(60)
def _update_bullets(self):
for bullet in self.bullets.copy():
if bullet.rect.bottom <= 0:
self.bullets.remove(bullet)
print (len(self.bullets))
def _check_events(self):
"""Responds to keystrokes and mice events"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
self._check_keydown_events(event)
elif event.type == pygame.KEYUP:
self._check_keyup_events(event)
def _check_keydown_events(self, event):
"""Respond to key pushes"""
if event.key == pygame.K_RIGHT:
self.ship.rect.x += 20
self.ship.moving_right = True
elif event.key == pygame.K_LEFT:
self.ship.rect.x -= 20
self.ship.moving_left = True
elif event.key == pygame.K_q:
sys.exit()
elif event.key == pygame.K_SPACE:
self._fire_bullet()
def _check_keyup_events(self, event):
if event.key == pygame.K_RIGHT:
self.ship.moving_right = False
elif event.key == pygame.K_LEFT:
self.ship.moving_left = False
def _fire_bullet(self):
"""Creates a new bullet and adds it to the group of bullets"""
if len(self.bullets) < self.settings.bullets_allowed:
new_bullet = Bullet(self)
self.bullets.add(new_bullet)
def _update_screen(self):
self.screen.fill(self.settings.bg_color)
for bullet in self.bullets.sprites():
bullet.draw_bullet()
self.ship.update()
self.bullets.update()
self.ship.blitme()
self.aliens.draw(self.screen)
# self.character.blitme()
pygame.display.flip()
def _create_alien(self, x_position, y_position):
"""Creates an alien and puts it within the row"""
new_alien = Alien(self)
new_alien.x = x_position
new_alien.rect.x = x_position
new_alien.y = y_position
new_alien.rect.y = y_position
self.aliens.add(new_alien)
def _create_fleet(self):
"""Creates fleet of aliens"""
# Creates an alien
alien = Alien(self)
alien_width, alien_height = alien.rect.size
current_x, current_y = alien_width, alien_height
while current_y < (self.settings.screen_height - 3 * alien_height):
while current_x < (self.settings.screen_width - 2 * alien_width):
self._create_alien(current_x, current_y)
current_x += 2 * alien_width
# finished row, next column
current_x = alien_width
current_y += 2 * alien_height
self.aliens.add(alien)
if __name__ == '__main__':
ai = AlienInvasion()
ai.run_game()