Questo è un classico gioco di Solitario (Klondike) sviluppato in C# per la console, come progetto per la sfida di programmazione Gigathon (fascia 16-18 anni).
- ✅ Zero dipendenze: non è richiesta alcuna installazione di dipendenze esterne
- 💾 Salvataggio e caricamento: Puoi salvare i tuoi progressi e riprenderli in qualsiasi momento
- ↩️ Funzionalità annulla: Ogni mossa può essere annullata
- 💡 Suggerimenti: Se sei bloccato, puoi chiedere un suggerimento
- .NET 8.0 SDK (o versione successiva).
- Terminale con supporto UTF-8 e ANSI
- Fare doppio click su
Gigathon.sln - Selezionare il progetto
Solitario - Eseguirlo
- Estrai lo Zip
- Naviga alla cartella
Solitario - Esegui
dotnet run
L'interfaccia viene interamente controllata da tastiera
| Tasto | Azione |
|---|---|
| Freccie ←↑→↓ | Muovi cursore/selezione |
| Spazio / Invio | Seleziona elementi. |
| R | Pesca una carta dalla cima del mazzo |
| E | Seleziona la carta in cima agli scarti |
| F | Sposta automaticamente (se possibile) una carta dal tableau o dagli scarti alle fondazioni |
| X | Annulla selezione corrente |
| Z | Annulla ultima mossa eseguita |
| H | Richiedi un suggerimento |
| Esc | Apri menu di pausa |
Il progetto è stato pensato per essere modulare, manutenibile e scalabile.
Activities/: Contiene un piccolo framework per la gestione delle schermate (ispirato da Android), come il Menu principale, la schermata di Gioco e le Impostazioni.Game/: Contiene tutto il core del giocoControllers/: Classi che gestiscono le interazioni tra il gioco e l'utenteData/: Contiene i tipi del gioco, come le aree e come la struttura della serializzazioneHelpers/: Contiene classi di utilità comeValidatorper la logica delle mosse eHintper l'algoritmo dei suggerimentiManagers/: Classi che specializzandosi in un solo compito gestiscono le varie parti del giocoModels/: Definiscono oggetti di baseRendering/: Classi responsabili del rendering
Utils/: Contiene classi di utilità varie
Per una visione più tecnica consultare la documentazione dettagliata
Il documento specificava che "Se il mazzo si svuota, deve essere mescolato e utilizzato nuovamente". Nel solitario classico però la pila degli scarti va capovolta senza rimescolarla.
Di conseguenza sono andato per una via di mezzo, implementando entrambe le logiche. Ho aggiungo una voce al menu "Opzioni", disabilitata di default, per abilitare il rimescolo come detto nel documento
Il punteggio viene calcolato in base al tempo, il tipo di mosse e il numero di esse.

