Repository navigation
v8.0 - Final release
![]() Pagina di start del gioco |
![]() Game |
📌 Descrizione
In questo step NeoSnake compie un ulteriore salto di qualità, evolvendo da semplice gioco arcade a esperienza strutturata a livelli, con una gestione completa di UI, progressione, camera dinamica e qualità del gameplay.
Il focus principale di questa pull request è il consolidamento dell’engine di gioco e l’introduzione di schermate dedicate, mappe multilayer da CSV, spawn intelligente della frutta e sistemi di supporto al giocatore come la freccia direzionale.
L’architettura viene ulteriormente modulata: la logica di gioco, la gestione dei livelli e la UI sono ora ben separate, rendendo il progetto più leggibile, estendibile e manutenibile.
🎮 Gameplay & UX
- Introduzione di un sistema di livelli progressivi basato sul numero di frutti raccolti
- Implementazione della schermata di passaggio al livello successivo
- Miglioramento del game over con restart del livello corrente
- Sistema di pausa con overlay e navigazione da tastiera
- Menu principale con sfondo tile-based e selezione interattiva
- HUD score separato dalla view di gioco
🗺️ Mappe & Rendering
- Nuovo sistema di mappe multilayer da CSV (sfondo, accessori, muri, pattuglie nemici)
- Rendering ottimizzato tramite VertexArray e tileset condiviso
- Correzione del texture bleeding tramite inset e smoothing disabilitato
- Supporto a background animati/strutturati anche per menu e schermate UI
🍎 Logica di spawn avanzata
- Spawn della frutta solo in celle valide
- Verifica che la frutta sia raggiungibile dal serpente tramite A*
- Evitata la generazione in muri, sul corpo del serpente o in aree isolate
- Fallback di sicurezza per prevenire loop infiniti
🧭 Supporto al giocatore
- Introduzione della freccia direzionale animata che indica la posizione della frutta
- La freccia compare solo quando la frutta è fuori dall’area visibile
- Rotazione e posizionamento dinamici rispetto alla camera
🎥 Camera & Movimento
- Camera dinamica che segue il serpente con interpolazione fluida
- Clamping automatico ai bordi della mappa
- Separazione tra view di gioco e view UI
🧠 Engine & Architettura
- Estensione dell’engine per:
- gestione livelli
- reset e restart controllati
- collisioni avanzate (muri, nemici, corpo)
- Migliore organizzazione della logica di update/draw/input
- Riutilizzo del pathfinding anche per controlli di gameplay (non solo nemici)
📂 File principali coinvolti
NeoSnake
│
├── 📂handlers/
│ ├── draw.cpp
│ ├── input.cpp
│ ├── update.cpp
│ ├── snakeFunction.cpp
│ ├── fruitFunction.cpp
│ └── arrowFunction.cpp
│
├── 📂src/
│ ├── engine.cpp
│ ├── levelMap.cpp
│ ├── enemy.cpp
│ ├── pathfinding.cpp
│ ├── main.cpp
│ ├── snake.cpp
│ └── fruit.cpp
│
├── 📂ui/
│ ├── mainMenuScreen.cpp
│ ├── pauseScreen.cpp
│ ├── gameOverScreen.cpp
│ └── nextLevelScreen.cpp
│
├── 📂header/
│ ├── engine.hpp
│ ├── levelMap.hpp
│ ├── enemy.hpp
│ ├── pathfinding.hpp
│ ├── snake.hpp
│ ├── fruit.hpp
│ ├── iscreen.hpp
│ └── resource_path.h.in
│
└── 📂resources/
├── 📂maps/
│ └── levelXX/
│ ├── mapCSV_wall.csv
│ ├── mapCSV_grass.csv
│ ├── mapCSV_grass_accessories.csv
│ └── mapCSV_enemies_patrols.csv
│
├── 📂backgroundMenu/
├── 📂texture/
│ ├── 📂enemies/
│ ├── 📂skin/
│ ├── arrow.png
│ └── fruit.png
│
└── 📂fonts/
└── PressStart2P-Regular.ttf
