ancient-projects

My earliest programs (2006-2010)
git clone https://git.tronto.net/ancient-projects
Download | Log | Files | Refs | README

RobottinoAzioni.java (17886B)


      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