Skip to content

v7.0.1 - Enemies (fix)

Choose a tag to compare

@AlbyMiscy AlbyMiscy released this 30 Nov 16:32
· 5 commits to main since this release
315825d

Fix: Nell'algoritmo A* se ci sono più nodi con stesso f, viene preso il nodo con h più basso, in quanto identifica il numero di blocchi che servono per raggiungere la destinazione.

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