esame Elementi di grafica digitale corso Laurea specialistica in Ingegneria Informatica progetto Cubo di Rubik con Java 3D Docente Prof. Hmeljak M. Anno accademico 2005-2006 Studente Gobbo Dario Cubo di Rubik con Java 3D 1 Cos’è il cubo di Rubik? Il Cubo di Rubik 3x3 è composto da 26 cubetti esterni ed un "cubetto invisibile" interno. Ci sono 8 cubetti d'angolo che hanno tre facce esposte e quindi di tre colori diversi, 12 cubetti di lato che espongono 2 facce ed infine i 6 cubetti centro con una sola faccia esposta. Il Cubo, oltre ad avere 6 facce, può essere visto come un "palazzo di tre piani" per cui ha un primo livello, un secondo livello ed un terzo livello. Possiamo dire che il primo livello è quello superiore e il terzo quello inferiore. Nel Progetto ogni “cubetto” è rappresentato da un oggetto MiniCube. Menù Centro Lato Spigolo Messaggi per l’utente Nella finestra che appare, oltre al cubo, sono presenti un menù e una casella di testo che serve al programma per informare l’utente di alcuni eventi. Gobbo Dario – Grafica Digitale 2 Cubo di Rubik con Java 3D Come si vede in figura il menù ha tre comandi: -Nuovo : resetta le posizioni e riporta il cubo alla situazione iniziale. -Mischia : compie delle mosse casuali per mescolare il cubo. -Risoluzione : attiva o disattiva l’algoritmo di risoluzione 2 Struttura Il progetto è composto dalle seguenti classi: package Rubik Rubik.java : classe principale, estende JFrame e si occupa di creare lo scene graph , il menù e la casella di testo. Inoltre crea i bahavior che si occuperanno dei movimenti e la classe che si occuperà della rioluzione. MiniCube.java : rappresenta un singolo “cubetto”. Al suo interno memorizza la sua posizione e quella delle facce. Face.java : rappresenta la faccia di un cubetto. Memorizza il colore del cubo. RubikMove.java : è il behavior che si occupa dei movimenti dei MiniCube. RubikRotate.java : è il behavior che si occupa del movimento dell’intero cubo. Ia.java : estende Thread e risolve il cubo. RubikApplet.java e RubikMain.java: sono le classi che lanciano il programma, la prima tramite un applet e la seconda da linea di comando. 3 Risoluzione L’algoritmo di risoluzione viene eseguito dalla classe IA. La classe estende thread e risolve il cubo a livelli. Più precisamente invece di risolvere le singole facce, risolve quella in alto sistemando del modo giusto anche la corona esterna. In questa figura si nota come la faccia bianca sia completamente risolta ma la corona esterna non ancora. Il pezzo Bianco/rosso è nella posizione non corretta. Gobbo Dario – Grafica Digitale 3 Cubo di Rubik con Java 3D La classe IA esegue 6 operazioni principali: firstCross : sistema la croce dei lati del primo livello. firstAngles : sistema gli angoli del primo livello. secondLevel : sistema il secondo livello. thirdCross: sistema la crose dei lati del terzo livello. thirdAngles: sistema gli angoli del terzo livello completando la risoluzione. Gobbo Dario – Grafica Digitale 4