From 3b7c57c7dcb704c27aa4a2e8a5535e9a7d2e70a8 Mon Sep 17 00:00:00 2001 From: kojtech Date: Thu, 22 Oct 2026 12:54:21 +0200 Subject: [PATCH] 3 classes heart system bouncer spawns, --- Bouncer.png | Bin 0 -> 506 bytes Chaser.png | Bin 0 -> 549 bytes Dasher.png | Bin 0 -> 499 bytes Heart.png | Bin 0 -> 299 bytes main.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 Bouncer.png create mode 100644 Chaser.png create mode 100644 Dasher.png create mode 100644 Heart.png diff --git a/Bouncer.png b/Bouncer.png new file mode 100644 index 0000000000000000000000000000000000000000..675229833bec0ddfd618b197bda9a40d6eda5bcd GIT binary patch literal 506 zcmVX1^@s6)5{gA00009a7bBm001r{ z001r{0eGc9b^rhYtVu*cR5(wSRk3OUK@gn_7N>2*&NRl-G66wIZ)u8vgfs#53lzEf z65a#U`+!Rzuk*%VtQpJ!xS|(NC zK?cj9z-=l-1=W463{~-kjbNg=%iDoyoq#ptWd3Kc6gx<@DsKl`nG3vT2`qA5{N|rh zMo1i5j?3*+sy!P{WmgwpYV9?&0O0U`#BS=?!l~^2`%O$4Z$=KPSj5njiO*q+reZ1G|{)&IsteJ12UGdCmGHJ3(O+f4Yc2Bgb z$Q*+Z6O1IPVI?ey%8a?hiNj9GxctFznGHMU_zs4LD@d-iO<{84?)(wK$Gp)1fiM;J w|02;%B7C?%3_J-Kqd2d(^T#1|mqTjWFG_^BC{wp^kpKVy07*qoM6N<$g5mw-MF0Q* literal 0 HcmV?d00001 diff --git a/Chaser.png b/Chaser.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc664ef141b63ce8f8a301bcb32ae01bb39c0cc GIT binary patch literal 549 zcmV+=0^0qFP)-*-j zk?|aDLIyYqT4E7G4*Hom9Ev6OG$s4Wj&iH7pSgK^R6h|JV+`2=3L$BFk zzuTf!Up5RBz%Pn#g!LN$#FsDc=2L`_r|!9YrW{yXL#C=7LU0C91Ne7T!y;*P&u9}Y zTIyFJbxuH2nCfW_Ko;3l8ylR14lqrDEflA+GF)$2fKwUYEXAgH9E#E6o8>1VB#`$d n;&BLrAJp0`puZ(_5;UOSFWRCheb;{{)wP4QU%7_W(q_jYD#C zeFggmhe{J+HgOUVx&%^2YtN4l1+!QhW)B pF2vd8omn^Hbkw6^)=|T?{|#C;z7m{STl)Y2002ovPDHLkV1n>^+@$~j literal 0 HcmV?d00001 diff --git a/Heart.png b/Heart.png new file mode 100644 index 0000000000000000000000000000000000000000..510be04d4c6a222b2735cb7b3d751f1cec8a382c GIT binary patch literal 299 zcmV+`0o4A9P)00009a7bBm001r{ z001r{0eGc9b^rhX-AP12R47xGlR*xGFc3wj#09Q(rEW|(1jdti7|-KHB=Ha$76NhM zUKYlhKeUsXDhpoHKw)10v;jvJucj_}CuHgc3%)DT+MLJ?kp|&$B+3p^!ZQe<4+G?q z#6m!&y;O0OO?v~M6JL~wL_PYMEFX$f^d8;n%Iisc;eny4%AZAu$U(wp?eV^E)Yc0l zwDnTvD2^wDO>;Z3V7-0H{bqlO5+~s}!JM;)z8T2gJ0qn1#zgPCf=5%8`qTvdMIe#I xn1+ 150 or abs(self.rect.y - avoid_rect.y) > 150: + break + self.vx = random.choice([-3, -2, 2, 3]) + self.vy = random.choice([-3, -2, 2, 3]) + self.spawn_timer = 60 + + def update(self): + self.rect.x += self.vx + self.rect.y += self.vy + if self.rect.left < 0 or self.rect.right > WIDTH: + self.vx = -self.vx + if self.rect.top < 0 or self.rect.bottom > HEIGHT: + self.vy = -self.vy + + +def enemy_for_level(level): #idk if I'll add the levels + if level == 2: + return ChaserEnemy + if level == 3: + return DasherEnemy + if level == 4: + return DasherEnemy + return random.choice([BouncerEnemy, DasherEnemy, ChaserEnemy]) + + + player_img = pygame.image.load("player.png").convert_alpha() @@ -72,13 +104,34 @@ player_img = pygame.transform.scale(player_img, (40, 60)) player = pygame.Rect(300, 220, 40, 60) speed = 5 +Bouncer_img = pygame.image.load("Bouncer.png").convert_alpha() +Bouncer_img = pygame.transform.scale(Bouncer_img, (30, 45)) + +Chaser_img = pygame.image.load("Chaser.png").convert_alpha() +Chaser_img = pygame.transform.scale(Chaser_img, (30, 45)) + +Dasher_img = pygame.image.load("Dasher.png").convert_alpha() +Dasher_img = pygame.transform.scale(Dasher_img, (30, 45)) + + sugar_img = pygame.image.load("honey.png").convert_alpha() sugar_img = pygame.transform.scale(sugar_img, (50, 50)) score = 0 +Enemies = [] + + +heart_img = pygame.image.load("Heart.png").convert_alpha() +heart_img = pygame.transform.scale(heart_img,(40, 40)) + + def new_sugar(): return pygame.Rect(random.randint(0, WIDTH - 20), random.randint(0, HEIGHT - 20), 50, 50) #20,s sugar = new_sugar() +lives = 3 +hit_timer = 0 + + #game loop @@ -99,6 +152,22 @@ while running: if keys[pygame.K_DOWN] or keys[pygame.K_s]: player.y += speed + for enemy in Enemies: + if enemy.spawn_timer > 0: + enemy.spawn_timer -= 1 + else: + enemy.update() + if hit_timer > 0: + hit_timer -= 1 + else: + for enemy in Enemies: + if enemy.spawn_timer <= 0 and player.colliderect(enemy.rect): + lives -= 1 + hit_timer = 90 + break + if lives <= 0: + running = False + #keep player in player.clamp_ip(screen.get_rect()) @@ -106,13 +175,27 @@ while running: if player.colliderect(sugar): score += 1 sugar = new_sugar() + if score % 10 == 0: + Enemies.append(BouncerEnemy(player)) - screen.fill((255, 228, 240)) #screen + + screen.fill((255, 228, 240)) # screen screen.blit(sugar_img, sugar) #sugar screen.blit(player_img, player) #player + if hit_timer % 10 < 5: + screen.blit(player_img, player) text = font.render(f"score: {score}", True, (90, 30, 60)) screen.blit(text, (10, 10)) - + for enemy in Enemies: + if enemy.spawn_timer % 10 < 5: + screen.blit(Bouncer_img, enemy.rect) + screen.blit(player_img, player) + if hit_timer > 0 and hit_timer % 10 < 5: + red = player_img.copy() + red.fill((255, 40, 40, 0), special_flags=pygame.BLEND_RGBA_ADD) + screen.blit(red, player) + for i in range(lives): + screen.blit(heart_img, (10 + i * 35, 40)) pygame.display.flip() clock.tick(60)