Repository navigation
v7.0.1 - Enemies (fix)
Fix: Nell'algoritmo A* se ci sono più nodi con stesso
f, viene preso il nodo conhpiù basso, in quanto identifica il numero di blocchi che servono per raggiungere la destinazione.
📌 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