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