0
0 комментариев

[apcode language=»python»]

import pygame
from settings import Settings
from ship import Ship
import game_functions as gf
 def run_game():
 # Инициализирует игру и создает объект экрана.
 pygame.init()
 ai_settings = Settings()
 screen = pygame.display.set_mode(
  (ai_settings.screen_width, ai_settings.screen_height))
 pygame.display.set_caption("Alien Invasion")
  # Создание корабля.
 ship = Ship(ai_settings, screen)
  # Запуск основного цикла игры.
 while True:
  gf.check_events(ship)
  gf.update_screen(ai_settings, screen, ship)
  ship.update()
 run_game()

[/apcode]

[apcode language=»python»]

import sys
 import pygame
 def check_keydown_events(event, ship):
 """Реагирует на нажатие клавиш."""
 if event.key == pygame.K_RIGHT:
  ship.moving_right = True
 elif event.key == pygame.K_LEFT:
  ship.moving_left = True
 def check_keyup_events(event, ship):
 """Реагирует на отпускание клавиш."""
 if event.key == pygame.K_RIGHT:
  ship.moving_right = False
 elif event.key == pygame.K_LEFT:
  ship.moving_left = False
 def check_events(ship):
 """Обрабатывает нажатия клавишь и события мыши."""
 for event in pygame.event.get():
  if event.type == pygame.QUIT:
   sys.exit()
  elif event.type == pygame.KEYDOWN:
   check_keydown_events(event, ship)
  elif event.type == pygame.KEYUP:
   check_keyup_events(event, ship)
 def update_screen(ai_settings, screen, ship):
 """Обновляет изображения на экране и отображает новый экран."""
 screen.fill(ai_settings.bg_color)
 ship.blitme()
  # Отображение последнего прорисованного экрана
 pygame.display.flip()

[/apcode]

[apcode language=»python»]

class Settings():
 """Класс для хранения всех настроек игры Alien Invasion"""
  def __init__(self):
  """Инициализирует настройки игры."""
  # Параметры экрана
  self.screen_width = 1200
  self.screen_height = 800
  self.bg_color = (230, 230, 230)
  self.ship_speed_factor = 1

[/apcode]

[apcode language=»python»]

import pygame
 class Ship():
 """"""
  def __init__(self, ai_settings, screen):
  """Инициализирует корабль и задает его начальную позицию."""
  self.screen = screen
  self.ai_settings = ai_settings
   # Загрузка изображения корабля и получение прямоугольника.
  self.image = pygame.image.load('images/ship.bmp')
  self.rect = self.image.get_rect()
  self.screen_rect = screen.get_rect()
   # Каждый новый корабль появляется у нижнего края экрана.
  self.rect.centerx = self.screen_rect.centerx
  self.rect.bottom = self.screen_rect.bottom
   # Сохранение вещественной координаты центра корабля.
  self.center = float(self.rect.centerx)
   # Флаг перемещения 
  self.moving_right = False
  self.moving_left = False
  def update(self):
  """Обновляется атрибут center, не rect"""
  if self.moving_right and self.rect.right < self.screen_rect.right:
   self.center += self.ai_settings.ship_speed_factor
  if self.moving_left and self.rect.left > 0:
   self.center -= self.ai_settings.ship_speed_factor
   # Обновление атрибута rect на основании self.center
   self.rect.centerx = self.center
     def blitme(self):
  """Рисует корабль в текущей позиции."""
  self.screen.blit(self.image, self.rect)

[/apcode]

Есть анимация передвижения картинки влево,но нет вправо,если доезжает до левого края,то вправо вообще не едет,даже без анимации.


Добавить комментарий