From 9dc0b6289fd52987c742fc640045accc3ff65b85 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 25 Aug 2024 22:19:48 +0200 Subject: [PATCH] Added some testsprites Added 2 Player gamemode Some changes to get second player handled --- GameObject.py | 13 +- Utils.py | 2 +- game.py | 4 + sprites/Zeichnung.svg | 56 +++++ sprites/backgorund1.svg | 56 +++++ sprites/just_fun.svg | 411 +++++++++++++++++++++++++++++++++ sprites/spaceship_1.png | Bin 0 -> 1569 bytes sprites/spaceship_1.svg | 406 ++++++++++++++++++++++++++++++++ sprites/spaceship_1_transp.png | Bin 0 -> 1616 bytes test.py | 85 +++---- 10 files changed, 982 insertions(+), 51 deletions(-) create mode 100644 sprites/Zeichnung.svg create mode 100644 sprites/backgorund1.svg create mode 100644 sprites/just_fun.svg create mode 100644 sprites/spaceship_1.png create mode 100644 sprites/spaceship_1.svg create mode 100644 sprites/spaceship_1_transp.png diff --git a/GameObject.py b/GameObject.py index ebd006f..878fdac 100644 --- a/GameObject.py +++ b/GameObject.py @@ -1,5 +1,5 @@ import pygame - +import interface #Statics spawned_enemys = list() @@ -25,7 +25,7 @@ class GameObject(object): def render(self, screen:pygame.Surface): if(self.image is not None): - self.rect = screen.blit(self.image, (self.pos_x, self.pos_y)) + self.rect = screen.blit(self.image, (self.pos_x, self.pos_y, self.width, self.height)) else: self.rect = pygame.draw.rect(screen, (255,0,0), (self.pos_x, self.pos_y, self.width, self.height)) return @@ -47,7 +47,8 @@ class Player(GameObject): self._health = 100 self.lifes = 2 self.kills = 0 - self._healthbar = pygame.rect.Rect((15, self.screen.get_size()[1]-50, 100, 20)) + #self._healthbar = pygame.rect.Rect((15, self.screen.get_size()[1]-50, 100, 20)) + self.healthbar = interface.Healthbar(screen, "Player1", 25, screen.get_size()[1]-80, 300, 10, self.get_health()) def handle_input(self, event:pygame.event.EventType): if(event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT): @@ -90,6 +91,10 @@ class Player(GameObject): if(direction == "right"): self.pos_x += self._speed + def update_interface(self): + self.healthbar.update(self._health) + self.healthbar.render(self.screen) + def fire(self, screen): projectile_width = 6 projectile_height = 10 @@ -110,6 +115,7 @@ class Player(GameObject): def get_health(self): return self._health + class Player2(Player): def __init__(self, name, screen, pos_x, pos_y, width, height, image=None) -> None: @@ -210,6 +216,7 @@ class Weapons(GameObject): self.duration = duration self.sprite = "" self.mountingpos = list() + self.soundfile = "" def fire(self): print(F"Feuere: {self.name}") diff --git a/Utils.py b/Utils.py index c3abcbf..bb9c4fa 100644 --- a/Utils.py +++ b/Utils.py @@ -17,6 +17,6 @@ def load_image(filename, colorkey=None): if colorkey is not None: if colorkey is -1: colorkey = image.get_at((0,0)) - image.set_colorkey(colorkey, pygame.RLEACCEL) + image.set_colorkey(colorkey) return image \ No newline at end of file diff --git a/game.py b/game.py index a468cb2..aa49492 100644 --- a/game.py +++ b/game.py @@ -46,6 +46,10 @@ def item_handler(screen:pygame.Surface): item.move(0, item.speed) item.render(screen) +def handle_playerinput(players): + for player in players(): + pass + def spawn_item_random(screen:pygame.Surface): items_spawned.append(copy.deepcopy(items[0])) diff --git a/sprites/Zeichnung.svg b/sprites/Zeichnung.svg new file mode 100644 index 0000000..21debaf --- /dev/null +++ b/sprites/Zeichnung.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + diff --git a/sprites/backgorund1.svg b/sprites/backgorund1.svg new file mode 100644 index 0000000..86e922f --- /dev/null +++ b/sprites/backgorund1.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + diff --git a/sprites/just_fun.svg b/sprites/just_fun.svg new file mode 100644 index 0000000..2b8ba98 --- /dev/null +++ b/sprites/just_fun.svg @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sprites/spaceship_1.png b/sprites/spaceship_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f84c0e0e1c151ea56e5cf96f0508b593d110b9da GIT binary patch literal 1569 zcmV++2HyFJP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11+Ga% zK~!jg<(pef6ImF?|EJSwp`C_G(Sj=>S>=*tC4%dE1I=dRiy9K5(ddg2s)?6qVtnug zLt+An(L{|g5HInP5FRu>X?$27j0Qy(SvDlAatSWFEYQWaw6vWvoqgD~Fiblw?U`A& z{u3U~H|Kok`_VJ!^34npA&U5dr2DS}&{}#eI~%kN;_0%d;B`FQtQ*JP9RoMRX&C~D zRzq4K0`~m42cgVR#8xy~gbP1k(4zZ@G#k=QrA-o80C=1G7B6fsv$ z%It&?TwHSzVT82^1As=r^=s=vbR_CE-o)cd$rUZa0H6VI%c>T5EndYs?O(TJ#5AII zC;(Ijb{d^{RP-orJ;D$)lsBjuN<^vxpILhbU=pi4kv)M2`47|#2Y`ye4_7?IxNUqv zZSH<^7eOYdQbhkq6<{CZ!<}#MEV!L$5YbT9KtG^4QU$oaq8?#3xuvG>t3LEvdnrdW zE9$_VwoVM#2a;}22ti{-BgKfMq6#b!0q4ul1JRem#Jhe{fr;ARkiS0=r2igl{1-x z>mAp@hzTC96_hlvR*K41`adwlU7;- zi#qw7l-|JP3j>a}!lX4Y08Ft{l5*MuPqLGea@qsC3@%AI?Sb8_TT)K#)k6^wMG+wC zq*MU_0>I479`nMwuw?cXi3q~P?%Qoh0(k4dR_yq=16h0)0KguwLpNt|Jjr{4Yu{Z< z3}As;KDivtFJnI|ZYyX*Yguc|>mI#FQcehX#qsT{leb|)W|f_Nsiq{IAF5EWpvV8+frb}H5p!y*EK0D{3_r$Eg}jl`7DkY+_TZk-TOe${~qFgVwB4gwM2G&tchy6~QRkFLV5m~EE2 zmtvE1lcL{kW7}|*zY5VH-$q(JR^(6TOKcKgCd43Yke@KvaD3o+sZ&;DvEH*@V(Yc` zDgq~}^3ig|i!7KfeqeFLz0Jg6faeQQJ9wb40c0{gsE>!CG43&Bj9etCnGI7%fFD z$e76h7vjK$I8;nlVBO@pm~D=(KZ*(SM5Jt-F`~JnS(Q(GH2aKau_*12hx7F}3Y_2X Tz3i+*00000NkvXXu0mjf=uhB~ literal 0 HcmV?d00001 diff --git a/sprites/spaceship_1.svg b/sprites/spaceship_1.svg new file mode 100644 index 0000000..d6f31e3 --- /dev/null +++ b/sprites/spaceship_1.svg @@ -0,0 +1,406 @@ + + + + diff --git a/sprites/spaceship_1_transp.png b/sprites/spaceship_1_transp.png new file mode 100644 index 0000000000000000000000000000000000000000..605595584ee31b31689f82f8265991096eecff9b GIT binary patch literal 1616 zcmV-W2Cw;vP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11>H$R zK~!jg<(o^097Pz%zpuKxs%IuUu1Pe8fbn7?#7IPt0fn`@XCFjC4-(Lu2ueUn#Dl1p z97Khn2L%m^o3U2p3L)TD61mX^(w3U$&8DWN_HoV+2qAPt+!BW2A=|e9P18eaz=mO{ zx~~7I>w3N(tJP{d0pPK;JOHHlNGpnRT+_6CG{zX4FirFEv^)T$1Uxl0wNKae1MxT_ z0;TjgBBu7ir*b1g$Pa`NY*j`n9k(p&qcnT~qyTJL)=^67_D*#eV=oko#a&5z0Z16w zvaB7MOy-qt^%O-xMNwvx^io%%z>1>G6GD_;>N3W5Tb6Y=Nk0GpnAA+mvaFYLx!ec+ zvvbjIlj3^8rW% zCWMU3$`z5+4-h~iFz5U>S-FywG+;!O^0JDjm7P%LBRwW7SCW!BENzmQ3jhFc*a5wT zqyQU+v564!u#8-B$=(eadbMO2#wNzta<@hPpsLksfB3$?*S76IM!undufhIFDZNXE znRcqxYRkUw?~wsLFmPJ1b$On*>bmZIwr$sj$urRRBW+j!07~gjP1DXBhM^CWr*Ggw zp^#^ct)vNCm#*t~Gsb=&2D-0Dx=<+O$H&K)DW%&6y`cID5mhoZay6y$W*sdtFX_`+0zz)v&5+eTE>Lu3z zY#4^l7`sF%y*@AA*w{Fr>-tXsaE?-%!~$Vpd7gLCb=_UIZC^1>^YvUV_jY}*;`{!_ z+}vE#{J!BktZAAZg#`d0gxpIAS-II@0RSka+Zkgk#bWVT6czwL)3ki6ZQll9##kX< zA)C#etwI1{IEkejp8~liPdqcin8VMo1PUVi{ELJL&BSZM=q@k9kh?t39O94J} z=FEnsX`ghe!#RgqttMR8h5Dc8bxaGK^U(9WgI(%e=-?XwpyB9LPr!)S*%<)%zTdPm ziIrbjTU(pHeEIVJ_4W1VE0xNdj^mu@(q?6Gaq-(ub!^){9t45gru|1VJ$@9E9RaKvg$9>;#IvCRc>^ROd zV`F1q$C6#*oPXEtri!9;>|p@t`jiYRA;e+FaWaUw1rf&)aZCsil*{E0<8>Q=ZQK54 za&qz*A>;`}%!FaM8U(>3z5KjUtyURh?K_!so)~bsTwVo$nO^EP4NLR$^9KQ-LrC+l#*Me;kjMN~PaC&%4;JO&EsK&s|CbK6&!w z#UKbC3WA{N@ehK)J$33-6EFaP@B6Q|io33Rc41-R4O#x`l74)6dV2bPA;fz^h$}*f zH6g?r0L+)m!jRU^MVjO%}99}K>DTMzjF O0000 0): + player.move("left") + #print("links") + if(player.keymap["right"] == True and player.pos_x <= (screen.get_size()[0]-player.width)): + player.move("right") + + player.update_interface() + player.render(screen) + - if(player1.keymap["left"] == True and player1.pos_x > 0): - player1.move("left") - #print("links") - if(player1.keymap["right"] == True and player1.pos_x <= (screen.get_size()[0]-player1.width)): - player1.move("right") - #print("rechts") - if(player2.keymap["left"] == True and player2.pos_x > 0): - player2.move("left") - #print("links") - if(player2.keymap["right"] == True and player2.pos_x <= (screen.get_size()[0]-player2.width)): - player2.move("right") - #print("rechts") game.run(screen) - healthbar1.update(player1.get_health()) - healthbar1.render(screen) + player1.firecontrol(screen) player2.firecontrol(screen) @@ -129,12 +135,7 @@ while(gamestate): #Check if player hits an enemy delete it for enemy in spawned_enemys: enemy:GameObject.Enemy - if(pygame.Rect.colliderect(player1.rect, player2.rect)): - #TODO: Laterrr!! - #print("Collision") - pass if(pygame.Rect.colliderect(projectile.rect, enemy.rect)): - #print("HIT") #Check if only a playerhit despawn enemys if(projectile.name == "Player" or projectile.name == "Player2"): player1.points += 10 @@ -153,25 +154,18 @@ while(gamestate): #TODO Buggy pygame colliderect is true until projectile passed the hole playrect # Life decrease only once! - if(pygame.Rect.colliderect(projectile.rect, player1.rect)): - #print("Game-Over") - player1.get_damage(enemy.get_weapon().damage) - try: - index = GameObject.Projectile.shots.index(projectiles) - del GameObject.Projectile.shots[index] - except: - print("Error on indexing projectile") - #TODO Add Gameover event - if(pygame.Rect.colliderect(projectile.rect, player2.rect)): - #print("Game-Over") - player1.get_damage(enemy.get_weapon().damage) - try: - index = GameObject.Projectile.shots.index(projectiles) - del GameObject.Projectile.shots[index] - except: - print("Error on indexing projectile") - #TODO Add Gameover event - + for player in players: + player:GameObject.Player + if(pygame.Rect.colliderect(projectile.rect, player.rect)): + #print("Game-Over") + player.get_damage(enemy.get_weapon().damage) + try: + index = GameObject.Projectile.shots.index(projectiles) + del GameObject.Projectile.shots[index] + except: + print("Error on indexing projectile") + #TODO Add Gameover event + #Check for bullets out of playground and delete it if((projectile.pos_y > screen.get_size()[1]) or (projectile.pos_y < 0)): #print(F"Lösche: {projectile}") @@ -181,11 +175,8 @@ while(gamestate): milliseconds = pygame.time.get_ticks() seconds = milliseconds / 1000 now = time.time_ns() - - player1.render(screen) - player2.render(screen) - rand = random.randint(0, 100) + for enemy in spawned_enemys: enemy:GameObject.Enemy if rand == 20: