Repository navigation
v7.0 - Enemis
π 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