aboutsummaryrefslogtreecommitdiff
path: root/robottino/all_versions/v2.2/src/RobottinoAzioni
diff options
context:
space:
mode:
Diffstat (limited to 'robottino/all_versions/v2.2/src/RobottinoAzioni')
-rwxr-xr-xrobottino/all_versions/v2.2/src/RobottinoAzioni/RobottinoAzioni.java369
1 files changed, 369 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}

Generated with cgit - Back to sebastiano.tronto.net