|
| 1 | +# ⚡ La Battaglia Finale: Harry vs Voldemort |
| 2 | + |
| 3 | +Un gioco a turni realizzato con Pygame Zero per imparare la programmazione in Python in modo divertente e interattivo. |
| 4 | + |
| 5 | + |
| 6 | + |
| 7 | + |
| 8 | + |
| 9 | + |
| 10 | +## 📖 Descrizione |
| 11 | + |
| 12 | +Un gioco sviluppato a scopo didattico dove il giocatore controlla Harry Potter in un duello magico contro Voldemort. |
| 13 | +Il progetto è stato creato per insegnare concetti di programmazione come: |
| 14 | + |
| 15 | +- 🎮 Game loop e gestione degli eventi |
| 16 | +- 📊 Manipolazione di dati con Polars |
| 17 | +- 🎨 Animazioni e effetti visivi |
| 18 | +- 🤖 Intelligenza artificiale base |
| 19 | +- 🎲 Generazione di numeri casuali e probabilità |
| 20 | + |
| 21 | +## ✨ Caratteristiche |
| 22 | + |
| 23 | +- **Sistema di combattimento a turni** con 4 incantesimi casuali per round |
| 24 | +- **Animazioni fluide** per danni, cure e effetti speciali |
| 25 | +- **Barre della vita dinamiche** con colori che cambiano in base ai PV |
| 26 | +- **IA semplice** per Voldemort che sceglie mosse casuali |
| 27 | +- **Sistema di precisione** - gli incantesimi possono fallire! |
| 28 | +- **Schermate di vittoria/sconfitta** personalizzate |
| 29 | +- **Rigiocabilità infinita** con il tasto SPAZIO |
| 30 | + |
| 31 | +## 🎯 Screenshot |
| 32 | + |
| 33 | +``` |
| 34 | +┌─────────────────────────────────────────┐ |
| 35 | +│ VOLDEMORT [████████░░] 80/100 │ |
| 36 | +│ │ |
| 37 | +│ 🧙♂️ │ |
| 38 | +│ │ |
| 39 | +│ ⚡ │ |
| 40 | +│ │ |
| 41 | +│ 🧙 │ |
| 42 | +│ HARRY [██████████] 100/100 │ |
| 43 | +│ │ |
| 44 | +│ ┌─────────────────────────────────────┐│ |
| 45 | +│ │ > EXPELLIARMUS > PROTEGO ││ |
| 46 | +│ │ > STUPEFY > VULNERA SANENTUR││ |
| 47 | +│ └─────────────────────────────────────┘│ |
| 48 | +└─────────────────────────────────────────┘ |
| 49 | +``` |
| 50 | + |
| 51 | +## 🚀 Installazione |
| 52 | + |
| 53 | +### Prerequisiti |
| 54 | + |
| 55 | +- Python 3.8 o superiore |
| 56 | +- pip (gestore pacchetti Python) |
| 57 | + |
| 58 | +### Installazione delle dipendenze |
| 59 | + |
| 60 | +```bash |
| 61 | +# Clona il repository |
| 62 | +git clone https://github.com/tuousername/harry-vs-voldemort.git |
| 63 | +cd harry-vs-voldemort |
| 64 | + |
| 65 | +# Installa le dipendenze |
| 66 | +pip install pgzero polars |
| 67 | +``` |
| 68 | + |
| 69 | +## 📁 Struttura del Progetto |
| 70 | + |
| 71 | +``` |
| 72 | +harry-vs-voldemort/ |
| 73 | +│ |
| 74 | +├── game.py # File principale del gioco |
| 75 | +├── spells.csv # Database degli incantesimi |
| 76 | +├── README.md # Questo file |
| 77 | +│ |
| 78 | +├── images/ # Cartella delle immagini |
| 79 | +│ ├── harry.png # Sprite di Harry Potter |
| 80 | +│ ├── voldemort.png # Sprite di Voldemort |
| 81 | +│ ├── vittoria.png # Sfondo vittoria |
| 82 | +│ └── sconfitta.png # Sfondo sconfitta |
| 83 | +│ |
| 84 | +└── sounds/ # Cartella dei suoni (opzionale) |
| 85 | + └── ... |
| 86 | +``` |
| 87 | + |
| 88 | +## 🎮 Come Giocare |
| 89 | + |
| 90 | +```bash |
| 91 | +# Avvia il gioco |
| 92 | +python game.py |
| 93 | + |
| 94 | +# Oppure (se pgzrun è installato globalmente) |
| 95 | +pgzrun game.py |
| 96 | +``` |
| 97 | + |
| 98 | +### Controlli |
| 99 | + |
| 100 | +- **Mouse**: Clicca su un incantesimo per lanciarlo |
| 101 | +- **SPAZIO**: Riavvia il gioco dopo una vittoria/sconfitta |
| 102 | + |
| 103 | +### Regole |
| 104 | + |
| 105 | +1. Ogni turno, Harry ha 4 incantesimi casuali tra cui scegliere |
| 106 | +2. Ogni incantesimo ha: |
| 107 | + - **Danno**: quanto HP toglie (o recupera se negativo) |
| 108 | + - **Precisione**: probabilità di successo (0.0 - 1.0) |
| 109 | +3. Dopo la tua mossa, Voldemort risponde automaticamente |
| 110 | +4. Vince chi riduce a 0 gli HP dell'avversario |
| 111 | + |
| 112 | +## 📊 File CSV degli Incantesimi |
| 113 | + |
| 114 | +Il file `spells.csv` contiene tutti gli incantesimi disponibili: |
| 115 | + |
| 116 | +```csv |
| 117 | +character,spell,damage,precision |
| 118 | +Harry,Expelliarmus,15,0.9 |
| 119 | +Harry,Stupefy,20,0.75 |
| 120 | +Harry,Protego,-10,1.0 |
| 121 | +Harry,Vulnera Sanentur,-25,0.8 |
| 122 | +Voldemort,Avada Kedavra,40,0.6 |
| 123 | +Voldemort,Crucio,25,0.8 |
| 124 | +Voldemort,Imperio,30,0.7 |
| 125 | +``` |
| 126 | + |
| 127 | +### Formato dei dati |
| 128 | + |
| 129 | +- `character`: "Harry" o "Voldemort" |
| 130 | +- `spell`: Nome dell'incantesimo |
| 131 | +- `damage`: Danno inflitto (negativo = cura) |
| 132 | +- `precision`: Probabilità di successo (0.0 = 0%, 1.0 = 100%) |
| 133 | + |
| 134 | +## 🎓 Aspetti Didattici |
| 135 | + |
| 136 | +Questo progetto è perfetto per imparare: |
| 137 | + |
| 138 | +### 1. **Gestione dello Stato** |
| 139 | +```python |
| 140 | +punti_vita = {"Harry": 100, "Voldemort": 100} |
| 141 | +gioco_attivo = True |
| 142 | +attesa_input = True |
| 143 | +``` |
| 144 | + |
| 145 | +### 2. **Animazioni con Pygame Zero** |
| 146 | +```python |
| 147 | +animate(sprite, duration=0.5, x=x_originale + 10, tween="bounce_end") |
| 148 | +clock.schedule_unique(funzione, 2.0) |
| 149 | +``` |
| 150 | + |
| 151 | +### 3. **Manipolazione Dati con Polars** |
| 152 | +```python |
| 153 | +incantesimi_df = pl.read_csv("spells.csv") |
| 154 | +opzioni = incantesimi_df.filter(pl.col("character") == "Harry").sample(4) |
| 155 | +``` |
| 156 | + |
| 157 | +### 4. **Probabilità e Casualità** |
| 158 | +```python |
| 159 | +successo = random.random() < precisione |
| 160 | +indice = random.randint(0, len(opzioni) - 1) |
| 161 | +``` |
| 162 | + |
| 163 | +### 5. **Event-Driven Programming** |
| 164 | +```python |
| 165 | +def on_mouse_down(pos): |
| 166 | + # Gestisce i click |
| 167 | + |
| 168 | +def on_key_down(key): |
| 169 | + # Gestisce i tasti |
| 170 | + |
| 171 | +def draw(): |
| 172 | + # Rendering grafico |
| 173 | +``` |
| 174 | + |
| 175 | +## 🛠️ Personalizzazione |
| 176 | + |
| 177 | +### Aggiungi nuovi incantesimi |
| 178 | + |
| 179 | +Modifica `spells.csv` aggiungendo righe: |
| 180 | + |
| 181 | +```csv |
| 182 | +Harry,Expecto Patronum,-30,0.9 |
| 183 | +Voldemort,Fiendfyre,50,0.5 |
| 184 | +``` |
| 185 | + |
| 186 | +### Modifica i parametri di gioco |
| 187 | + |
| 188 | +Nel file `game.py`: |
| 189 | + |
| 190 | +```python |
| 191 | +WIDTH = 800 # Larghezza finestra |
| 192 | +HEIGHT = 600 # Altezza finestra |
| 193 | +PUNTI_VITA_INIZIALI = 100 # HP iniziali |
| 194 | +``` |
| 195 | + |
| 196 | +### Cambia le animazioni |
| 197 | + |
| 198 | +```python |
| 199 | +# Velocità animazione danni |
| 200 | +animate(visualizzazione, duration=0.6, ...) # Cambia duration |
| 201 | + |
| 202 | +# Tempo tra i turni |
| 203 | +clock.schedule_unique(fase_voldemort, 3.0) # Cambia il delay |
| 204 | +``` |
| 205 | + |
| 206 | +## 🐛 Troubleshooting |
| 207 | + |
| 208 | +### Problema: "ModuleNotFoundError: No module named 'pgzero'" |
| 209 | + |
| 210 | +**Soluzione:** |
| 211 | +```bash |
| 212 | +pip install pgzero |
| 213 | +``` |
| 214 | + |
| 215 | +### Problema: "FileNotFoundError: spells.csv" |
| 216 | + |
| 217 | +**Soluzione:** Assicurati che `spells.csv` sia nella stessa cartella di `game.py` |
| 218 | + |
| 219 | +### Problema: "FileNotFoundError: images/harry.png" |
| 220 | + |
| 221 | +**Soluzione:** |
| 222 | +- Crea una cartella `images/` nella directory del progetto |
| 223 | +- Aggiungi le immagini `harry.png`, `voldemort.png`, `vittoria.png`, `sconfitta.png` |
| 224 | + |
| 225 | +### Problema: Gli sprite non si vedono |
| 226 | + |
| 227 | +**Soluzione:** Pygame Zero cerca le immagini senza estensione: |
| 228 | +```python |
| 229 | +Actor("harry") # Cerca "harry.png" in images/ |
| 230 | +``` |
| 231 | + |
| 232 | +## 🤝 Contribuire |
| 233 | + |
| 234 | +Contributi, issues e richieste di funzionalità sono benvenute! |
| 235 | + |
| 236 | +1. Fai un Fork del progetto |
| 237 | +2. Crea un branch per la tua feature (`git checkout -b feature/NuovaFeature`) |
| 238 | +3. Commit delle modifiche (`git commit -m 'Aggiungi NuovaFeature'`) |
| 239 | +4. Push al branch (`git push origin feature/NuovaFeature`) |
| 240 | +5. Apri una Pull Request |
| 241 | + |
| 242 | + |
| 243 | +## 📚 Risorse per Imparare |
| 244 | + |
| 245 | +- [Documentazione Pygame Zero](https://pygame-zero.readthedocs.io/) |
| 246 | +- [Polars User Guide](https://pola-rs.github.io/polars/user-guide/) |
| 247 | +- [Tutorial Python ufficiale](https://docs.python.org/it/3/tutorial/) |
| 248 | + |
| 249 | +## 📝 Licenza |
| 250 | + |
| 251 | +Questo progetto è distribuito sotto licenza MIT. Vedi il file `LICENSE` per maggiori dettagli. |
| 252 | + |
| 253 | +## 👤 Autore |
| 254 | + |
| 255 | +Python Biella Group |
| 256 | + |
| 257 | +## 🙏 Ringraziamenti |
| 258 | + |
| 259 | +- Pygame Zero per il framework semplice e potente |
| 260 | +- La community di Python per le librerie fantastiche |
| 261 | +- J.K. Rowling per l'universo di Harry Potter (uso educativo) |
| 262 | + |
| 263 | +--- |
| 264 | + |
| 265 | +⭐ Se questo progetto ti è stato utile per imparare, lascia una stella su GitHub! |
| 266 | + |
| 267 | +**Fatto da Python Biella Group con ❤️ e Python, per scopi didattici** |
0 commit comments