VisualBooth - Documentazione Codice

Home visualbooth MainMenu binaryDigit QuizSquare Booth_algorythm Prodotto_in_colonna Algoritmo_di_Booth BitPair
Si è scelto di sviluppare il software in una risoluzione nativa 800X600, per permetterne l'esecuzione a sistemi quanto più economici in commercio e non più in commercio. Per tale motivo molte delle funzioni grafiche sono calcolate su misura di questa risoluzione.

Le 5 PImage bg,vstart, freccia, frecciasomma e croce contengono le immagini di supporto, caricate dalla cartella "data".

Il boolean triggermm stabilisce se il menù deve essere visibile oppure no.

Il boolean quizmode stabilisce la selezione della modalità quiz.

Seguono diverse strutture dati di tipo lista

ArrayList bd1;-----per le 8 cifre del primo numero in input
ArrayList bd2;-----per le 8 cifre del secondo numero in input
ArrayList bd3;-----per le 16 cifre del passo 1
ArrayList bd4;-----per le 16 cifre del passo 2
ArrayList bd5;-----per le 16 cifre del passo 3
ArrayList bd6;-----per le 16 cifre del passo 4
ArrayList bd7;-----per le 16 cifre del passo 5
ArrayList bd8;-----per le 16 cifre del passo 6
ArrayList bd9;-----per le 16 cifre del passo 7
ArrayList bd10;-----per le 16 cifre del passo 8
ArrayList bd11;-----per le 16 cifre del risultato
ArrayList bdb;-----per le 8 cifre dell'array di booth/array di bitpair
ArrayList bdq;-----per le 16 cifre del risultato in modalità quiz
ArrayList bdc;-----per le 8 cifre dell'array di booth/array di bitpair in modalità quiz

Gli array di interi array1, array2, arrayb, arraybp conterranno rispettivamente i due array in input, l'array contenente il secondo fattore convertito con algoritmo di booth e array contenente il secondo fattore con codifica bitpair.

Il boolean arrayloaded gestisce il trigger sulle animazioni on/off al passaggio del mouse sui passi dell'algoritmo, oltre a fungere da punto di riferimento per l'avvio del rispettivo algoritmo. Lo stesso trigger è usato più volte nel draw() per verificare lo stato di diverse funzioni.

Gli oggetti istanziati sono 5: ProdottoC pcol----------per qualora venga chiamata la funzione prodotto naturale;
Booth pbooth----------per qualora venga chiamata la funzione prodotto con codifica di Booth;
Bitpair pbp----------per qualora venga chiamata la funzione prodotto con codifica bitpair.
MainMenu----------che gestisce l'interfaccia.
Quizsquare----------che gestisce il rettangolo a scomparsa sulla destra in modalità quiz.


Nella funzione di draw(), la quale di default viene chiamata ogni 60 frame al secondo, avvengono diverse operazioni dipendenti dal boolean "triggermm".

Per il triggermm=true viene mostrato il menu come spiegato sopra, altrimenti viene mostrata la schermata che mostra l'algoritmo selezionato.
Dopo aver mostrato il background (l'immagine con i bit sullo sfondo) viene chiamata per prima la funzione mouseover(), la quale, a seconda dello stato di "triggermm", controlla se la posizione del mouse si trova su una zona dello schermo pertinente ad un opzione selezionabile.
Grazie a questa infatti possiamo notare la presenza di zone che assumono uno sfondo con trasparenza in corrispondenza delle opzioni selezionabili sul menù, delle opzioni selezionabili "start" e "ritorna al menu", e dei vari passi dell'algoritmo in caso di triggermm=false.

Analogamente la funzione mouseReleased(), la quale viene chiamata di default ad un click del mouse, controlla le medesime posizioni controllate da mouseover(), andando a impostare un valore uguale a 1,2 o 3 all'attributo "selection" dell'oggetto di tipo MainMenu "mm".
Inoltre la stessa funzione si occupa anche di permettere all'utente di cambiare le cifre del numeri in binario degli Input nella schermata degli algoritmi.

Tornando alla funzione draw(), in caso di boolean triggermm=false, vengono stampate a schermo le opzioni selezionabili dall'utente e le coppie da 8 binaryDigit (contenuti nei due ArrayList bd1 e bd2) per le cifre in Input.


In caso di pressione del pulsante START, il boolean "arrayloaded" assumerà valore true mostrando così la matrice dell'operazione con il risultato. Vengono posizionati sotto, i bit che vengono generati dall'operazione e viene utilizzato uno sfondo più scuro per la sezione della matrice che non viene utilizzata nel calcolo.

In base all'attributo "selection" dell'oggetto di classe MainMenu "mm", vengono caricate le relative sezioni di testo che riguardano ogni algoritmo.
Inoltre viene gestita all'interno dagli stessi "if" l'eventuale visione del secondo fattore codificato in codifica di Booth o con Bitpair.

Nel caso di Bitpair vengono mostrate solamente 4 di 8 cifre, poichè le restanti contengono valori nulli corrispondenti ad un semplice riporto di zeri sull'intero output della moltiplicazione relativa a quella cifra, come da algoritmo per il bitpair. E' inoltre gestito, in caso di codifica bitpair -2/+2, la sostituzione della linea orizzontale con la serie di "<<<<<..." a significare che è avvenuto uno shift sinistro.


La funzione loadarray() carica, negli array1 e array2 di interi, i contenuti della coppia di cifre binarie. A seconda dell'attributo "selection" dell'oggetto di classe MainMenu "mm", viene chiamato il relativo algoritmo descritto nelle restanti classi, potendo così accedere e caricare nelle restanti liste di binaryDigit i valori assunti dalla matrice del prodotto e del risultato. Per selection=1 si fa riferimento all'algoritmo per il prodotto naturale; per selection =2 a quello per il prodotto con algoritmo di Booth; per selection=3 a quello con codifica Bitpair,dove, in caso di +2/-2, si provvede a modificare il background di bianco di una cella extra a sinistra del numero. Il background delle restanti celle viene gestito separatamente a seconda dei casi.


In modalità quiz tutto è riadattato seguendo il boolean restituito dal metodo: "boolean esit(ArrayList al1, ArrayList al2)" che permette di confrontare i risultati che l'utente inserisce con quelli ottenuti dall'algoritmo