Keyboard Shortcuts
ctrl + shift + ? :
Show all keyboard shortcuts
ctrl + g :
Navigate to a group
ctrl + shift + f :
Find
ctrl + / :
Quick actions
esc to dismiss
Likes
Search
E' nata Orologic.
¿ªÔÆÌåÓýCiao ragazzi. In questi giorni mi sto divertendo da morire nella creazione di un programma per computer che faccia da orologio scacchistico accessibile cos¨¬ come piace a me. Sono arrivato ad una versione funzionante e oggi, su Skype, con i miei naviganti scacchieranti, lo prover¨° in anteprima. Vi lascio alla lettura, se lo desiderate, del manuale di questa pllicazione che ¨¨ ancora in versione alpha.
Se vi sembra che ci sia qualcosa di sbagliato o vorreste che qualcosa che non c'¨¨, venga aggiunto, parliiamone assieme. Buona lettura.
Gabry.
# Orologic: Orologio Scacchistico con PGN
## Indice
1. ?[Introduzione](#introduzione) 2. ?[Requisiti](#requisiti) 3. ?[Installazione](#installazione) 4. ?[Utilizzo](#utilizzo) ? ? * ? [Schermata Iniziale](#schermata-iniziale) ? ? * ? [Men¨´ Principale](#³¾±ð²Ô¨´-±è°ù¾±²Ô³¦¾±±è²¹±ô±ð) ? ? * ? [Creazione di un Orologio](#creazione-di-un-orologio) ? ? * ? [Visualizzazione degli Orologi Salvati](#visualizzazione-degli-orologi-salvati) ? ? * ? [Eliminazione di un Orologio](#eliminazione-di-un-orologio) ? ? * ? [Modifica delle Informazioni PGN Predefinite](#modifica-delle-informazioni-pgn-predefinite) ? ? * ? [Avvio di una Partita](#avvio-di-una-partita) ? ? * ? [Comandi Durante la Partita](#comandi-durante-la-partita) ? ? * ? [Salvataggio della Partita (PGN)](#salvataggio-della-partita-pgn) 5. [Descrizione Dettagliata delle Funzioni](#descrizione-dettagliata-delle-funzioni) 6. ?[Formato Orario](#formato-orario) 7. ?[Note sulla Nomenclatura Scacchistica](#note-sulla-nomenclatura-scacchistica) 8. ?[Crediti](#crediti) 9. ?[Licenza](#licenza)
## 1. Introduzione <a name="introduzione"></a>
**Orologic** ¨¨ un'applicazione Python per la gestione del tempo in partite di scacchi. ?Fornisce un orologio scacchistico virtuale, permettendo di impostare tempi diversi per i giocatori (Bianco e Nero), gestire incrementi, fasi multiple e allarmi sonori. ?Orologic registra le mosse in formato PGN (Portable Game Notation), lo standard per la memorizzazione di partite di scacchi, e permette di salvare e caricare configurazioni di orologio personalizzate.
## 2. Requisiti <a name="requisiti"></a>
* ? Python 3.6 o superiore. * ? Librerie Python: ? ? * ? `python-chess` (per la gestione della scacchiera e delle mosse) ? ? * ? `GBUtils` (per le funzioni interne del programma) ? ? * ? `dateutil` (per calcoli con date e tempi) ? ? * ? `webbrowser` (per aprire il manuale)
## 3. Installazione <a name="installazione"></a>
1. ?**Clonare il repository:** ? ? ```bash ? ? git clone ? ? cd tuo_repository ? ? ```
2. ?**Installare le librerie richieste:** ? ? ```bash ? ? pip install python-chess python-dateutil ? ? ``` ? ? per GBUtils, la puoi scaricare clonando: ? ? git clone ? ? Se `pip` non ¨¨ disponibile, potresti dover usare `pip3`.
## 4. Utilizzo <a name="utilizzo"></a>
Per eseguire l'applicazione, aprire un terminale nella cartella del progetto ed eseguire:
```bash python orologic.py ``` oppure se necessario: ```bash python3 orologic.py ```
### 4.1 Schermata Iniziale <a name="schermata-iniziale"></a>
All'avvio, l'applicazione mostra informazioni sulla versione, data di creazione e autore. ?Viene anche mostrato un messaggio che invita a digitare `?` per visualizzare il men¨´ principale.
### 4.2 Men¨´ Principale <a name="³¾±ð²Ô¨´-±è°ù¾±²Ô³¦¾±±è²¹±ô±ð"></a>
Il men¨´ principale ¨¨ accessibile digitando `?` e premendo Invio. ?Le opzioni disponibili sono:
* ? **`?` - Visualizza il men¨´:** Mostra questo elenco di opzioni. * ? **`c` - Crea un orologio:** Permette di definire una nuova configurazione di orologio. * ? **`v` - Vedi gli orologi salvati:** Elenca le configurazioni di orologio salvate. * ? **`d` - Elimina un orologio salvato:** Rimuove una configurazione di orologio. * ? **`e` - Modifica info default per PGN:** Permette di impostare i valori predefiniti per i tag PGN (Evento, Sito, Round). * ? **`m` - Visualizza il manuale:** Apre questo file `README.md` nel browser predefinito. * ? **`g` - Inizia a giocare:** Avvia una nuova partita utilizzando una configurazione di orologio selezionata. * ? **`.` - Esci dall'applicazione:** Termina l'esecuzione del programma.
### 4.3 Creazione di un Orologio (`c`) <a name="creazione-di-un-orologio"></a>
Quando si seleziona "Crea un orologio", l'applicazione guida l'utente attraverso una serie di domande per definire la configurazione:
1. ?**Nome dell'orologio:** Un nome univoco per identificare la configurazione (es. "Blitz 5+3"). 2. ?**Bianco e Nero partono con lo stesso tempo?:** ? ? * ? Rispondere premendo Invio (per *²õ¨¬*) o `n` (per *no*). Se s¨¬, le impostazioni di tempo saranno uguali per entrambi i giocatori. 3. ?**Fasi:** Un orologio pu¨° avere fino a 4 fasi. ?Per ogni fase: ? ? * ? **Tempo (hh:mm:ss):** Il tempo totale a disposizione per la fase (vedi [Formato Orario](#formato-orario)). ? ? * ? **Incremento in secondi:** ?L'incremento di tempo aggiunto *dopo* ogni mossa del giocatore. ? ? * ? **Numero di mosse:** Il numero di mosse da completare *entro* la fase corrente. ?Se impostato a 0, la fase dura fino alla fine della partita (utile per l'ultima fase). ? ? * Se si imposta *Numero di mosse* a *0* non sar¨¤ pi¨´ necessario rispondere alle successive domande di configurazione delle fasi. 4. ?**Allarmi:** ? possibile impostare fino a 5 allarmi sonori: ? ? * ? **Tempo (in secondi):** Il tempo rimanente in cui l'allarme suoner¨¤. ?Ad esempio, un allarme a 30 secondi suoner¨¤ quando il tempo rimanente del giocatore attivo raggiunger¨¤ i 30 secondi. 5. ?**Nota:** Una nota opzionale per descrivere la configurazione (es. "Regolamento torneo").
### 4.4 Visualizzazione degli Orologi Salvati (`v`) <a name="visualizzazione-degli-orologi-salvati"></a>
Questa opzione mostra un elenco numerato degli orologi salvati, con le seguenti informazioni:
* ? Nome dell'orologio. * ? Indicatore `B=N` (se i tempi di Bianco e Nero sono uguali) o `B/N` (se diversi). * ? Dettagli delle fasi (tempo e incremento per ogni fase). * ? Eventuali note associate.
### 4.5 Eliminazione di un Orologio (`d`) <a name="eliminazione-di-un-orologio"></a>
Permette di eliminare un orologio salvato. ?Viene visualizzato l'elenco degli orologi (come in "Visualizzazione"), e l'utente pu¨° selezionare il numero corrispondente all'orologio da eliminare.
### 4.6 Modifica delle Informazioni PGN Predefinite (`e`) <a name="modifica-delle-informazioni-pgn-predefinite"></a>
Questa opzione permette di modificare i valori predefiniti per i tag PGN che verranno utilizzati nelle nuove partite:
* ? **Event:** Nome dell'evento (es. "Campionato Sociale"). ?Il valore predefinito ¨¨ "Orologic Game". * ? **Site:** Luogo dell'evento (es. "Circolo Scacchistico XYZ"). ?Il valore predefinito ¨¨ "Sede sconosciuta". * ? **Round:** ?Turno di gioco (es. "1"). ?Il valore predefinito ¨¨ "Round 1".
Questi valori predefiniti vengono utilizzati quando si inizia una nuova partita, ma possono essere modificati anche all'inizio di ogni partita.
### 4.7 Avvio di una Partita (`g`) <a name="avvio-di-una-partita"></a>
1. ?**Selezione dell'orologio:** Viene visualizzato l'elenco degli orologi salvati. ?Selezionare l'orologio da utilizzare inserendo il numero corrispondente. 2. ?**Inserimento dati PGN:** ? ? * ? **Nome del bianco:** Nome del giocatore che conduce i pezzi bianchi. Se lasciato vuoto il valore di default ¨¨ "Bianco". ? ? * ? **Nome del nero:** Nome del giocatore che conduce i pezzi neri. Se lasciato vuoto il valore di default ¨¨ "Nero". ? ? * ? **Elo del bianco:** Punteggio Elo del giocatore bianco. Se lasciato vuoto il valore di default ¨¨ "?". ? ? * ? **Elo del nero:** Punteggio Elo del giocatore nero. Se lasciato vuoto il valore di default ¨¨ "?". ? ? * ? **Event, Site, Round:** ?Vengono richiesti questi valori, utilizzando i valori predefiniti (vedi [Modifica delle Informazioni PGN Predefinite](#modifica-delle-informazioni-pgn-predefinite)). ?? possibile modificarli o accettare i valori predefiniti premendo Invio. 3. ?**Inizio partita:** ?Premere Invio per iniziare la partita.
### 4.8 Comandi Durante la Partita <a name="comandi-durante-la-partita"></a>
Durante la partita, l'orologio del giocatore attivo (inizialmente il Bianco) ¨¨ in esecuzione. ?Il prompt mostra:
* ? Il numero della mossa (es. `1.`). * ? L'ultima mossa registrata (se presente) (es. `e4`). * ? Un prompt per inserire la mossa successiva (es. `1. e4 `). * se il gioco ¨¨ in pausa le sezioni sopra indicate saranno mostrate tra parentesi quadre (es. `[1. e4] `).
Sono disponibili i seguenti comandi, che iniziano con un punto (`.`):
* ? **`.1`:** Mostra il tempo rimanente del Bianco. * ? **`.2`:** Mostra il tempo rimanente del Nero. * ? **`.3`:** Confronta i tempi rimanenti e indica quale giocatore ¨¨ in vantaggio (e di quanto). * ? **`.p`:** Mette in pausa/riavvia il countdown degli orologi. ?Quando in pausa, viene visualizzato il tempo trascorso in pausa. * ? **`.q`:** *Solo in pausa:* Annulla l'ultima mossa (sia nella scacchiera che nel PGN). * ? **`.b+X`:** *Solo in pausa:* Aggiunge `X` secondi al tempo del Bianco. ?`X` deve essere un numero (es. `.b+5`, `.b+0.5`). * ? **`.b-X`:** *Solo in pausa:* Sottrae `X` secondi al tempo del Bianco. * ? **`.n+X`:** *Solo in pausa:* Aggiunge `X` secondi al tempo del Nero. * ? **`.n-X`:** *Solo in pausa:* Sottrae `X` secondi al tempo del Nero. * ? **`.s`:** Visualizza la scacchiera corrente, inclusi il materiale dei giocatori, ultima mossa giocata ed il FEN della posizione. * ? **`.bianco`:** Assegna la vittoria al Bianco (risultato `1-0`). * ? **`.nero`:** Assegna la vittoria al Nero (risultato `0-1`). * ? **`.patta`:** Assegna la patta (risultato `1/2-1/2`). * ? **`.*`:** Assegna un risultato non definito (`*`) e conclude la partita. * ? **`.c commento`:** Aggiunge un commento alla mossa *precedente*. ?Ad esempio, dopo aver inserito la mossa `e4`, digitando `.c Ottima apertura!` si aggiunger¨¤ il commento "Ottima apertura!" alla mossa `e4` nel PGN. * **`.?`:** Mostra elenco dei comandi disponibili.
**Inserimento delle mosse:** Le mosse devono essere inserite in notazione algebrica SAN (Standard Algebraic Notation). ?Esempi:
* ? `e4` (muove il pedone in e4) * ? `Nf3` (muove il cavallo in f3) * ? `O-O` (arrocco corto) * ? `O-O-O` (arrocco lungo) * ? `exd5` (il pedone in e cattura il pezzo in d5) * ? `Bxf7+` (l'alfiere cattura il pezzo in f7, dando scacco) * ? `Qe8#` (la donna si muove in e8, dando scaccomatto) * ? `a8=Q` (il pedone in a7 si muove in a8 e promuove a donna.) * `a8=Q+` (il pedone in a7 si muove in a8 e promuove a donna, dando scacco.)
Dopo ogni mossa inserita correttamente, l'applicazione:
1. ?Visualizza una descrizione verbale della mossa (es. "il pedone si muove in e4"). 2. ?Aggiunge l'eventuale incremento al tempo del giocatore. 3. ?Passa il turno all'altro giocatore.
### 4.9 Salvataggio della Partita (PGN) <a name="salvataggio-della-partita-pgn"></a>
Al termine della partita (sia per abbandono, scaccomatto, patta, o assegnazione manuale del risultato), il PGN completo della partita viene salvato in un file. Il nome del file ¨¨ composto da:
`NomeBianco-NomeNero-DataOra.pgn`
Esempio: `Carlsen-Anand-20240315143000.pgn`
## 5. Descrizione Dettagliata delle Funzioni <a name="descrizione-dettagliata-delle-funzioni"></a> * ? **`describe_move(move, board)`:** Questa funzione prende una mossa (oggetto `chess.Move`) e una scacchiera (`chess.Board`) e restituisce una descrizione testuale della mossa in italiano. ?Gestisce arrocchi, promozioni, catture (inclusa l'en passant) e scacchi/scaccomatti. Analizza la notazione SAN (Standard Algebraic Notation) della mossa per fornire una descrizione pi¨´ dettagliata.
* ? **`CalculateMaterial(board)`:** Calcola il valore materiale totale del Bianco e del Nero sulla scacchiera, basandosi sui valori standard dei pezzi (Pedone=1, Cavallo=3, Alfiere=3, Torre=5, Donna=9, Re=0).
* ? **`normalize_move(m)`:** ?"Normalizza" una stringa di mossa inserita dall'utente. ?Gestisce le varianti di notazione per gli arrocchi (minuscolo, maiuscolo, "0-0" invece di "O-O") e converte la prima lettera dei pezzi da minuscolo a maiuscolo (es. `nf3` diventa `Nf3`).
* ? **`load_db()` / `save_db(db)`:** Carica e salva i dati dell'applicazione (configurazioni degli orologi e impostazioni PGN predefinite) in un file JSON (`orologic_db.json`).
* ? **`seconds_to_hms(seconds)`:** Converte un numero di secondi in formato ore:minuti:secondi (`hh:mm:ss`).
* ? **`format_time(seconds)`:** Converte un numero di secondi in un formato testuale pi¨´ leggibile (es. "1 ora, 2 minuti, 30 secondi").
* ? **`parse_time_input(prompt)`:** Chiede all'utente di inserire un tempo nel formato `hh:mm:ss` e lo converte in secondi.
* ? **`ClockConfig` (classe):** Rappresenta la configurazione di un orologio, inclusi nome, fasi, allarmi e note. ?Include metodi per convertire la configurazione in un dizionario (per il salvataggio) e viceversa.
* ? **`create_clock()` / `view_clocks()` / `delete_clock()` / `edit_default_pgn()`:** Funzioni per la gestione delle configurazioni degli orologi e delle impostazioni PGN (vedi sezioni dedicate sopra).
* ? **`select_clock()`:** Funzione di supporto utilizzata da `delete_clock()` e `start_game()` per permettere all'utente di selezionare un orologio da un elenco.
* ? **`CustomBoard` (classe):** Estende la classe `chess.Board` per fornire un metodo `__str__` personalizzato, che visualizza la scacchiera in modo pi¨´ leggibile, con informazioni aggiuntive (ultima mossa, materiale, ecc.).
* ? **`GameState` (classe):** ?Rappresenta lo stato di una partita in corso. ?Gestisce la scacchiera, la configurazione dell'orologio, i tempi rimanenti, le fasi, il turno corrente, la storia delle mosse e il PGN. ?Il metodo `switch_turn()` gestisce il cambio di turno e l'aggiornamento delle fasi.
* ? **`clock_thread(game_state)`:** ?Funzione eseguita in un thread separato. ?Gestisce il countdown del tempo dei giocatori e gli allarmi.
* ? **`start_game(clock_config)`:** ?Funzione principale per l'avvio e la gestione di una partita. ?Gestisce l'input dell'utente (mosse e comandi), aggiorna lo stato di gioco, visualizza la scacchiera e salva il PGN alla fine.
* ? **`open_manual()`:** Apre il file `README.md` nel browser web predefinito.
* ? **`show_initial_screen()`:** Mostra la schermata iniziale all'avvio dell'applicazione.
* ? **`main()`:** ?Funzione principale del programma. ?Mostra la schermata iniziale e gestisce il ciclo principale dell'applicazione (visualizzazione del men¨´ e gestione delle scelte dell'utente).
## 6. Formato Orario <a name="formato-orario"></a>
Il tempo, sia per le fasi dell'orologio che per gli allarmi, deve essere inserito nel formato `hh:mm:ss`:
* ? **`hh`:** Ore (due cifre, es. `01`, `12`). * ? **`mm`:** Minuti (due cifre, es. `05`, `59`). * ? **`ss`:** Secondi (due cifre, es. `00`, `30`).
Esempi:
* ? `01:30:00` (1 ora, 30 minuti) * ? `00:05:00` (5 minuti) * ? `00:00:10` (10 secondi)
## 7. Note sulla Nomenclatura Scacchistica <a name="note-sulla-nomenclatura-scacchistica"></a> * **LETTER_FILE_MAP**: Questo dizionario associa a ogni lettera che identifica una colonna della scacchiera (da *a* ad *h*) il nome corrispondente in italiano, usato per comporre la descrizione verbale delle mosse. * **PIECE_NAMES**: Contiene la traduzione in italiano dei nomi dei pezzi.
## 8. Crediti <a name="crediti"></a>
* ? Sviluppato da: Gabriele Battaglia * ? Data di creazione: 14 Febbraio 2025 * ? Versione: 2.1.3 * ? Creato con l'ausilio di ChatGPT.
## 9. Licenza <a name="licenza"></a>
Questo progetto ¨¨ rilasciato sotto licenza [GPL]. ?Vedi il file `LICENSE` per i dettagli. ``` -- Gabriele Battaglia (IZ4APU) --... ...-- -.. . .. --.. ....- .- .--. ..- - ..- . . Sent from my Giant Desktop PC |
to navigate to use esc to dismiss