diff --git a/AlienInvasion/__pycache__/bullet.cpython-311.pyc b/AlienInvasion/__pycache__/bullet.cpython-311.pyc new file mode 100644 index 0000000..a0958a0 Binary files /dev/null and b/AlienInvasion/__pycache__/bullet.cpython-311.pyc differ diff --git a/AlienInvasion/__pycache__/settings.cpython-311.pyc b/AlienInvasion/__pycache__/settings.cpython-311.pyc new file mode 100644 index 0000000..56a2c23 Binary files /dev/null and b/AlienInvasion/__pycache__/settings.cpython-311.pyc differ diff --git a/AlienInvasion/__pycache__/ship.cpython-311.pyc b/AlienInvasion/__pycache__/ship.cpython-311.pyc new file mode 100644 index 0000000..a0db9d0 Binary files /dev/null and b/AlienInvasion/__pycache__/ship.cpython-311.pyc differ diff --git a/AlienInvasion/alien.py b/AlienInvasion/alien.py new file mode 100644 index 0000000..4b938af --- /dev/null +++ b/AlienInvasion/alien.py @@ -0,0 +1,28 @@ +# import pygame + +# # print('Привет, Дима!') +# class AlienShip(): +# '''Модель и взаимодействие НЛО''' + +# def __init__(self, ai_game): +# """Инициализирует НЛО и задает его начальную позицию.""" +# self.screen = ai_game.screen +# self.screen_rect = ai_game.screen.get_rect() +# # Загружает изображение корабля и получает прямоугольник. +# self.image = pygame.image.load('image/alien.bmp') +# self.rect = self.image.get_rect() +# # Каждый новый корабль появляется у нижнего края экрана. +# self.rect.center = self.screen_rect.center + +# def update(self): +# '''Обновление позиции корабля игрока''' +# while(1): +# if self.rect.right < self.screen_rect.right: +# self.x += self.settings.ship_speed +# if self.rect.left > 0: +# self.x -= self.settings.ship_speed +# self.rect.x = self.x + +# def blitme(self): +# """Рисует корабль в текущей позиции.""" +# self.screen.blit(self.image, self.rect) \ No newline at end of file diff --git a/AlienInvasion/bullet.py b/AlienInvasion/bullet.py new file mode 100644 index 0000000..f25f238 --- /dev/null +++ b/AlienInvasion/bullet.py @@ -0,0 +1,25 @@ +import pygame +from pygame.sprite import Sprite + +class Bullet(Sprite): + '''Класс для снаряда''' + def __init__(self, ai_game): + super().__init__() + self.screen = ai_game.screen + self.settings = ai_game.settings + self.color = self.settings.bullet_color + + # Создание снаряда в позиции (0,0) и назначение правильной позиции. + self.rect = pygame.Rect(0, 0, self.settings.bullet_width, + self.settings.bullet_height) + self.rect.midtop = ai_game.ship.rect.midtop + # Позиция снаряда хранится в вещественном формате. + self.y = float(self.rect.y) + + def update(self): + self.y -= self.settings.bullet_speed + self.rect.y = self.y + + def draw_bullet(self): + pygame.draw.rect(self.screen, self.color, self.rect) + \ No newline at end of file diff --git a/image/alien.bmp b/AlienInvasion/image/alien.bmp similarity index 100% rename from image/alien.bmp rename to AlienInvasion/image/alien.bmp diff --git a/image/ship.bmp b/AlienInvasion/image/ship.bmp similarity index 100% rename from image/ship.bmp rename to AlienInvasion/image/ship.bmp diff --git a/AlienInvasion/main.py b/AlienInvasion/main.py new file mode 100644 index 0000000..903e39b --- /dev/null +++ b/AlienInvasion/main.py @@ -0,0 +1,88 @@ +import sys +import pygame +from settings import Settings +from ship import Ship +# from alien import AlienShip +from bullet import Bullet + +class AlienInvasion(): + '''Класс всей игры''' + + def __init__(self): + pygame.init() + self.settings = Settings() + self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height)) + + # self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) + # self.settings.screen_width = self.screen.get_rect().width + # self.settings.screen_height = self.screen.get_rect().height + + pygame.display.set_caption("Alien Invasion") + self.ship = Ship(self) + # self.alien = AlienShip(self) + self.bullets = pygame.sprite.Group() + + def run_game(self): + '''Запуск игры''' + while(1): + self._check_events() + self.ship.update() + self._update_bullets() + self._update_screen() + + + + def _check_events(self): + 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): + if event.key == pygame.K_RIGHT: + self.ship.moving_right = True + elif event.key == pygame.K_LEFT: + 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): + + if(len(self.bullets) < self.settings.bullet_allowed): + new_bullet = Bullet(self) + self.bullets.add(new_bullet) + + def _update_bullets(self): + self.bullets.update() + for bullet in self.bullets.copy(): + if bullet.rect.bottom <= 0: + self.bullets.remove(bullet) + + def _update_screen(self): + # Установить цвет фона из настроек + self.screen.fill(self.settings.bg_color) + # Обновить положение корабля + self.ship.blitme() + + for bullet in self.bullets.sprites(): + bullet.draw_bullet() + + # self.alien.blitme() + + pygame.display.flip() + +if __name__ == '__main__': + AlInv = AlienInvasion() + AlInv.run_game() + \ No newline at end of file diff --git a/AlienInvasion/settings.py b/AlienInvasion/settings.py new file mode 100644 index 0000000..71f4b95 --- /dev/null +++ b/AlienInvasion/settings.py @@ -0,0 +1,13 @@ +class Settings(): + '''Класс для хранения настроек Alien Invasion''' + def __init__(self): + self.screen_width = 800 + self.screen_height = 800 + self.bg_color = (220, 220, 220) # RGB + self.ship_speed = 0.5 + + self.bullet_speed = 1 + self.bullet_width = 3 + self.bullet_height = 15 + self.bullet_color = (60, 60, 60) + self.bullet_allowed = 3 \ No newline at end of file diff --git a/ship.py b/AlienInvasion/ship.py similarity index 71% rename from ship.py rename to AlienInvasion/ship.py index cb82a17..033e442 100644 --- a/ship.py +++ b/AlienInvasion/ship.py @@ -6,10 +6,12 @@ class Ship(): def __init__(self, ai_game): """Инициализирует корабль и задает его начальную позицию.""" self.screen = ai_game.screen + self.settings = ai_game.settings self.screen_rect = ai_game.screen.get_rect() # Загружает изображение корабля и получает прямоугольник. - self.image = pygame.image.load('image/ship.bmp') + self.image = pygame.image.load('AlienInvasion/image/ship.bmp') self.rect = self.image.get_rect() + self.x = float(self.rect.x) # Каждый новый корабль появляется у нижнего края экрана. self.rect.midbottom = self.screen_rect.midbottom self.moving_right = False @@ -17,10 +19,11 @@ class Ship(): def update(self): '''Обновление позиции корабля игрока''' - while self.moving_right: - self.rect.x += 1 - while self.moving_left: - self.rect.x -= 1 + if self.moving_right and self.rect.right < self.screen_rect.right: + self.x += self.settings.ship_speed + if self.moving_left and self.rect.left > 0: + self.x -= self.settings.ship_speed + self.rect.x = self.x def blitme(self): """Рисует корабль в текущей позиции.""" diff --git a/__pycache__/settings.cpython-311.pyc b/__pycache__/settings.cpython-311.pyc index b271ee7..8fb9d3e 100644 Binary files a/__pycache__/settings.cpython-311.pyc and b/__pycache__/settings.cpython-311.pyc differ diff --git a/__pycache__/ship.cpython-311.pyc b/__pycache__/ship.cpython-311.pyc index ac9e8c6..b899dce 100644 Binary files a/__pycache__/ship.cpython-311.pyc and b/__pycache__/ship.cpython-311.pyc differ diff --git a/alien.py b/alien.py deleted file mode 100644 index a145b19..0000000 --- a/alien.py +++ /dev/null @@ -1,18 +0,0 @@ -import pygame - -class AlienShip(): - '''Модель и взаимодействие НЛО''' - - def __init__(self, ai_game): - """Инициализирует НЛО и задает его начальную позицию.""" - self.screen = ai_game.screen - self.screen_rect = ai_game.screen.get_rect() - # Загружает изображение корабля и получает прямоугольник. - self.image = pygame.image.load('image/alien.bmp') - self.rect = self.image.get_rect() - # Каждый новый корабль появляется у нижнего края экрана. - self.rect.center = self.screen_rect.center - - def blitme(self): - """Рисует корабль в текущей позиции.""" - self.screen.blit(self.image, self.rect) \ No newline at end of file diff --git a/main.py b/main.py deleted file mode 100644 index b2befcb..0000000 --- a/main.py +++ /dev/null @@ -1,58 +0,0 @@ -import sys -import pygame -from settings import Settings -from ship import Ship -# from alien import AlienShip - -class AlienInvasion(): - '''Класс всей игры''' - - def __init__(self): - pygame.init() - self.settings = Settings() - self.screen = pygame.display.set_mode((self.settings.screen_weight, self.settings.screen_height)) - pygame.display.set_caption("Alien Invasion") - self.ship = Ship(self) - # self.alien = AlienShip(self) - - def run_game(self): - '''Запуск игры''' - while(1): - self._check_events() - self.ship.update() - self._update_screen() - - def _check_events(self): - for event in pygame.event.get(): - if event.type == pygame.QUIT: - sys.exit() - else: - self._check_movement(event) - - def _check_movement(self, event): - # Перемещение корабля - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_RIGHT: - self.ship.moving_right = True - elif event.key == pygame.K_LEFT: - self.ship.moving_left = True - elif event.type == pygame.KEYUP: - if event.key == pygame.K_RIGHT: - self.ship.moving_right = False - elif event.key == pygame.K_LEFT: - self.ship.moving_left = False - - def _update_screen(self): - # Установить цвет фона из настроек - self.screen.fill(self.settings.bg_color) - # Обновить положение корабля - self.ship.blitme() - # self.alien.blitme() - - - pygame.display.flip() - -if __name__ == '__main__': - AlInv = AlienInvasion() - AlInv.run_game() - \ No newline at end of file diff --git a/settings.py b/settings.py deleted file mode 100644 index 1030c6c..0000000 --- a/settings.py +++ /dev/null @@ -1,6 +0,0 @@ -class Settings(): - '''Класс для хранения настроек Alien Invasion''' - def __init__(self): - self.screen_weight = 1200 - self.screen_height = 800 - self.bg_color = (220, 220, 220) # RGB \ No newline at end of file