Skip to content

v7.0 - Enemis

Choose a tag to compare

@AlbyMiscy AlbyMiscy released this 30 Nov 15:53
· 7 commits to main since this release
5e5836d
ste07

πŸ“Œ Descrizione

In questo step ho introdotto una delle funzionalitΓ  piΓΉ importanti di NeoSnake:
un sistema completo di nemici intelligenti, in grado di muoversi all’interno della mappa seguendo percorsi calcolati tramite algoritmo A*.

Questa feature rende il gameplay piΓΉ dinamico e strategico, trasformando NeoSnake in un gioco piΓΉ ricco e interattivo.
L’intera logica Γ¨ integrata nel caricamento del livello: quando viene avviata una nuova partita, l’engine analizza la PNG del livello, identifica i punti di pattuglia (pixel gialli e verdi), costruisce la mappa e calcola una sola volta il path per ogni nemico, garantendo performance ottimali durante il gameplay.

I nemici si muovono in modo fluido, seguendo tile predefinite (waypoint) generate dall’A*, e invertendo la direzione quando raggiungono il punto finale. In caso di collisione con la testa del serpente, il gioco termina immediatamente.

Il lavoro comprende:

  • implementazione completa della classe Enemy (animazione, movimento, collisioni)
  • introduzione del modulo di pathfinding (GridProvider + A*)
  • estensione dell’engine per gestire nemici, blocchi mappa e caricamento dei path
  • parsing della PNG del livello con supporto a pixel speciali per definire i punti A/B
  • integrazione nel ciclo di gioco (update, draw e check collisioni)
 NeoSnake
  β”‚
  β”œβ”€β”€ πŸ“‚handlers/
  β”‚   β”œβ”€β”€ draw.cpp
  β”‚   β”œβ”€β”€ fruitFunction.cpp
  β”‚   β”œβ”€β”€ input.cpp
  β”‚   β”œβ”€β”€ snakeFunction.cpp
  β”‚   β”œβ”€β”€ arrowFunction.cpp
  β”‚   └── update.cpp 
  β”‚
  β”œβ”€β”€ πŸ“‚header/
+ β”‚   β”œβ”€β”€ enemy.hpp
+ β”‚   β”œβ”€β”€ pathfinding.hpp
  β”‚   β”œβ”€β”€ engine.hpp 
  β”‚   β”œβ”€β”€ fruit.hpp
  β”‚   β”œβ”€β”€ snake.hpp
  β”‚   β”œβ”€β”€ resource_path.h.in
  β”‚   └── map.hpp
  β”‚
  β”œβ”€β”€ πŸ“‚src/
+ β”‚   β”œβ”€β”€ enemy.cpp
+ β”‚   β”œβ”€β”€ pathfinding.cpp
  β”‚   β”œβ”€β”€ engine.cpp  
  β”‚   β”œβ”€β”€ fruit.cpp
  β”‚   β”œβ”€β”€ main.cpp
  β”‚   β”œβ”€β”€ snake.cpp
  β”‚   └── map.cpp
  β”‚
  └── πŸ“‚resources/
      β”œβ”€β”€ πŸ“‚levels/
      β”‚   └── Level01.png 
      β”‚
      └── πŸ“‚texture/
+          β”œβ”€β”€ πŸ“‚enemies/
+          β”‚   β”œβ”€β”€ enemy1.png
+          β”‚   └── enemy2.png
           β”œβ”€β”€ πŸ“‚skin/
           β”‚   └── snake_skin_1-1.png
           β”œβ”€β”€ arrow.png 
           β”œβ”€β”€ snake.png 
           └── wall.png

πŸ”— Link utili