From b3e55c70735a7472490c8152d1f30e354a5a5925 Mon Sep 17 00:00:00 2001 From: punix Date: Thu, 25 Jul 2024 21:15:03 +0200 Subject: [PATCH] Space Invaders further --- .idea/.gitignore | 3 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + .idea/spaceinvaders.iml | 10 ++ .idea/vcs.xml | 6 + main.py | 149 ++++++++++++++++++ spr_patrone.png | Bin 0 -> 285 bytes spr_space_enemy.png | Bin 0 -> 1607 bytes spr_space_himmel.png | Bin 0 -> 4852 bytes spr_spaceship.png | Bin 0 -> 1244 bytes 11 files changed, 189 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/spaceinvaders.iml create mode 100644 .idea/vcs.xml create mode 100644 main.py create mode 100644 spr_patrone.png create mode 100644 spr_space_enemy.png create mode 100644 spr_space_himmel.png create mode 100644 spr_spaceship.png diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..be5bc53 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..bdf3413 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/spaceinvaders.iml b/.idea/spaceinvaders.iml new file mode 100644 index 0000000..2c80e12 --- /dev/null +++ b/.idea/spaceinvaders.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..ae26442 --- /dev/null +++ b/main.py @@ -0,0 +1,149 @@ +import pygame +import random +import math + + +class Game: + def __init__(self, width, height): + pygame.init() + self.width = width + self.height = height + self.screen = pygame.display.set_mode((self.width, self.height)) + pygame.display.set_caption("Space Invaders") + self.clock = pygame.time.Clock() + self.background_image = pygame.image.load("spr_space_himmel.png") + self.running = True + self.spaceship = Spaceship(self, 370, 515) + self.enemies = [] + self.score = 0 + for i in range(12): + self.enemies.append(Enemy(self, random.randint(0, 736), random.randint(30, 130))) + + while self.running: + self.clock.tick(60) + self.screen.blit(self.background_image, (0, 0)) + for event in pygame.event.get(): + if event.type == pygame.QUIT: + self.running = False + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_LEFT: + self.spaceship.move(-10) + if event.key == pygame.K_RIGHT: + self.spaceship.move(10) + if event.key == pygame.K_SPACE: + self.spaceship.fire_bullet() + + if event.type == pygame.KEYUP: + if event.key == pygame.K_LEFT: + self.spaceship.move(10) + if event.type == pygame.KEYUP: + if event.key == pygame.K_RIGHT: + self.spaceship.move(-10) + + self.spaceship.update() + if len(self.spaceship.bullets) > 0: + for bullet in self.spaceship.bullets: + if bullet.is_fired == True: + bullet.update() + else: + self.spaceship.bullets.remove(bullet) + + for enemy in self.enemies: + enemy.update() + enemy.check_collision() + if enemy.y > 460: + for i in self.enemies: + i.y = 1000 + self.print_game_over() + break + self.print_score() + pygame.display.update() + + def print_game_over(self): + go_font = pygame.font.Font("freesansbold.ttf", 64) + go_text = go_font.render("GAME OVER", True, (255, 255, 255)) + self.screen.blit(go_text, (200, 250)) + + def print_score(self): + score_font = pygame.font.Font("freesansbold.ttf", 24) + score_text = score_font.render("Punkte: " + str(self.score), True, (255, 255, 255)) + self.screen.blit(score_text, (8, 8)) + + +class Spaceship: + def __init__(self, game, x, y): + self.x = x + self.y = y + self.change_x = 0 + self.game = game + self.spaceship_img = pygame.image.load("spr_spaceship.png") + self.bullets = [] + + def fire_bullet(self): + self.bullets.append(Bullet(self.game, self.x, self.y)) + self.bullets[len(self.bullets) - 1].fire() + + def move(self, speed): + self.change_x += speed + + def update(self): + self.x += self.change_x + if self.x < 0: + self.x = 0 + elif self.x > 736: + self.x = 736 + + self.game.screen.blit(self.spaceship_img, (self.x, self.y)) + + +class Bullet: + def __init__(self, game, x, y): + self.x = x + self.y = y + self.game = game + self.is_fired = False + self.bullet_speed = 10 + self.bullet_img = pygame.image.load("spr_patrone.png") + + def fire(self): + self.is_fired = True + + def update(self): + self.y -= self.bullet_speed + if self.y <= 0: + self.is_fired = False + self.game.screen.blit(self.bullet_img, (self.x, self.y)) + + +class Enemy: + def __init__(self, game, x, y): + self.x = x + self.y = y + self.change_x = 5 + self.change_y = 60 + self.game = game + self.enemy_img = pygame.image.load("spr_space_enemy.png") + + def check_collision(self): + for bullet in self.game.spaceship.bullets: + distance = math.sqrt(math.pow(self.x - bullet.x, 2) + math.pow(self.y - bullet.y, 2)) + if distance < 35: + bullet.is_fired = False + self.game.score += 1 + self.x = random.randint(0, 736) + self.y = random.randint(50, 150) + + def update(self): + self.x += self.change_x + if self.x >= 736: + self.y += self.change_y + self.change_x = -5 + elif self.x <= 0: + self.y += self.change_y + self.change_x = 5 + self.game.screen.blit(self.enemy_img, (self.x, self.y)) + + +if __name__ == '__main__': + game = Game(800, 600) + print(len(game.spaceship.bullets)) diff --git a/spr_patrone.png b/spr_patrone.png new file mode 100644 index 0000000000000000000000000000000000000000..f95b6b1c54ba556a869606676c926cd8e47693b7 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|u6w#ThE&XX zd()8XP=E;Q#nl~bYjxHJ-Skj+=TM-$?yT(1-3;E*8#{aLBO=n7W->RHyx(t_>7(R1 zNd<^_SN@KhA!)JOI_$Q}$+usRoO5D*FnFOLmER?!Ck%J?cP~6{Pj#PI4T-idK=g*=3IO7LnWbMlZ|Ym$a;oM z5ylhC6GRw2*cR|lkgaAZv)WVR#P%arj_2TimJKJ_9sY~f#eDaiboZ&>eAecA@d+R| fc}`m5`IA9qwq)wMy#m=lFEV(#`njxgN@xNAZ~|`4 literal 0 HcmV?d00001 diff --git a/spr_space_enemy.png b/spr_space_enemy.png new file mode 100644 index 0000000000000000000000000000000000000000..ba612fdde8dbb7231ba7b1edb1bc821953b3b9ff GIT binary patch literal 1607 zcmV-N2Dtf&P)Px*0ZBwbRCt{2nomevM;yn$t46CUo4O#@4XvRDl@@7iXjSl{1ah%a3PKM`Z7wYV z8<5bP%pY?~X@wY&p3;aO0@9$-OCji`5JeI#LaQN$+En9qVKs~E2IJ=S;LdaAz4`Oz zxiyx)56HT+^XL2h&2Q$-zPEsfhlhuUhlhuUhsXaBpW<^vv;INBv2K|m<9yp~rr^7Q z&s1#=0$RF7W{mS~w=uUc!4y`O*SiUVZWiq&>$G+AIyX*z{H6KkT6qBg;KIV1vNO65 z@=sY`H}k=xvlpcf6!oQJy3w5_6LYP+05h`>0RWxFA@r>0*rLl5LYs)pFESrm4O)@a ze{}Yu0S6hOqgxsP9?{r}>|>*>uiIuKqacY_YncG-2364Y%lf(<2f>O+cZRI;g@rYQ zibDvcqNspt9)M|nuSDh-Nk&-r2>|YN^8(sik+JBh|tFg-sC2xdTcb_**? znO8=TuUUb#-!v7x*Q5YyyUm$lx0y!+`lOxcs(Z@G1O_1r8i9nH!N zAW^lF$^xlCVm`jIpcKNxA1cR_JMtiqtWoF``s7{)DSX5zjS)}4UtcS2xYpZ`qM9bx z<^dqSvVfwRCfm}mBGRHV4>&vs8Sw;s{#+RG1ov|ykjxY@FCr27lUtr!_zt(csHO?w z-hQTkdOV_$Ak%8a>27ZL>uV98xX%;@TAL9Y97dqE82}I)9A-rG5Sb^4f)Jh@Va6rn z5e+nyR;5430iXv~5gQ!l20&$=zzafnaztzV6iR+HfQAt|+r7}c$ zW>H=R+?uy$fpzwYd4e?vbQb8$K2HZ+UIiSR-(C&_01lPrn`MF4W`rk4n6;}5X;14Q zV~{abq}p=7JOPqBLg`FFX6;aS@+Oc|MhtRqEC z`K$F9GTsa@Wwa6Nj!k&E5w+E|a;P*PFBdl)>ELPRAeK%)NEK#y6r+SY0Q&&w*yY;oJ> zQD=U-J*{PXIc#cmf^-Rx=tZyIV8jDECTT&m_~4~;w$8GT?Ox|s+d7#b5c9O@t;b8Y zK2qQ9o$FxrYdshNr~oh`s9@0WOpC}qR$>MLfN7p*S_B;oMu%9l)-5rvc>u_%dLRDN zC!J`ti43&2Agd(AHAOl1B4eqg6v^B21{gzcpjY%i@K(B5Kha)I_1vz*sXG}|f-rj~Rqf%w?CquD1W{`#907Jsph zKc4-{8{a&t%GxS39R~q`qMZ?F-&vYj zB_UhG!pm>()c^2DyixU@(!3KfrYKSa8wTUP+4< z?cWDjA3!*{_x>;8gXO_ZG7?2%YF4Wg)q@cm$w-uWpAuj|J|pSIfaIx_4sK@7$gMsO z0LUy1nuYtE3AULBKxSV{gZ2^t;7d%+8UT=6eH@vEL0eYr2gyj(9Ggme?FrCc0@Ogh z#MJC-F;Ae(yFN+oHDzDdFG>HazhL$7@bK{P@bEY|`~!niKeG+>*cbo+002ovPDHLk FV1iuc2-E-o literal 0 HcmV?d00001 diff --git a/spr_space_himmel.png b/spr_space_himmel.png new file mode 100644 index 0000000000000000000000000000000000000000..52a0816637b40ed62fa084eec17ba0766c7f743f GIT binary patch literal 4852 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 Ouwtp3bH0;k=l=j3j#5(q literal 0 HcmV?d00001 diff --git a/spr_spaceship.png b/spr_spaceship.png new file mode 100644 index 0000000000000000000000000000000000000000..a6197d1ee24ce55dca811cad42835ea899e89dab GIT binary patch literal 1244 zcmV<21S9*2P)Px(mPtfGRCt{2noVdMM-<0@E>%BhYbeEODF{>Qf=k>S48b}0V7ri8DL5_#6+({n zA*a0=>G{xWq`MMqr}SU8USY}&LoxvHUko{sl9!Hq_QB94A}Z(KMAu&*eTFud){1r z3D?~=b`A`D!DZ)1=%QbVW&Fcqrv2Gqcq0-Jy2x4wIQ#%B5vV!tYa#yl!q(D3_KA%KNrdozj+K|JX#l zeT*^kBuCxRD!>zaM#WXYq=Y0)kL z#;q*Cm0XTX*{s&424iYdr$dyyz~a-Vk+xJK+9jbK0wRM4sMTs*$>p@ROW7=gL!*5D z>rM79PLX==T@L^LNA{OX%K(gwos(@sMvS>txEj)1tJRD?tgNoJO+s7(A`datwkXH; zE=~c+;0K3BDVLVTCzE_W&*0FgCL_i)(`!PzB*a++y}A67@y$nNLlEzOb6R_TxPBM$ zO&7Jp!}YsO$F#!Pi8GpCbNMBRu`sqGAhds14XL=kv;@HZ&%bExFP=T&<^4)XUM*-$ z#m&q66<$1hqO}R#!j_7a)iupG*WHdqLbE9lI=K~wOmG~Bd_E5b=R_bMeDrasZ+v{* zNPrr=4A{R)TLA=pbKUKh(;*u5mk^7S)HiQ$HLPR?p9$ zm-1rF=0-(+N`nyVQ>!(>#7fiEUO)scR`P6LAGgzKO-2xq?mx-y&I9d!U|@jW-d+G2 zjRvmk8sz}g5*UsOAyEs6FGv&-0#T>V#teuPya-$<%+>4O1-}UDPo)6x-+#~U&I4J; zSF2Uh{U>qVBN6~Dcva5V?VZ}%()9Yl_W+bj%W{r4BOxlLU

2HY|a+9va(3zo)+O zYPCvcdR}gN#Jvb!WQ00Cj_+}@!M7>L#;OB?>25GC+PqKuP5`i9KhXMI*VRY>^X||P zJOBZ`M*C_uKo*CZ>57#TYk+IK`L4KnvSexQ&}1$Tq5 z+opn^&`ko6i&n&<`bHq}f041Uu&}VOu&}VOu&}Ur6Y(#^%$kr4(ZP5C0000