background image

 

 

66 

 

Έπειτα γίνεται έλεγχος για συγκρούσεις μεταξύ του παίκτη και των ενεργών εχθρών. 

Αν ο παίκτης πατήσει SPACE, ο εχθρός θεωρείται ηττημένος, επανεμφανίζεται enemy.respawn 

σε  νέα  θέση  που  δεν  συγκρούεται  με  εμπόδια  και  αρχίζει  να  κινείται  τυχαία 

enemy.random_move().  Αν  δεν  πατηθεί  το  SPACE,  τότε  ο  παίκτης  δέχεται  φθορά  από  τον 

εχθρό. Το χρονόμετρο του εχθρού αυξάνεται με βάση τον χρόνο που έχει περάσει ανά καρέ και 

για κάθε 1 δευτερόλεπτο, μειώνεται η ζωή του παίκτη. 

 

#check if player collides with enemy 

for enemy in enemies: 

         if not enemy.active: 
            continue    

         enemy_rect = pygame.Rect(enemy.pos.x, enemy.pos.y,  
tile_size * 2, tile_size * 2) 
         if new_player_rect.colliderect(enemy_rect): 
            keys = pygame.key.get_pressed() 

            if keys[pygame.K_SPACE]: 
               print("Enemy defeated!") 
               # Deactivate the enemy if the player attacks 

               enemy.respawn(map_size,obstacles) 
               enemy.random_move(frame_time, screen_width, 
 screen_height,obstacles) 
             else: 

             #handle damage when colliding with enemy with a timer 
                enemy.collision_timer += frame_time 
                if enemy.collision_timer >= 1: 
                   hearts_amount -= 1 

                   enemy.collision_timer = 0 
                   print("Attacked by enemy!") 

 

Αν το χρονόμετρο collision_timer είναι μεγαλύτερο ή ίσο με 1, τότε υπολογίζεται ένα 

διάνυσμα  direction_vector  από  τον  παίκτη  προς  τον  εχθρό  και  αν  το  διάνυσμα  έχει  μήκος 

μεγαλύτερο  από  μηδέν,  κανονικοποιείται  και  ο  εχθρός  απωθείται  μακριά  από  τον  παίκτη. 

Παράλληλα διασφαλίζεται ότι ο εχθρός παραμένει εντός των ορίων του χάρτη, αποτρέποντας 

την έξοδο από την περιοχή του παιχνιδιού, με τη χρήση των συναρτήσεων max() και min(), οι 

οποίες χρησιμοποιούνται για να περιοριστούν οι συντεταγμένες x και y του εχθρού. 

 

#push the enemy away 

if enemy.collision_timer >= 1: 
  direction_vector=pygame.Vector2(enemy.pos.x- player_pos.x, enemy.pos.y - player_pos.y) 

   if direction_vector.length() > 0: 
      direction_vector = direction_vector.normalize() 
      enemy.pos.x += direction_vector.x * tile_size * 10 
      enemy.pos.y += direction_vector.y * tile_size * 10 

 #make sure the enemy stays within map boundaries 
 enemy.pos.x=max(0,min(enemy.pos.x,(map_size- 1)* tile_size)) 
 enemy.pos.y=max(0,min(enemy.pos.y,(map_size-1) * tile_size))