From eba46468250ac1f5e194d2e26b0531de0b3467db Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Mon, 26 Feb 2024 15:15:11 +0300 Subject: [PATCH] pygame 0.5 --- .../__pycache__/bullet.cpython-311.pyc | Bin 0 -> 1912 bytes .../__pycache__/settings.cpython-311.pyc | Bin 0 -> 997 bytes .../__pycache__/ship.cpython-311.pyc | Bin 0 -> 2311 bytes AlienInvasion/alien.py | 28 ++++++ AlienInvasion/bullet.py | 25 +++++ {image => AlienInvasion/image}/alien.bmp | Bin {image => AlienInvasion/image}/ship.bmp | Bin AlienInvasion/main.py | 88 ++++++++++++++++++ AlienInvasion/settings.py | 13 +++ ship.py => AlienInvasion/ship.py | 13 ++- __pycache__/settings.cpython-311.pyc | Bin 730 -> 772 bytes __pycache__/ship.cpython-311.pyc | Bin 1998 -> 2283 bytes alien.py | 18 ---- main.py | 58 ------------ settings.py | 6 -- 15 files changed, 162 insertions(+), 87 deletions(-) create mode 100644 AlienInvasion/__pycache__/bullet.cpython-311.pyc create mode 100644 AlienInvasion/__pycache__/settings.cpython-311.pyc create mode 100644 AlienInvasion/__pycache__/ship.cpython-311.pyc create mode 100644 AlienInvasion/alien.py create mode 100644 AlienInvasion/bullet.py rename {image => AlienInvasion/image}/alien.bmp (100%) rename {image => AlienInvasion/image}/ship.bmp (100%) create mode 100644 AlienInvasion/main.py create mode 100644 AlienInvasion/settings.py rename ship.py => AlienInvasion/ship.py (71%) delete mode 100644 alien.py delete mode 100644 main.py delete mode 100644 settings.py diff --git a/AlienInvasion/__pycache__/bullet.cpython-311.pyc b/AlienInvasion/__pycache__/bullet.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0958a0af8054867cc970a135babe6cdd854307e GIT binary patch literal 1912 zcmaJC&x;#X_`S(wGP~Jn+1jjWVr^)b(k$zW2#UIuss|Ba4_&bkB9E9i*_}A~;hTx= zu6xKr!4v}RA+jPp^e;3mQSn ziLC`(LdvlK=akbuGIdrBBs1K(fO`nGkEiW>#YQQ391pb0A-B8`@W5WkWg*v22Xe45 zrBOZ=@DCwh$6?MOqENyK6iwO?n4IisH)=KNx^Pv-jH+QX<|Xzj$ zeD2kk6>DZqxKV#o>N{J7itftS^`afB+%&ko?P}u#+q$u}ZM(8S71`Q0>aJ1&jauD} zmdskgcIi$w0utRUxv_%5Jd1OT70rTWF=k<*GMVPHxA@!n8#VDo{(~9^m-5&3dd)KI zd|kJh???VU)6lCQRlh1&My;Cn9ayXH2&~NRX}?3)f*`T+tUCbyX_8-6?M|#6`&mu? zq$c}n%2882H8of|->J6bc6^Y$;3TgArVSG3I-fa-R{@{@TOo;b=i@HzzSiXrD$eC= zgUs>+&B?s;BtjEcpArC|H}_lm;{A0ez3QZ2N77M~e=IKDvpYMTultLaoW)DPRa)?j zz!_2u3kC$nj_)WB-~h^eiec33OV@ZrLUMn)@ zHMY2b{#^v%YU8OX>ZZw9mWm{Lffc*vRZL)NJ%E|9u&JQ=gJ&SG^yHPH6pt(eL5efk`cck90-0h*lv literal 0 HcmV?d00001 diff --git a/AlienInvasion/__pycache__/settings.cpython-311.pyc b/AlienInvasion/__pycache__/settings.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56a2c2304ac4ef039463d35f094f5f611ccacd38 GIT binary patch literal 997 zcmZuv&1(};5P$oTW*ZVqL8YdNt|#3~uYwjuJ%~_pum>S5Jkq>pvbfz{_iZc{kyIk| zAb1S;2PopD2L-XzzhMI&mZgV+r`#g()RQy&b+FFvo0;Ftyx+{*w;yY@3IVzL>X;u% zg#1E~i<&ue9h@7Rw+6P&gMUy)kmWLh zyfh^_mnA#4?e1`9NUxtZKf zemSPdE_=<}jWtRw#|kKYv7G+{Yk3IIFIu36Bx+pQSAS}kqNa|v9<5y4SKrp6dK1jj zNdpXKbK6X+>rvx+8o!+2)lkEC4veH_l(4r0(@`2%DBX71z(&7H>9aw{&N5|6ncJn* zzW|#)5&t3>|2!(3E>ZXugaK+;JdwH)sv9%8QqpJStV&sspk+uY(JHbP2(q)*{4Un~mbne^ zxq0Z9NK9j)S^N3U(B|6KJ6w#wy|Rp-4Y>Rxe%TJlv%6&NazUMDD-z?%9=LhXwP{l! zMtQM3$_mi*ww<)E=r$yA2jI_;!bM2ymT|o$k;aNhw?){lLh7r|_7;6WcSSHzHNHl5 zV}(94ZWuR3`k3z8mcXuYGdbV=ZZ4w~#tK){TBcYS%H-2C%8&+Sm7L6%M#mFj%dbtT zic+uyP0{sCVMeor8AX>=WlFb#&YnZ~OLH^nykhxmBNm@4re%w_<$TjX=oWX)3gk2L zWKq|Pc`KAJUIlxSnwhx*rVgl_GOZ^(7OyF}X{#-rkGp z{$6CT78x`m2{V!aX5jaZ&RcqAuJW1D(QkJ21Iz!U_mtV2G<(nCzA41(-F;~HL_IFr z_Nfqq-##3QOtB&dg0&|BF0>~(Y)^FrC?=a_h2K(^j5~{_iQ2V5u5np+f}uUuMp@Q) z^IJ&*|aiBOaQ)v0ELULH0nCc*}3YCFl?I9#r}6;gq9W zEj5mv(KPgM25!>_FavjiT~#qA1 zJl5%5PJIao4bLd5QRMr}B{{7t^Fh1J93p};8UQG=;4w4U-5^|GXf3jSV*O-w#5{Y^ zJUdqF8>4+=_0aL<(Us9#awTteCXG-MsXFS!9UXo>u>L}|qb3eharoKNon4h_tgMyb zGCV3ox3!EgxL8X29{^}Aqcs+6*kTKk%u1)Zpjtm|9DMp9EuQjQph(wXx-9+Athz56 z*Wruw5a!W0@c!jL`AUu_copl<;wN(%UByXhr$+4ttR>dCpLb*J5Vp)|5QJC@p_SmC z5UUBX+mSn6YagwDVhBT~Fht#-9h~t*8;*wpj2TI?+9fGpl*>89Lz47qIh{M$X_F+m zI3-DHCmyH=fe7F(v8~wIS24CWzyNEP04%bn&R?MXg$5t;^)(0s-F{zBgD`O1<9n?^ zjsnLAnooFC{E|4XUO@~qY`cFdyy=|%ygC3pOs4h@fQFajxH<_h+E0UzbKv7B_#1iu JJY&Q5@GmM-RlooM literal 0 HcmV?d00001 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 b271ee7c7783728b96d81692a7ef948f7b4ab3fc..8fb9d3e8ae84a092fca75a1dbe6d086505529dfc 100644 GIT binary patch delta 289 zcmcb`+QP=SoR^o20SI)ZZl!WFPUO4EXgBeNfiO!ALp(D`90XDrf*CYfC(AO*aHm5= z9@uNLOtxm!;JL+BoRL`&UtExynld?=F`J}@&fGJarUV+0zDNqhu}eL<4og{c9X3;;IfJk$UH delta 246 zcmZo+yT!`4oR^o20SLB!xtaQgVItp6MuUkj3|JY088lfYYct9)X);d^V$_)2#u%?C z3sl#@a6?wHgXIc`)D2k$2rZ%B!P3Lq0fduznap^(fvQ$A6!8G5BCg2+Od9pftQsE} zFbRkfW}rGhO~xV+T_gx1AUc7pUmP~M`6;D2sdhy|KrSN?7n=i#56p~=j31a-8G*)P R5+6ZgUyvktVQRo80|3zAG~oaM diff --git a/__pycache__/ship.cpython-311.pyc b/__pycache__/ship.cpython-311.pyc index ac9e8c664d3b1bc4329a27d87ea30a9e8a377a82..b899dce79eb831d11398a6bd1e1a2e1e5b887aa1 100644 GIT binary patch delta 1088 zcma)4&ubb%6rNe#jmBTuny4{K6iJ&DYD=`YQYe9d6iT7zA|bmbZq(S>O-ZfAo*JPZ zA|v$b!M226{1f^Ylq4)v77D%e)I%-g)KllJ-PK?Y-Gz_$zIi{sH*dZKev1B&KHn^2 z-{YtuKjYi}AGp@ONTe`u@YPX%Y-43aGVF468LuQA7NNN;3n7KK?5;p%d?Rf8^~p1{ zLSx2?)kMpJu8PeoZj1lGlzbYiL3#Ux#oJ00a~{Z0*lU0_{5*oo<`xUgG;m6?4Ef{qIGnL73V~( zeYc8Wu{9q;+gyG!YJAP)=B2jw+9bSZCj4iM@KlS*cJ^472#n|(=fehpc^<8~3GA9M znaJQtac5T}uu2jDfW;fL>Ta=`SF5rtk!wIWOL9Rw!6e8W70M^b0`S5?Roc?zn&$~i zNROO(h*24^HF*NMCpJXbeY-o~lNWo-{j8qZ&@;L7WbQPX8+hlMo2|`bsZ-WN=`(K{ zya6OFjgp)_chBD!&lBsXiS?_aL(xuw?b+S(G}%wW^oai)f(K>}NMfMopJMt{h~OA~ zF5JRl+7q(j5QN165)4idVfTv20{tbd7QB3Nh-`=ne0+#(nB(|6Lo^Me0To+IjZdMjMOg~T*t|A^Tn!;4W5YGWq z1Lko~PG#!m`G!J5M%cajc&P z6raujG#+LOLy-)S#|YzAFe03j!dS)2z>v%o4|gE4z6~IK%rJdLa(GM;hnpe>R*$T4 zgG>rj@Z?ffZ_Sq=NBC*76!8J+A|4=di?O1JA4socED``x#UKR=MM9JL*d*$OKms6N z0DZ|PbcIj;0|O(c>% zosu9z21u-A02>YT84rg>8W*eL2L?DH!OAN8fdNkNF|itaV8A3G27uC