Note di rilascio della versione 1.0

Premessa

Il programma proposto Abaco Maya è un gioco educativo il cui scopo è di avvicinare l'utente al 'magico' mondo dell'aritmetica Maya.
Esso consta di una generazione pseudocasuale di numeri nella rappresentazione Maya, vigesimale, il compito dell'utente è di trovarne la corrispondente rappresentazione decimale (con cifre arabe).
Naturalmente, il gioco è fornito anche con la variante inversa: generazione pseudocasuale di numeri nella usuale rappresentazione decimale con cifre arabe, affinché l'utente ne costruisca la rappresentazione Maya vigesimale.


Nella prima schermata di gioco sono presenti due tasti : testo e testo1. L'utente deve cliccare su uno dei due pulsanti per poter andare avanti con l'esecuzione
del programma e cimentarsi con il tipo di conversione scelta.

Architettura del software

Il programma e' strutturato in tre classi: Grafica1 , Grafica2 e Grafica3.
Grafica1 contiene il main che fa partire il programma e inoltre si occupa dell'interfaccia grafica della prima schermata di gioco, la classe Grafica2 si occupa della gestione della conversione Maya-Arabo e della relativa interfaccia grafica e la classe Grafica3 della gestione della conversione Arabo-Maya ed anch'essa della relativa interfaccia grafica .

Tecniche di programmazione

La parte di gioco che si occupa della conversione Maya-Arabo ha una logica molto semplice.
Il valore inserito dall'utente viene semplicemente confrontato con una variabile intera denominata Totale. La variabile Totale contiene il valore complessivo dei simboli Maya generati.
Il sistema di numerazione Maya è di tipo posizionale e vigesimale, di conseguenza ai quattro simboli Maya generati casualmente vengono associati i valori che assumono nelle posizioni progressivamente occupate.
Infatti per mezzo di un ciclo For (con un massimo di 4 iterazioni) vengono associate alle variabili tot0, tot1, tot2 e tot3 i quattro valori dei simboli Maya e ad ogni iterazione alla variabile Totale viene sommato il valore di ciascun simbolo ottenendo il corrispettivo numero arabo.

La parte di gioco che si occupa della conversione Arabo-Maya ha una logica un po' più elaborata.
L'utente scrive la soluzione della conversione tramite l'utilizzo di opportuni JButton (basandosi sempre sul fatto che ci occupiamo di un tipo di numerazione posizionale e vigesimale); alla pressione dei quattro simboli che secondo l'utente rappresenta il valore ricercato, vengono inserite nelle quattro variabili intere venti_zero, venti_uno, venti_due e venti_tre i corrispettivi valori dei simboli scelti e in un secondo momento grazie all'utilizzo della classe Math.pow() vengono moltiplicati per una potenza di 20 in base alla posizione occupata. Essi vengono sommati in una variabile denominata Totale.
La variabile Totale viene confrontata con la variabile c che contiene il numero arabo casuale generato.
Per l'elaborazione della soluzione viene utilizzato l'algoritmo che dato un numero naturale n, fornisce la sua rappresentazione posizionale in base B (ovvero vigesimale).

La parte grafica della prima schermata di gioco è composta da: due JButton citati nella premessa e da due immagini relative al titolo del gioco e al simbolo del calendario Maya che non sono altro che delle semplici JLabel.

La parte grafica della schermata di gioco conversione Maya-Arabo è composta da tre pulsanti: Genera simbolo, Soluzione e Invio.
Il pulsante Genera Simbolo setta i valori delle quattro JTextArea (in cui vengono inseriti i relativi suggerimenti) presenti e si occupa di assegnare le opportune ImageIcon (in base al numero casuale generato) alle quatto JLabel che rappresentano le quattro cifre Maya.
Alla pressione del tasto Soluzione nelle quattro JTextArea viene stampata la procedura risolutiva e la soluzione della conversione, di conseguenza la JTextField in cui l'utente inserisce la sua risposta viene bloccata.
Il pulsante Invio serve a dare conferma del valore che l'utente ha inserito nella JTextField e in base alla sua correttezza o meno viene visualizzato (in una ulteriore JTextArea) un messaggio di valida o errata soluzione.

La grafica della schermata di gioco conversione Arabo-Maya è composta dai tre pulsanti :Genera Numero, Soluzione e Invio, con l'aggiunta di altri 20 JButton.
Il pulsante Genera Numero si occupa di settare i valori delle quattro JTextArea (in cui appaiono i relativi suggerimenti) presenti, di settare le quattro Jlabel che rappresentano le quattro cifre Maya scelte dall'utente e di generare un numero arabo casuale e stamparlo in una JTextArea.
I 20 JButton che corrispondono alle 20 cifre Maya, essi servono all'utente per poter rappresentare il numero arabo generato in codifica Maya. Alla pressione di uno dei 20 pulsanti viene associata alla corrispettiva JLabel (in totale 4) una nuova ImageIcon che rappresenta il simbolo Maya scelto.
Alla pressione del tasto Soluzione in quattro JTextArea viene stampata la procedura risolutiva, la soluzione della conversione e vengono bloccati i 20 JButton.

Durante la stesura del programma avevo commesso un grave errore, ovvero di non considerare il fatto che il programma potesse girare su diversi pc con diverse risoluzioni di schermata.
Ho quindi riscontrato inizialmente alcune difficoltà nella gestione dei JPanel e dei Layout, ma alla fine sono riuscita ad adattarli al meglio.
Quindi dato che il programma può essere eseguito in diversi computer con monitor di dimensioni differenti, sono stati utilizzati dei layout che gestiscono i vari componenti.
(Risoluzione max: 1366x768. Risoluzione min:800x600)
In particolare la prima finestra e' gestita da un GridConstraints e da un GridBagLayout, mentre le finestre grafiche delle classi Grafica2 e Grafica3 sono gestite da Panel1, Panel2 e da un GridBagConstraints.


UML

im
*Grafico Uml realizzato con l'utilizzo del programma StarUml


Classi

La classe Grafica1 crea l'interfaccia grafica con un JFrame, contiene il metodo costruttore Grafica1() che a sua volta contiene due JLabel e due JButton con i rispettivi metodi addActionListener(). I JLabel contengono le immagini che corrispondono al titolo del gioco e al simbolo del calendario Maya.
I due JButton contengono rispettivamente un' istanza della classe Grafica2 e Grafica3, essi inizializzano le classi e richiamano i seguenti metodi:

Metodi contenuti in Grafica2
- Grafica2() richiama il metodo Components();
- Components() inizializza tutte le componenti descritte creando la finestra completa di tutte le componenti;
- addActionListener(JButton continua) setta i valori delle JTextArea, contiene il ciclo for che gestisce la creazione dei quattro simboli Maya e richiama il metodo add_grafica();
- addActionListener(JButton invio) tramite Integer.valueOf() trasforma la stringa di caratteri inserita dall'utente in un numero intero per poter effettuare il confronto tra il valore inserito dall'utente e il numero Maya generato;
- addActionListener(JButton help) richiama il metodo suggerimento();
- suggerimento(JTextArea message,JTextArea message1,JTextArea message2,JTextArea message3,JTextArea message4) visualizza tramite cinque JTextArea la procedura risolutiva e la soluzione della conversione Maya-Arabo;
- add_grafica(int c,int i) si occupa di visualizzare tramite quattro JLabel e il metodo setIcon() i quattro simboli Maya generati casualmente;
- ActionPerformed(ActionEvent) questi tipi di metodi gestiscono i click sui JButton..


Metodi contenuti in Grafica3
- Grafica3() richiama il metodo Components();
- Components() inizializza tutte le componenti descritte creando la finestra completa di tutte le componenti;
- addActionListener(JButton genera) setta i valori delle JLabel e delle JTextArea e si occupa di generare per mezzo di una Math.random() il numero intero da convertire;
- addActionListener(JButton conferma) effettua il confronto tra il numero intero generato casualmente e i quattro simboli Maya scelti dall'utente per rappresentarlo;
- addActionListener(JButton soluzione)contiene il ciclo for che dato un numero naturale n, fornisce la sua rappresentazione vigesimale e richiama il metodo add_grafica();
- addActionListener(JButton uno);........;addActionListener(JButton diciannove) vi sono 20 metodi di questo tipo all'interno della classe Grafica3, essi contengono una cascata di else if che consentono all'utente di scegliere quattro dei 20 simboli Maya e di inserirli nella posizione che l'utente ritiene esatta;
- add_grafica(int i,int resto,int quoziente,int quoz)si occupa di visualizzare tramite quattro JLabel e il metodo setIcon() la procedura risolutiva e la soluzione della conversione Arabo-Maya ;
- ActionPerformed(ActionEvent) questi tipi di metodi gestiscono i click sui JButton.


Codice Progetto


Possibili miglioramenti futuri

1. Implementazione di un menu.
2. Possibilita' di scelta di un diverso layout dei componenti.

Riferimenti

Logo del gioco tratto dal sito Wikipedia (Internet). File:Calendariomaya.jpg; (consultato 10 agosto 2011).
Disponibile all' indirizzo: http://es.wikipedia.org/wiki/Archivo:Calendariomaya.jpg