aboutsummaryrefslogtreecommitdiff
path: root/robottino/all_versions/v2.2/src
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2026-03-26 19:27:18 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2026-03-26 19:27:18 +0100
commit7167b4341ef290d56fb96e2af10883a4b925d83b (patch)
tree1eb1b9e5ab82ddd89540e68d6b22ae69514575c6 /robottino/all_versions/v2.2/src
downloadancient-projects-master.tar.gz
ancient-projects-master.zip
I found my old code!HEADmaster
Diffstat (limited to 'robottino/all_versions/v2.2/src')
-rwxr-xr-xrobottino/all_versions/v2.2/src/RobottinoAzioni/RobottinoAzioni.java369
-rwxr-xr-xrobottino/all_versions/v2.2/src/RobottinoMain/Robottino.java115
-rwxr-xr-xrobottino/all_versions/v2.2/src/RobottinoUtils/Grafica.java60
-rwxr-xr-xrobottino/all_versions/v2.2/src/RobottinoUtils/Listener.java62
-rwxr-xr-xrobottino/all_versions/v2.2/src/RobottinoUtils/PartiDelRobot.java22
5 files changed, 628 insertions, 0 deletions
diff --git a/robottino/all_versions/v2.2/src/RobottinoAzioni/RobottinoAzioni.java b/robottino/all_versions/v2.2/src/RobottinoAzioni/RobottinoAzioni.java
new file mode 100755
index 0000000..96ad922
--- /dev/null
+++ b/robottino/all_versions/v2.2/src/RobottinoAzioni/RobottinoAzioni.java
@@ -0,0 +1,369 @@
1// Dichiaro che questa classa farà parte del package RobottinoAzioni, che verrà poi importato dalle classi Robottino e Grafica.
2package RobottinoAzioni;
3
4// Anche qui impoerto i package necessari.
5import java.util.Scanner;
6import java.util.Vector;
7import RobottinoUtils.*;
8
9public class RobottinoAzioni {
10
11 // Creo gli oggetti statici che riempiranno il vettore pdrA:
12 // pdrA è un vettore multidimensionale che a sua volta contiene vettori
13 // (il primo si chiama pdrB, i successivi non avranno nome) che coontengono
14 // 4 istanze di PartiDelRobot, cioè i 4 arti del robot.
15 // Poi creo un vettore che conterrà i nomi dei robot.
16 // Creo il vettore principale...
17 public static Vector pdrA = new Vector(1);
18
19 // ...e il "sottovettore" come istanze della classe Vector
20 public static Vector pdrB = new Vector(4);
21
22 // Creo le quattro istanze di PartidelRobot utilizzando l'apposito costruttore
23 // passo a tutte una stringa e un valore boleano che determina lo stato
24 // (alzato/a se true, abbassato/a se false).
25 public static PartiDelRobot leftArm = new PartiDelRobot(false, "il braccio sinistro alzato");
26 public static PartiDelRobot rightArm = new PartiDelRobot(false, "il braccio destro alzato");
27 public static PartiDelRobot leftLeg = new PartiDelRobot(false, "la gamba sinistra alzata");
28 public static PartiDelRobot rightLeg = new PartiDelRobot(false, "la gamba destra alzata");
29
30 // Il vettore nomeRobot per i nomi
31 // il vettore può contenere stringhe, poichè non sono tipi primitivi ma oggetti della classe String
32 public static Vector nomeRobot = new Vector(1);
33
34 // La variabile robotIndex serve a tenere in memoria su quale robot si sta operando:
35 // in seguito verrà usata quando l'utente deciderà di creare più di un robot
36 // e poi di dare comandi a uno o all'altro/i.
37 int robotIndex = 0;
38
39 // Dichiarazione del metodo Azioni.
40 public String Azioni(String comando, Vector nomeRobot, Vector pdrA) {
41
42 // Crea un'istanza della classe Scanner per
43 // ricevere gli input nel caso in cui debba essere dato il nome
44 // al robottino o scelto un robottino da una lista.
45 Scanner sc2 = new Scanner(System.in);
46
47 // La variabile contatore memorizza il numero di variabili "PartiDelRobot.statoParte"
48 // che hanno valore true, ossia il numero di arti alzati di un robottino
49 // in modo da poter scegliere la frase giusta da dare come output
50 // al posto dell'immagine del robottino con tali arti alzati.
51 int contatore = 0;
52
53 // Questo array ha il compito di memorizzare le stringhe corrispondenti agli alzati
54 // per motivi simili a quelli della variabile "contatore".
55 String stat[] = {"", "", "", ""};
56
57 // La stringa Return verrà successivamente modificata e restituita in alcuni casi.
58 String Return = "Errore - si consiglia di picchiare il programmatore";
59
60 // Per far si che il programma non distingua tra lettere maiuscole o minuscole per quanto riguardo gli input
61 // è stato usato il metodo "equalsIgnoreCase" della classe String.
62 // I quattro casi successivi cambiano il valore della varibalie "statoParte" relativa all'arto
63 // Che deve mouversi (quindi cambiare la sua posizione).
64 if (comando.equalsIgnoreCase("leftarmmove"))
65 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(0)).statoParte =
66 !((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(0)).statoParte;
67
68 else if (comando.equalsIgnoreCase("rightarmmove"))
69 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(1)).statoParte =
70 !((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(1)).statoParte;
71
72 else if (comando.equalsIgnoreCase("leftlegmove"))
73 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(2)).statoParte =
74 !((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(2)).statoParte;
75
76 else if (comando.equalsIgnoreCase("rightlegmove"))
77 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(3)).statoParte =
78 !((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(3)).statoParte;
79
80 // I casi successivi modificano il valore della varibile analogamente ai 4 precedenti.
81 else if (comando.equalsIgnoreCase("leftarmon"))
82 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(0)).statoParte = true;
83
84 else if (comando.equalsIgnoreCase("rightarmon"))
85 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(1)).statoParte = true;
86
87 else if (comando.equalsIgnoreCase("leftlegon"))
88 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(2)).statoParte = true;
89
90 else if (comando.equalsIgnoreCase("rightlegon"))
91 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(3)).statoParte = true;
92
93 else if (comando.equalsIgnoreCase("leftarmoff"))
94 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(0)).statoParte = false;
95
96 else if (comando.equalsIgnoreCase("rightarmoff"))
97 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(1)).statoParte = false;
98
99 else if (comando.equalsIgnoreCase("leftlegoff"))
100 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(2)).statoParte = false;
101
102 else if (comando.equalsIgnoreCase("rightlegoff"))
103 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(3)).statoParte = false;
104
105 // Il caso successi si verica quando il comando è "exploud".
106 else if (comando.equalsIgnoreCase("exploud")) {
107
108 // Scrive sullo schermo la seguente frase, che comprende il nome del robottino che non è ancora stato fatto eliminare
109 System.out.println
110 ("Che atroce! Hai fatto esplodere il robottino " + nomeRobot.elementAt(this.robotIndex) + "! Aspetta che te ne faccio un altro");
111 System.out.println ("...");
112
113 // Con un ciclo for rendo false tutte le variabili "statoParte" per far sì che il robottino sia come nuovo.
114 for (int i = 0; i < 4; i++) {
115 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(i)).statoParte = false;
116 }
117
118 // E azzero anche il nome del robot
119 this.nomeRobot.setElementAt("", this.robotIndex);
120
121 return "Fatto, puoi continuare a giocare";
122 }
123
124 // Caso per il comando "bier".
125 // La reazione a questo comando è un semplice output quasi totalmente scorrelato al robottino
126 // se non per il fatto che appare il nome del robottino attuale.
127 else if (comando.equalsIgnoreCase("bier")) {
128 System.out.println ("Il robottino " + nomeRobot.elementAt(this.robotIndex) + "sta trangugiando una birra...");
129 System.out.println ("Buurrrrrrrrp!");
130 return "La birra analcolica fa schifo!";
131 }
132
133 // Per il comando "rename", rinomina.
134 else if (comando.equalsIgnoreCase("rename")) {
135
136 System.out.println ("Con questo comando quoi cambiare il nome del robottino " + nomeRobot.elementAt(this.robotIndex));
137 System.out.println ("Digita il nuovo nome e premi INVIO per coninuare");
138
139 // Cambia il nome del robottino attuale con quello dell'input.
140 this.nomeRobot.setElementAt(sc2.nextLine(), this.robotIndex);
141
142 // Se il nome non è vuoto, aggiunge un carattere di spazio per migliorare la visualizzazione nelle frasi di output.
143 if (!(((String)nomeRobot.elementAt(this.robotIndex)).equalsIgnoreCase("")))
144 this.nomeRobot.setElementAt(this.nomeRobot.elementAt(this.robotIndex) + " ", this.robotIndex);
145
146 // Semplice output con il nuovo nome.
147 return "Ora il robottino si chiama " + nomeRobot.elementAt(this.robotIndex);
148 }
149
150 // Per il comando "porky".
151 // Ancora meno che per "bier".
152 else if (comando.equalsIgnoreCase("porky")) {
153 System.out.println ("Porky è un grande");
154 System.out.println ("Per maggiori informazioni visita il sito");
155 return "http://kakati.forumfree.net/";
156 }
157
158 // Il comando "xxx" ha funzioni analoghe a bier.
159 else if (comando.equalsIgnoreCase("xxx")) {
160 System.out.println ("Il robottino " + nomeRobot.elementAt(this.robotIndex) + "ha incontrato una bella robottina...");
161 return "*Censura*";
162 }
163
164 // "dance" setta tutte le variabili "statoParte" a false...
165 else if (comando.equalsIgnoreCase("dance")) {
166
167 System.out.println ("Immagini che il robottino " + nomeRobot.elementAt(this.robotIndex) + " stia ballando...");
168 System.out.println ("Il robottino ha smesso di ballare");
169
170 //...con questo ciclo for
171 for (int i = 0; i < 4; i++) {
172 ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(i)).statoParte = false;
173 }
174
175 return "Il robottino " + nomeRobot.elementAt(this.robotIndex) + "si è fermato ed è tornato nella posizione originale";
176
177 // Per il comando "newrobot", che crea un nuovo robottino.
178 }
179 else if (comando.equalsIgnoreCase("newrobot")) {
180
181 // Aggiunge un elemento a "pdrA" con il metodo "addElement", della classe Vector.
182 // È stata necessaria la dicitura this. per modificare realmente il vettore.
183 // Se non lo avessi fatto non sarebbe successo, in quanto i metodi operano
184 // su i valori e non sulle variabili/oggetti.
185 this.pdrA.addElement(pdrB);
186
187 // Aggiungo le 4 parti del robot.
188 // Forse avete già notato (ma quì sono più evidenti) alcuni cast che ho fatto:
189 // sono per far si che il compilatore capisca che il metodo viene invocato da un oggetto
190 // della classe vector, che senza cast considererebbe della classe Object.
191 ((Vector)(this.pdrA.elementAt(pdrA.size()-1))).addElement (leftArm);
192 ((Vector)(this.pdrA.elementAt(pdrA.size()-1))).addElement (rightArm);
193 ((Vector)(this.pdrA.elementAt(pdrA.size()-1))).addElement (leftLeg);
194 ((Vector)(this.pdrA.elementAt(pdrA.size()-1))).addElement (rightLeg);
195
196 // Semplice output con richiesta di nome per il nuovo robottino.
197 System.out.println ("È stato creato un nuovo robot. Vuoi dare un nome al nuovo robot?");
198 System.out.println ("Inserisci il nuovo nome e premi INVIO oppure lascia vuoto e premi INVIO");
199
200 String newName = sc2.nextLine();
201
202 if (!(((String)nomeRobot.elementAt(this.robotIndex)).equalsIgnoreCase("")))
203 this.nomeRobot.setElementAt(this.nomeRobot.elementAt(this.robotIndex) + " ", this.robotIndex);
204
205 this.nomeRobot.addElement(newName);
206
207 return "È stato creato il robottino " + newName;
208 }
209
210 // Il comando "deleterobot", per eliminare un robot.
211 else if (comando.equalsIgnoreCase("deleterobot")) {
212
213 // Se c'è più di un robot esegue l'eliminazione.
214 if (pdrA.size()>1) {
215 System.out.println ("Quale robottino vuoi eliminare?");
216 System.out.println ("");
217
218 // Con un ciclo for scrive i nomi di tutti i robot preceduti da un numero in sequenza.
219 // Il numero è il corrispondente del loro indice di vettore.
220 for (int i = 0; i<this.pdrA.size(); i++) {
221 System.out.println (i + ". " + this.nomeRobot.elementAt(i));
222 }
223
224 // Dà le istruzioni all'utente affinché capisca come eliminare un robot.
225 System.out.println ("");
226 System.out.println("Scegliere il robottino da eliminare digitando il numero corrispondente e premendo INVIO");
227 System.out.println("Digitare un qualunque altro numero e premere INVIO per annullare");
228
229 // Riceve in input il numero e ne assegna il valore alla variabile "num".
230 int num = sc2.nextInt();
231
232 // Elimina gli elementi corrispondenti al robottino (nome e robot) dai
233 // rispettivi vettori con il metodo "removeElementAt" della classe Vector.
234 if (num<this.pdrA.size()) {
235 this.pdrA.removeElementAt(num);
236 this.nomeRobot.removeElementAt(num);
237 return "È stato eliminato il robottino numero " + num;
238 }
239
240 // Se il numero ricevuto in input è superiore all'indice dei robot
241 // non elimina alcun robot.
242 else return "Operazione annullata";
243 }
244
245 // Se c'è solo un robot non esegue l'eliminazione.
246 else return "Hai solo un robottino, non puoi eliminarlo!";
247 }
248
249 // Il comando "changerobot" per cambiare il robot a cui dare le istruzioni
250 else if (comando.equalsIgnoreCase("changerobot")) {
251
252 // L'esecuzione è simile a quella per il comando "deleterobot", con la differenza che il robot non viene eliminato
253 // ma viene semplicemente cambiato il valore della variabile "robotIndex".
254 if (pdrA.size()>1) {
255 System.out.println ("A quale robottino vuoi dare i comandi?");
256 System.out.println ("");
257 for (int i = 0; i<this.pdrA.size(); i++) {
258 System.out.println (i + ". " + this.nomeRobot.elementAt(i));
259 }
260 System.out.println ("");
261 System.out.println ("Digita il numero corrispondente alla tua scelta e premi INVIO");
262 int newIndex = sc2.nextInt();
263
264 // Prima di cambiare valore alla variabile di indice verifica che il numero sia valido.
265 if (newIndex<this.pdrA.size()) {
266 this.robotIndex = newIndex;
267 return "È stato selezionato il robottino numero " + this.robotIndex + ": " + this.nomeRobot.elementAt
268 (this.robotIndex);
269 }
270
271 // Se non lo è non esegue l'assegnamento.
272 else return "Numero non valido";
273 }
274 else {
275 return "Hai solo un robottino, non puoi cambiarlo con un altro!";
276 }
277 }
278
279 // Il comando "robotlist" visualizza una lista dei robot presenti.
280 else if (comando.equalsIgnoreCase("robotlist")) {
281 for (int i = 0; i<this.pdrA.size(); i++) {
282 System.out.println (i + ". " + this.nomeRobot.elementAt(i));
283 }
284 return "";
285 }
286
287 // Il comando "l", per la legenda, visualizza la lista dei comandi con relativa descrizione.
288 else if (comando.equalsIgnoreCase("l")) {
289 System.out.println ("Legenda comandi");
290 System.out.println ("");
291 System.out.println ("Comandi relativi agli arti");
292 System.out.println ("");
293 System.out.println ("LeftArmMove: cambia la posizione corrente del braccio sinistro del robot");
294 System.out.println ("RightArmMove: cambia la posizione corrente del braccio destro del robot");
295 System.out.println ("LeftLegMove: cambia la posizione corrente della gamba sinistra del robot");
296 System.out.println ("RightLegMove: cambia la posizione corrente della gamba destra del robot");
297 System.out.println ("LeftArmOn: se il braccio sinistro non è alzato, lo alza, altrimenti la posizione resta invariata");
298 System.out.println ("RightArmOn: se il braccio destro non è alzato, lo alza, altrimenti la posizione resta invariata");
299 System.out.println ("LeftLegOn: se la gamba sinistra non è alzata, la alza, altrimenti la posizione resta invariata");
300 System.out.println ("RightLegOn: se la gamba destra non è alzata, la alza, altrimenti la posizione resta invariata");
301 System.out.println ("LeftArmOff: se il braccio sinistro non è abbassato, lo abbassa, altrimenti la posizione resta invariata");
302 System.out.println ("RightArmOff: se il braccio destro non è abbassato, lo abbassa, altrimenti la posizione resta invariata");
303 System.out.println ("LeftLegOff: se la gamba sinistra non è abbassata, la abbassa, altrimenti la posizione resta invariata");
304 System.out.println ("RightLegOff: se la gamba destra non è abbassata, la abbassa, altrimenti la posizione resta invariata");
305 System.out.println ("");
306 System.out.println ("Altri comandi:");
307 System.out.println ("");
308 System.out.println ("NewRobot: aggiunge un nuovo robot");
309 System.out.println ("ChangeRobot: cambia il robot attuale");
310 System.out.println ("RobotList: visualizza la lista dei robot");
311 System.out.println ("Rename: rinomina il robottino");
312 System.out.println ("");
313 System.out.println ("Comandi a sorpresa:");
314 System.out.println ("");
315 System.out.println ("Exploud");
316 System.out.println ("Bier");
317 System.out.println ("Porky");
318 System.out.println ("xxx");
319 System.out.println ("dance");
320 System.out.println ("");
321 System.out.println ("Exit: esci dal programma");
322
323 return "";
324
325 }
326
327 // Se il comando è exit, non viene eseguita nessuna operazione (tranne restituire una stringa vuota)
328 // Perché il ciclo do-while nel metodo main, appena verificherà la condizione che il comando è
329 // uguale a "exit", terminerà da solo l'esecuzione del programma.
330 else if (comando.equalsIgnoreCase("exit")) return "";
331
332 // Se l'input non è tra i comandi prestabiliti, visualizza la seguente scritta sullo schermo.
333 else
334 System.out.println ("Comando non riconosciuto - digitare l per una legenda dei comandi disponibili");
335 System.out.println ("");
336
337 // Quì di seguito viene chiarito l'utilizzo di "contatore" e "sta[]".
338 // Per ogni varibile "statoParte" che ha valore true, contatore viene incrementato
339 // e l'elemento successivo dell'array "stat[]" assume il valore della stringa corrispondente.
340 for (int i = 0, j = 0; i < 4; i++) {
341 if (((PartiDelRobot)((Vector)pdrA.elementAt(this.robotIndex)).elementAt(i)).statoParte) {
342 contatore += 1;
343 stat[j++] = ((PartiDelRobot)((Vector)pdrA.elementAt(this.robotIndex)).elementAt(i)).stringaParte;
344 }
345 }
346
347 // La restituzione finale delle frasi, con uno switch che a seconda del valore di contatore
348 // restituisce una frase o l'altra.
349 switch (contatore) {
350 case 0:
351 Return = "Comunque il robottino " + nomeRobot.elementAt(this.robotIndex) + "non sta facendo niente";
352 break;
353 case 1:
354 Return = "Immagini che il robottino " + nomeRobot.elementAt(this.robotIndex) + "abbia " + stat[0] + ".";
355 break;
356 case 2:
357 Return = "Immagini che il robottino " + nomeRobot.elementAt(this.robotIndex) + "abbia " + stat[0] + " e " + stat[1] + ".";
358 break;
359 case 3:
360 Return = "Immagini che il robottino " + nomeRobot.elementAt(this.robotIndex) + "abbia " + stat[0] + ", " + stat[1] + " e " + stat[2] + ".";
361 break;
362 case 4:
363 Return = "Immagini che il robottino " + nomeRobot.elementAt(this.robotIndex) + "abbia " + stat[0] + ", " + stat[1] + ", " + stat[2] + " e " + stat[3] + ".";
364 break;
365 }
366 return Return;
367 }
368 //Fine del metodo Azioni
369}
diff --git a/robottino/all_versions/v2.2/src/RobottinoMain/Robottino.java b/robottino/all_versions/v2.2/src/RobottinoMain/Robottino.java
new file mode 100755
index 0000000..37e2dff
--- /dev/null
+++ b/robottino/all_versions/v2.2/src/RobottinoMain/Robottino.java
@@ -0,0 +1,115 @@
1// Robottino versione 2.2
2// Da questa versione illustrerò tutte le parti del programma con dei commenti come questo.
3
4// Dichiaro che questa classe fa parte del package RobottinoMain, che verrà poi importato
5// dalle classi che dovranno interagire con essa.
6package RobottinoMain;
7
8// Importo le librerie iniziali:
9// java.Util.Scanner per gestire gli input da tastiera.
10import java.util.Scanner;
11
12// java.util.Vector serve a gestire i vettori.
13// I vettori sono come array, ma hanno due differenze principali:
14// 1) la loro lunghezza può variare durante l'esecuzione del programma
15// (per questo li ho preferiti agli array);
16// 2) possono contenere soltanto oggetti, e non tipi primitivi.
17import java.util.Vector;
18
19// Questo è il package di utility da me creato per semplificare l'utilizzo degli elementi di altre classi
20// (Grafica, PartiDelRobot). Nelle versioni precedenti c'erano solo le classi Robottino
21// e PartiDelRobot, percui avevo deciso di far sì che una fosse derivata dall'altra.
22import RobottinoUtils.*;
23
24// Altro package da me definito.
25import RobottinoAzioni.*;
26
27// Dichiaro la classe.
28public class Robottino {
29
30 // Istanzio anche le classi Robottino e RobottinoAzioni, per poter avere accesso agli elementi non-statici.
31 static Robottino robottino = new Robottino();
32 static RobottinoAzioni robottinoazioni = new RobottinoAzioni();
33
34 // Istanzio la classe Thread per poter utilizzare il metodo sleep(int millisecondi)
35 // che in un metodo dell'interfaccia WindowListener, overridato nella classe Listener
36 // servirà a mettere il programma in uno stato di pausa.
37 // Sarebbe comunque possibile invocarlo, ma così sarà più facile da modificare in futuro.
38 public static Thread threadMain;
39
40 // Inizio del metodo main...
41 public static void main(String[] args) {
42
43 threadMain = new Thread(Thread.currentThread());
44
45 // Aggiungo gli elementi ai vettori.
46 // non potevo farlo prima, poiché al di fuori di un metodo è possibile soltanto
47 // dichiarare oggetti/variabili (e inizializzarli) o dichiarare un metodo
48 // e in RobottinoAzioni è presente solo il metodo Azioni che viene richiamato più volte.
49 RobottinoAzioni.pdrB.addElement(RobottinoAzioni.leftArm);
50 RobottinoAzioni.pdrB.addElement(RobottinoAzioni.rightArm);
51 RobottinoAzioni.pdrB.addElement(RobottinoAzioni.leftLeg);
52 RobottinoAzioni.pdrB.addElement(RobottinoAzioni.rightLeg);
53 RobottinoAzioni.pdrA.addElement(RobottinoAzioni.pdrB);
54 RobottinoAzioni.nomeRobot.addElement("");
55
56 // Istanzio la classe Scanner per poter ricevere input
57 Scanner sc = new Scanner(System.in);
58
59 // Dichiaro la variabile comando che memorizzerà l'input dell'utente
60 String comando;
61
62 // Crea la finestra tramite un'istanza della classe Grafica, del package RobottinoUtils
63 Grafica finestra = new Grafica();
64
65 // Output iniziale nellla shell
66 System.out.println ("**********************************************");
67 System.out.println ("**********************************************");
68 System.out.println ("*************Programma interattivo************");
69 System.out.println ("**********************************************");
70 System.out.println ("***Software realizzato da Sebastiano Tronto***");
71 System.out.println ("**********************************************");
72 System.out.println ("**********************************************");
73 System.out.println ("Questo programma simula un robot al quale ven-");
74 System.out.println ("gono assegnati ordini tramite comandi, simil-" );
75 System.out.println ("mente a quanto bisognava fare con i computer " );
76 System.out.println ("alcuni anni fa." );
77 System.out.println ("Dato che all'epoca i comandi che dovevano es-" );
78 System.out.println ("sere dati erano (e sono tutt'ora) in similin-" );
79 System.out.println ("glese, ho cercato di mantenerli tali." );
80 System.out.println ("Il programma non fa distinzioni tra lettere" );
81 System.out.println ("maiuscole o minuscole." );
82 System.out.println ("da questa versione (2.2) sono disponibili ef-" );
83 System.out.println ("fetti grafici minimali e totalmente inutili." );
84 System.out.println ("" );
85 System.out.println ("Digita un comando e premi INVIO" );
86 System.out.println ("l = legenda comandi" );
87 System.out.println ("");
88
89 // Inizio del ciclo do-while che fa in modo di ricevere input ed eseguire il metodo "Azioni"
90 // fintando che il comando non è exit.
91 do {
92
93 // Inizializza la stringa comando con il valore dell'input.
94 comando = sc.nextLine();
95 System.out.println ("");
96
97 // Esegue il metodo "Azioni" passando come argomenti il comando e i due vettori.
98 System.out.println (robottinoazioni.Azioni(comando, RobottinoAzioni.nomeRobot, RobottinoAzioni.pdrA));
99 System.out.println ("");
100 } while ( !(comando.equalsIgnoreCase("exit")) );
101
102 // Al termine del metodo main invoco il metodo "System.exit" per terminare completamente l'esecuzione del programma
103 System.exit(0);
104 }
105 // Fine del metodo main.
106}
107
108
109
110
111
112
113
114
115
diff --git a/robottino/all_versions/v2.2/src/RobottinoUtils/Grafica.java b/robottino/all_versions/v2.2/src/RobottinoUtils/Grafica.java
new file mode 100755
index 0000000..25574a3
--- /dev/null
+++ b/robottino/all_versions/v2.2/src/RobottinoUtils/Grafica.java
@@ -0,0 +1,60 @@
1// Dichiaro che questa classa farà parte del package RobottinoUtils, che verrà poi importato dalla classe Robottino.
2package RobottinoUtils;
3
4// Importo i package standard relativi al funzionamento delle finestre e della grafica in generale.
5import java.awt.*;
6
7// E i package RobottinoAzioni e RobottinoUtils da me definiti.
8import RobottinoAzioni.*;
9import RobottinoUtils.Listener;
10
11// La classe è una sottoclasse di Frame per poter sfruttare gli effetti grafici
12// ma implementa anche l'interfaccia WindowListener, necessaria per gestire gli eventi collegati alle finestre
13// (riduzione a icona, chiusura...); per questo devo successivamente ridefinire tutti i
14// metodi dell'interfaccia.
15public class Grafica extends Frame {
16
17 // Creo un'istanza della classe Listener che userò come listener per gli eventi.
18 public static Listener listener;
19
20 // Il costruttore senza argomenti.
21 public Grafica () {
22
23 // Il metodo "setBounds" posiziona e dimensiona la finestra.
24 setBounds (this.orizzontale, this.verticale, this.larghezza, this.altezza);
25
26 // "setTitle" per il titolo della finestra.
27 setTitle ("Robottino v2.2");
28
29 // "setVisible" per poterla visualizzare.
30 setVisible (true);
31
32 // E addWindowListener per l'ascoltatore (listener).
33 listener = new Listener();
34 addWindowListener (listener);
35 }
36
37 // Questo costruttore permette di modificare la posizione o la dimensione della finestra
38 // rispetto al predefinito.
39 public Grafica (int orizzontale, int verticale, int larghezza, int altezza) {
40 this.orizzontale =orizzontale;
41 this.verticale = verticale;
42 this.larghezza = larghezza;
43 this.altezza = altezza;
44 setBounds (this.orizzontale, this.verticale, this.larghezza, this.altezza);
45 setTitle ("Robottino v2.2");
46 setVisible (true);
47 listener = new Listener();
48 addWindowListener (listener);
49 }
50
51 // Le variabili pubbliche di classe per il metodo "setBounds".
52 public int orizzontale = 0;
53 public int verticale = 0;
54 public int larghezza = 500;
55 public int altezza = 500;
56}
57
58
59
60
diff --git a/robottino/all_versions/v2.2/src/RobottinoUtils/Listener.java b/robottino/all_versions/v2.2/src/RobottinoUtils/Listener.java
new file mode 100755
index 0000000..7ff51d6
--- /dev/null
+++ b/robottino/all_versions/v2.2/src/RobottinoUtils/Listener.java
@@ -0,0 +1,62 @@
1// Questa classe è il listener per gli eventi relativi alle finestre.
2// Dichiaro che farà parte del package RobottinoUtils
3package RobottinoUtils;
4
5// Importo i package necessari.
6import java.awt.event.*;
7import RobottinoMain.*;
8
9public class Listener implements WindowListener {
10
11 // Ridefinisco i metodi dell'interfaccia WindowListener:
12 // Metodo invocato quando la finestra è stata chiusa:
13 public void windowClosed (WindowEvent evt) {
14
15 // Invoco il metodo sleep(int millisecondi) per mettere il programma in uno stato di attesa
16 // di durata pari ai millisecondi indicati come argomento.
17 System.out.println("La finestra è stata chiusa, il programma terminarà fra 3 secondi");
18 try {
19 Robottino.threadMain.sleep(1000);
20 } catch (Exception e) { e.printStackTrace(); }
21 System.out.println("2");
22 try {
23 Robottino.threadMain.sleep(1000);
24 } catch (Exception e) { e.printStackTrace(); }
25 System.out.println("1");
26 try {
27 Robottino.threadMain.sleep(1000);
28 } catch (Exception e) { e.printStackTrace(); }
29 System.out.println("Programma terminato");
30 System.exit(0);
31 }
32
33 // Metodo invocato quando la finestra è in fase di chiusura:
34 public void windowClosing (WindowEvent evt) {
35 System.out.println ("Chiusura finestra in corso");
36 evt.getWindow().dispose();
37 }
38
39 // Metodo invocato quando una finestra viene ridotta a icona:
40 public void windowIconified (WindowEvent evt) {
41 System.out.println("La finestra è stata ridotta a icona");
42 }
43
44 // Metodo invocato quando una finestra ridotta a icona viene ingrandita:
45 public void windowDeiconified (WindowEvent evt) {
46 System.out.println("La finestra ridotta a icona è stata ingrandita");
47 }
48
49 // Metodo invocato quando una finestra viene aperta:
50 public void windowOpened (WindowEvent evt) {}
51
52 // Metodo invocato quando una finestra diventa attiva:
53 public void windowActivated (WindowEvent evt) {}
54
55 // Metodo invocato quando una finestra viene disattivata:
56 public void windowDeactivated (WindowEvent evt) {}
57}
58
59
60
61
62
diff --git a/robottino/all_versions/v2.2/src/RobottinoUtils/PartiDelRobot.java b/robottino/all_versions/v2.2/src/RobottinoUtils/PartiDelRobot.java
new file mode 100755
index 0000000..d6cf869
--- /dev/null
+++ b/robottino/all_versions/v2.2/src/RobottinoUtils/PartiDelRobot.java
@@ -0,0 +1,22 @@
1// Dichiaro che questa classa farà parte del package RobottinoUtils, che verrà poi importato dalla classe Robottino.
2package RobottinoUtils;
3
4// Dichiaro la classe.
5public class PartiDelRobot {
6
7 // Creo un costruttore senza argomenti.
8 // Se non lo facessi sarei obbligato a passare gli argomenti
9 // del secondo costruttore ogni volta che voglio istanziare la classe.
10 public PartiDelRobot() {}
11
12 // Il secondo costruttore riceve come argomenti un booleano che passerà il valore a "statoParte"
13 // e una stringa che passa il valore a "stringaParte".
14 public PartiDelRobot(boolean b, String s) {
15 this.stringaParte = s;
16 this.statoParte = b;
17 }
18
19 // Infine le due variabili pubbliche della classe.
20 public String stringaParte;
21 public boolean statoParte;
22}

Generated with cgit - Back to sebastiano.tronto.net