Всем привет! Учусь программированию на питон по книге "Изучаем Python" Эрик Мэтиз 3-е издание. Сейчас на проекте 1, создание игры.
Проблема в том, что корабль не перемещается влево, при нажатии стрелки влево. Вправо, работает. Заранее спасибо, кто откликнется на помощь. Застрял на месте(((
Проблема в том, что корабль не перемещается влево, при нажатии стрелки влево. Вправо, работает. Заранее спасибо, кто откликнется на помощь. Застрял на месте(((
Код:
Модуль alien_invasion.py
import sys
import pygame
from settings import Settings
from ship import Ship
class AlienInvasion:
#Класс для управления ресурсами и поведением корабля
def __init__(self):
pygame.init()
self.settings = Settings()
self.screen = pygame.display.set_mode(
(self.settings.screen_width, self.settings.screen_height))
pygame.display.set_caption("Моя первая игра Alien Invasion")
self.ship = Ship(self)
def run_game(self):
#Запуск основного цикла игры
while True:
self._chek_events()
self.ship.update()
self._update_screen()
def _chek_events(self):
'''обрабатывается нажитие клавиш'''
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
self.ship.moving_right = True
elif event.type == 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.type == pygame.K_LEFT:
self.ship.moving_left = False
def _update_screen(self):
# При каждом проходе цикла перерисовывается экран.
self.screen.fill(self.settings.bg_color)
self.ship.blitme()
# отображение последнего прорисованного экрана
pygame.display.flip()
if __name__ == '__main__':
# создание экземпляра и запуск игры
ai = AlienInvasion()
ai.run_game()
Модуль ship.py
import pygame
class Ship():
'''Класс для управления кораблем'''
def __init__(self, ai_game):
'''инициализируем корабль и задает его начальную позицию'''
self.screen = ai_game.screen
self.screen_rect = ai_game.screen.get_rect()
# загружает изображение корабля и получает прямоугольник
self.image = pygame.image.load('ship.jpg')
self.rect = self.image.get_rect()
# каждый новый корабль появляется у нижнего края
self.rect.midbottom = self.screen_rect.midbottom
# флаг перемещения
self.moving_right = False
self.moving_left = False
def update(self):
'''обновляет позицию корабля с учетом флага.'''
if self.moving_right:
self.rect.x += 1
if self.moving_left:
self.rect.x -= 1
def blitme(self):
'''Рисует корябль в текущей позиции'''
self.screen.blit(self.image, self.rect)
Модуль settings.py
class Settings():
'''класс для хранения всех настроек игры Alien Invasion'''
def __init__(self):
'''инициализирует настройки игры'''
# параметры экрана
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230, 230, 230)
Последнее редактирование: