• XSS.stack #1 – первый литературный журнал от юзеров форума

Помогите пожалуйста с кодом....

Apis8912

CD-диск
Пользователь
Регистрация
09.04.2020
Сообщения
18
Реакции
15
Всем привет! Учусь программированию на питон по книге "Изучаем 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)
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Оформи код, потому что для питона (за что я его ненавижу) важны отступы. Питонщиам лень набрать 2 скобки , в итоге без форматирования этот код становится тупо мусором.
 
ты делаешь проверку по event.type для pygame.K_LEFT, а нужно по event.key. Логично сравнить код для право и влево дабы узреть разницу
ты делаешь проверку по event.type для pygame.K_LEFT, а нужно по event.key. Логично сравнить код для право и влево дабы узреть разницу)
Точно, огромное спасибо!!!
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх