Repository navigation
v4.0 - Gestione di una texture per il serpente e per la frutta
In questo aggiornamento di NeoSnake Γ¨ stato introdotto un sistema di skin dinamiche sia per il serpente che per il frutto.
Lo scopo Γ¨ migliorare lβimpatto visivo del gioco rendendo gli elementi piΓΉ riconoscibili, vari e piacevoli per lβutente.
Di seguito sono elencate tutte le modifiche apportate ai file del progetto, con una breve spiegazione del loro ruolo.
π¨ skin del serpente
-
Aggiunta una texture dedicata al serpente: Essa contiene due frame in un'unica riga (
HEAD,BODY). -
snake.hpp: Aggiunti i metodi:setTexture(sf::Texture* texture)setTextureRect(const sf::IntRect& rect)setRotation(float angle)- Modificato
getShape(): ora ritorna un riferimento, evitando copie inutili.
-
snake.cpp: Implementazione delle nuovi funzioni. -
engine.hpp:- Aggiunto
sf::Texture snakeSkinallo scopo di conservarne in memoria l'atlas del serpente e fornirlo a tutte le sue sezioni.
- Aggiunto
-
engine.cpp:- Caricamento della skin in
startGame(). - Dopo la creazione del serpente (
newSnake()), ogni sezione ottiene:- la texture condivisa
- il frame corretto (testa o corpo)
- un'orientazione iniziale coerente
- Caricamento della skin in
-
snakeFunction.cpp- In
newSnake(): ogni sezione riceve immediatamente head/body rect e rotazione iniziale. - In
addSnakeSection(): le nuove sezioni ereditano automaticamente la skin e un frame BODY.
- In
-
update.cpp:- Durante lβupdate del movimento:
- La testa usa
headRecte ruota in base asnakeDirection. - Ogni sezione del corpo usa
bodyRecte ruota in base al segmento precedente.
- La testa usa
- Lo scopo Γ¨ quello di orientare il serpente in modo corretto senza richiedere sprite differenti per ogni direzione.
- Durante lβupdate del movimento:
π Skin del Frutto
Aggiunta una texture con tre frutti diversi resources/texture/fruit.png che contiene:
- banana
- mela
- ciliegia
Γ un atlas con tre frame affiancati orizzontalmente.
fruit.hpp
setTexture(const sf::Texture* tex, int frames)pickRandomFrame()- Lo scopo Γ¨ quello di gestire un atlas multi-frame e selezionare un frutto casuale.
fruit.cpp: Implementata la logica del fruit atlas:
- calcolo automatico della larghezza di ogni frame,
- generatore casuale moderno
std::mt19937, - scelta casuale del frame,
- applicazione del
textureRectcorretto allo shape del frutto. - Lo scopo Γ¨ quello di rendere il frutto diverso ad ogni spawn.
fruitFunction.cpp
- In
moveFruit()dopo aver trovato una posizione valida:- Applicata la texture del frutto,
- chiamato
fruit.pickRandomFrame()per selezionare una sprite casuale.
NeoSnake
β
βββ πhandlers/
β βββ draw.cpp
β βββ fruitFunction.cpp
β βββ input.cpp
β βββ snakeFunction.cpp
β βββ update.cpp
β
βββ πheader/
β βββ engine.hpp
β βββ fruit.hpp
β βββ snake.hpp
β βββ resource_path.h.in
β βββ map.hpp
β
βββ πsrc/
β βββ engine.cpp
β βββ fruit.cpp
β βββ main.cpp
β βββ snake.cpp
β βββ map.cpp
β
βββ πresources/
βββ πlevels/
β βββ Level01.png
β
βββ πtexture/
+ ββπskin/
+ β βββ snake_skin_1-1.png
+ βββ snake.cpp
βββ wall.png