|
|
1 year ago | |
|---|---|---|
| Effects | 1 year ago | |
| KnightBasic | 2 years ago | |
| Tiles/Base | 2 years ago | |
| Units | 1 year ago | |
| __pycache__ | 2 years ago | |
| .gitignore | 2 years ago | |
| README.md | 2 years ago | |
| main.py | 1 year ago | |
| maze.json | 1 year ago | |
| maze.py | 2 years ago | |
| solver.py | 2 years ago | |
README.md
Maze Knight
Descrizione
Questo progetto rappresenta un esempio di come non dovrebbe essere creato un gioco isometrico, ovvero da zero. Utilizza il Canvas di Tkinter per disegnare le rappresentazioni isometriche delle celle di una scacchiera definita in un file JSON. Al momento gestisce una sola unità, un cavaliere disarmato che può solo spostarsi autonomamente nella casella indicata. La logica di movimento funziona abbastanza bene, ma si pone il problema della scalabilità del gioco considerando che il disegno sul Canvas richiede molte risorse e lo scrolling è già problematico.
Utilizzo
Per avviare il gioco, esegui il file main.py:
python3 main.py
Caratteristiche
- Vista isometrica: Il gioco utilizza una prospettiva isometrica, conferendogli un aspetto pseudo-3D.
- Controlli da tastiera: La vista può essere spostata utilizzando i tasti freccia.
- Controlli del mouse: Le celle possono essere selezionate con un clic sinistro. Un clic destro su una cella sposterà il cavaliere su quella cella se è percorribile.
- Modalità editor: Premendo il tasto 'Tab' si attiva la modalità editor, dove vengono visualizzate ulteriori informazioni su ogni cella e le celle possono essere modificate.
- Animazioni: Il cavaliere ha animazioni di camminata e di riposo che cambiano a seconda della direzione in cui si muove.
- Logica movimento Unità La logica di movimento del cavaliere nel gioco Maze Knight è implementata nella classe Knight nel file knight.py. Questa classe gestisce il movimento del personaggio controllato dal giocatore sulla scacchiera isometrica.
Quando il giocatore fa clic destro su una cella percorribile, il cavaliere viene spostato su quella cella. La logica di movimento si occupa di verificare se la cella di destinazione è raggiungibile dal cavaliere e di gestire l'animazione di camminata del cavaliere nella direzione corretta.
Per determinare se una cella è raggiungibile, la logica di movimento utilizza un algoritmo di ricerca del percorso, come ad esempio l'algoritmo A*. Questo algoritmo valuta le celle adiacenti alla posizione corrente del cavaliere e calcola il percorso più breve verso la cella di destinazione. Se viene trovato un percorso valido, il cavaliere viene spostato lungo il percorso in modo fluido.
Durante il movimento, la logica di movimento si occupa anche di gestire le animazioni del cavaliere. A seconda della direzione in cui si sta muovendo, il cavaliere cambia l'animazione di camminata corrispondente. Ad esempio, se si sta muovendo verso l'alto, verrà visualizzata un'animazione di camminata verso l'alto.
È importante notare che la logica di movimento funziona bene per il gioco attuale, ma potrebbe non essere scalabile per mappe più grandi o complesse. Questo perché il disegno sul Canvas richiede molte risorse e lo scrolling potrebbe diventare problematico. Pertanto, se si desidera migliorare la scalabilità del gioco, potrebbe essere necessario ottimizzare la logica di movimento o considerare altre soluzioni, come l'utilizzo di un framework di gioco più avanzato.
Struttura dei file
- main.py: Questo è lo script principale che esegue il gioco.
- knight.py: Contiene la classe
Knight, che rappresenta il personaggio controllato dal giocatore. - maze.json: Un file JSON che rappresenta lo stato iniziale della mappa del gioco.
- Tiles/: Questa directory contiene immagini PNG utilizzate come tiles per la mappa del gioco.
- KnightBasic/: Questa directory contiene immagini GIF utilizzate per le animazioni del cavaliere.
- Units/: Questa directory contiene le unità utilizzate nel gioco.
- Effects/: Questa directory contiene i diversi effetti utilizzati nel gioco.
Dipendenze
- Python 3
- Tkinter
- glob
- os
- json
- time
Contribuire
Le Pull Request sono benvenute. Per modifiche importanti, apri prima un issue per discutere cosa vorresti cambiare. Assicurati di aggiornare i test in modo appropriato.