From 2b5c75c124a6b014036d1b3086fdb70af329524b Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Sat, 24 Feb 2024 17:53:02 +0300 Subject: [PATCH] pygame 0.2 --- .vscode/settings.json | 4 +++ __pycache__/alien.cpython-311.pyc | Bin 0 -> 1472 bytes __pycache__/settings.cpython-311.pyc | Bin 730 -> 730 bytes __pycache__/ship.cpython-311.pyc | Bin 0 -> 1998 bytes alien.py | 18 ++++++++++++++ image/alien.bmp | Bin 0 -> 11658 bytes image/ship.bmp | Bin 0 -> 11658 bytes main.py | 36 ++++++++++++++++++++++++--- settings.py | 2 +- ship.py | 27 ++++++++++++++++++++ 10 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 __pycache__/alien.cpython-311.pyc create mode 100644 __pycache__/ship.cpython-311.pyc create mode 100644 alien.py create mode 100644 image/alien.bmp create mode 100644 image/ship.bmp create mode 100644 ship.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..dcb1530 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "python.analysis.typeCheckingMode": "basic", + "python.analysis.autoImportCompletions": true +} \ No newline at end of file diff --git a/__pycache__/alien.cpython-311.pyc b/__pycache__/alien.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9df186e034e23ccb579c93525e38b54107219295 GIT binary patch literal 1472 zcmZux&rcIU6rSB~%Thp)w5DOBZj1p}6EMI5j1Y|n6A#3QiLt4fl+S+ucH7w)6JQH}8Az?Rzu*)X?BZ zFq)5kDkC0*e$j<9xQbG~2Fe1Gk<7$V7_sO+lG#^C_N=f7t-`cNn30)5ByoS}av)Yg ztrt^SlrMp@fD{C_D9p-C*h4*qIoSi!D|5j2nzeW1s*)TWQPbHjuqR7omu!$c*)e8C zQV_{H*(7VEK)zM*Eo0J{0<=K#B6&~VkqN7pw2Dqkz5&yM^W-bp6@j>B zyrDE>mV7s+jX9D0fSynf;Ln(AA8%9>(P5<{N*mfflt>Rqyy??pnxZ64eptz1O^Id9 zIvcSUzVz5|G@+PYi)wQ5R8%%O%gz^5k{LylSd-J0_;a%+s$y!Z(+?NLqwDgm$di=z zB62S!tI6TWBPE^E)l4J}fo!i4JCpR7$z!Z0)eOet&F*n)cQ9HqT?UauhZio+Cug|X zx&z_LQvbftxhHfQLU&QF<{#__+V%o% zMnEbCBmipjeztC(5AE@x#lTX_^5c(B z4ZfqucM#{NHG|=RIYqw&g44aRaRhOu@YNLmoYXJk3B zGSX;uEkVnq_khT`&jHs*xV{p{d%H@=6#>?JvxH6y+bQ)Yv0AO;R%@XeP1uTe#NW2_ l?AHXqXle92AW9yFVGdA3&U#8*BLgu`i@y~6cgBVl;XgX0i!uNJ literal 0 HcmV?d00001 diff --git a/__pycache__/settings.cpython-311.pyc b/__pycache__/settings.cpython-311.pyc index eaafae1abff6c3fe8e8e75d864d7f5969ca42a49..b271ee7c7783728b96d81692a7ef948f7b4ab3fc 100644 GIT binary patch delta 29 kcmcb`dW)5JIWI340}yQeax?YKMqW8a#ygvJ7}qfZ0FHkNvj6}9 delta 29 jcmcb`dW)5JIWI340}v!$x{>;9Bd;7I>|Z#y1RCzsKz!I+BtGrQ@Aur~CRyuFlJ7a+U!U*k z_s8jPfq;*|y2D%Q9f6R)km)br+3LOl+XhjH!sSVd@Z=Iv_-~2g+U5z_fuFrnoWd=T zgzya6`D{~e$Ao_-v(D83#MS$Cr{OXiWQAJ- zfxT9U+&_-UxBAz1w0PKt-;N^zUnh#;al~Y)pFFbV9!Li#h1&-79VY_dI36p*-j2n< z_n134k-^uw&(c`m2c(XL>_`jz|&2Z;P2=jBzzy}Lr8ZGO0a9* z7)iQWm*}1Z>IRglVXJrP1KN}TpkaQG?q;1nHgB4@B>IFl84}={x01_2t&qv7vlS?M za6J6H(D_#>sszA0Q9)Ldc{camQYdiSFEv&CL>Y>QzuE!6Usa3FG~7X=?_Z^xTZf- z%cY8Dq|0y(J7${QvwYnWWmzj~hAb}!uwRpX7SmlZfYiv-S0>hrYeIdz9i6&;;V^pc zAbQS>o^M6ZuL&(N@^?78o<0muAB3mr%-d#ot`(jGYhODQS^wlPG;w6 z)A&>?o@~X@!rKy~?bsxOoM}fT21dmQe7g{rWQRM)>HeQU1Km#s-LJ=hb8N41gZ@#t zGvy8vo(pEE@7l1h34P|heY$$_W+h|!Qid_&lumA%p35qK7vvG0ro#$ zs6Y}kj4f^ni+Rn^@qY+QwjP1gNQzNk=%?6b&Y;a%Adq6wUmrgdBL`w+Gj#j4toF=m{D1_e6n09Db+ll{j&UZHIwgY#$;J3Wo21EjTgc=dJM>2 z!cbVzb<8aznBdAKAT{UH7A{iZVn^_~Cp*L;5x0AyLmU$1-EVftQDVnH_yn)xLu!Yb w#1mGSg?}!-Yv28XJ_Ryt#>xjkIxddm+9Xh8pNMM!_Qd2go!R00000 literal 0 HcmV?d00001 diff --git a/alien.py b/alien.py new file mode 100644 index 0000000..a145b19 --- /dev/null +++ b/alien.py @@ -0,0 +1,18 @@ +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/image/alien.bmp b/image/alien.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a87189a702647f987d5c96c2e3aa38f875e44334 GIT binary patch literal 11658 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 literal 0 HcmV?d00001 diff --git a/main.py b/main.py index d755fd3..b2befcb 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,8 @@ import sys import pygame from settings import Settings +from ship import Ship +# from alien import AlienShip class AlienInvasion(): '''Класс всей игры''' @@ -8,19 +10,47 @@ 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): - for event in pygame.event.get(): + 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() - pygame.display.flip() + 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() diff --git a/settings.py b/settings.py index f6ceaba..1030c6c 100644 --- a/settings.py +++ b/settings.py @@ -3,4 +3,4 @@ class Settings(): def __init__(self): self.screen_weight = 1200 self.screen_height = 800 - self.bg_color = (230, 230, 230) \ No newline at end of file + self.bg_color = (220, 220, 220) # RGB \ No newline at end of file diff --git a/ship.py b/ship.py new file mode 100644 index 0000000..cb82a17 --- /dev/null +++ b/ship.py @@ -0,0 +1,27 @@ +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('image/ship.bmp') + self.rect = self.image.get_rect() + # Каждый новый корабль появляется у нижнего края экрана. + self.rect.midbottom = self.screen_rect.midbottom + self.moving_right = False + self.moving_left = False + + def update(self): + '''Обновление позиции корабля игрока''' + while self.moving_right: + self.rect.x += 1 + while self.moving_left: + self.rect.x -= 1 + + def blitme(self): + """Рисует корабль в текущей позиции.""" + self.screen.blit(self.image, self.rect) \ No newline at end of file