From 7167b4341ef290d56fb96e2af10883a4b925d83b Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Thu, 26 Mar 2026 19:27:18 +0100 Subject: I found my old code! --- .../v2.3/src/RobottinoAzioni/RobottinoAzioni.java | 397 +++++++++++++++++++++ .../v2.3/src/RobottinoMain/Robottino.java | 83 +++++ .../v2.3/src/RobottinoUtils/Grafica.java | 210 +++++++++++ .../v2.3/src/RobottinoUtils/Listener.java | 72 ++++ .../v2.3/src/RobottinoUtils/PartiDelRobot.java | 22 ++ 5 files changed, 784 insertions(+) create mode 100755 robottino/all_versions/v2.3/src/RobottinoAzioni/RobottinoAzioni.java create mode 100755 robottino/all_versions/v2.3/src/RobottinoMain/Robottino.java create mode 100755 robottino/all_versions/v2.3/src/RobottinoUtils/Grafica.java create mode 100755 robottino/all_versions/v2.3/src/RobottinoUtils/Listener.java create mode 100755 robottino/all_versions/v2.3/src/RobottinoUtils/PartiDelRobot.java (limited to 'robottino/all_versions/v2.3/src') 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 @@ +// Dichiaro che questa classa farà parte del package RobottinoAzioni, che verrà poi importato dalle classi Listener e Grafica. +package RobottinoAzioni; + +// Anche qui impoerto i package necessari. +// java.util.Scanner gestisce gli input da tastiera +import java.util.Scanner; + +// java.util.Vector +import java.util.Vector; + +// Package definito da me. +import RobottinoUtils.*; + +public class RobottinoAzioni { + + // Creo gli oggetti statici che riempiranno il vettore pdrA: + // pdrA è un vettore multidimensionale che a sua volta contiene vettori + // (il primo si chiama pdrB, i successivi non avranno nome) che coontengono + // 4 istanze di PartiDelRobot, cioè i 4 arti del robot. + // Poi creo un vettore che conterrà i nomi dei robot. + // Creo il vettore principale... + public static Vector pdrA = new Vector(1); + + // ...e il "sottovettore" come istanze della classe Vector + public static Vector pdrB = new Vector(4); + + // Creo le quattro istanze di PartidelRobot utilizzando l'apposito costruttore + // passo a tutte una stringa e un valore boleano che determina lo stato + // (alzato/a se true, abbassato/a se false). + public static PartiDelRobot leftArm = new PartiDelRobot(false, "il braccio sinistro alzato"); + public static PartiDelRobot rightArm = new PartiDelRobot(false, "il braccio destro alzato"); + public static PartiDelRobot leftLeg = new PartiDelRobot(false, "la gamba sinistra alzata"); + public static PartiDelRobot rightLeg = new PartiDelRobot(false, "la gamba destra alzata"); + + // Il vettore nomeRobot per i nomi + // il vettore può contenere stringhe, poichè non sono tipi primitivi ma oggetti della classe String + public static Vector nomeRobot = new Vector(1); + + // La variabile robotIndex serve a tenere in memoria su quale robot si sta operando: + // in seguito verrà usata quando l'utente deciderà di creare più di un robot + // e poi di dare comandi a uno o all'altro/i. + int robotIndex = 0; + + // Dichiarazione del metodo Azioni. + public String Azioni(String comando, Vector nomeRobot, Vector pdrA) { + + // Crea un'istanza della classe Scanner per + // ricevere gli input nel caso in cui debba essere dato il nome + // al robottino o scelto un robottino da una lista. + Scanner sc2 = new Scanner(System.in); + + // La variabile contatore memorizza il numero di variabili "PartiDelRobot.statoParte" + // che hanno valore true, ossia il numero di arti alzati di un robottino + // in modo da poter scegliere la frase giusta da dare come output + // al posto dell'immagine del robottino con tali arti alzati. + int contatore = 0; + + // Questo array ha il compito di memorizzare le stringhe corrispondenti agli alzati + // per motivi simili a quelli della variabile "contatore". + String stat[] = {"", "", "", ""}; + + // La stringa Return verrà successivamente modificata e restituita in alcuni casi. + String Return = "Errore - si consiglia di picchiare il programmatore"; + + // Per far si che il programma non distingua tra lettere maiuscole o minuscole per quanto riguardo gli input + // è stato usato il metodo "equalsIgnoreCase" della classe String. + // I quattro casi successivi cambiano il valore della varibalie "statoParte" relativa all'arto + // Che deve mouversi (quindi cambiare la sua posizione). + if (comando.equalsIgnoreCase("leftarmmove")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(0)).statoParte = + !((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(0)).statoParte; + + else if (comando.equalsIgnoreCase("rightarmmove")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(1)).statoParte = + !((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(1)).statoParte; + + else if (comando.equalsIgnoreCase("leftlegmove")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(2)).statoParte = + !((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(2)).statoParte; + + else if (comando.equalsIgnoreCase("rightlegmove")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(3)).statoParte = + !((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(3)).statoParte; + + // I casi successivi modificano il valore della varibile analogamente ai 4 precedenti. + else if (comando.equalsIgnoreCase("leftarmon")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(0)).statoParte = true; + + else if (comando.equalsIgnoreCase("rightarmon")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(1)).statoParte = true; + + else if (comando.equalsIgnoreCase("leftlegon")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(2)).statoParte = true; + + else if (comando.equalsIgnoreCase("rightlegon")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(3)).statoParte = true; + + else if (comando.equalsIgnoreCase("leftarmoff")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(0)).statoParte = false; + + else if (comando.equalsIgnoreCase("rightarmoff")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(1)).statoParte = false; + + else if (comando.equalsIgnoreCase("leftlegoff")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(2)).statoParte = false; + + else if (comando.equalsIgnoreCase("rightlegoff")) + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(3)).statoParte = false; + + // Il caso successi si verica quando il comando è "exploud". + else if (comando.equalsIgnoreCase("exploud")) { + + // Scrive sullo schermo la seguente frase, che comprende il nome del robottino che non è ancora stato fatto eliminare + System.out.println + ("Che atroce! Hai fatto esplodere il robottino " + nomeRobot.elementAt(this.robotIndex) + "! Aspetta che te ne faccio un altro"); + System.out.println ("..."); + + // Con un ciclo for rendo false tutte le variabili "statoParte" per far sì che il robottino sia come nuovo. + for (int i = 0; i < 4; i++) { + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(i)).statoParte = false; + } + + // E azzero anche il nome del robot + this.nomeRobot.setElementAt("", this.robotIndex); + + return "Fatto, puoi continuare a giocare"; + } + + // Caso per il comando "bier". + // La reazione a questo comando è un semplice output quasi totalmente scorrelato al robottino + // se non per il fatto che appare il nome del robottino attuale. + else if (comando.equalsIgnoreCase("bier")) { + System.out.println ("Il robottino " + nomeRobot.elementAt(this.robotIndex) + "sta trangugiando una birra..."); + System.out.println ("Buurrrrrrrrp!"); + return "La birra analcolica fa schifo!"; + } + + // Per il comando "rename", rinomina. + else if (comando.equalsIgnoreCase("rename")) { + + System.out.println ("Con questo comando quoi cambiare il nome del robottino " + nomeRobot.elementAt(this.robotIndex)); + System.out.println ("Digita il nuovo nome e premi INVIO per coninuare"); + + // Cambia il nome del robottino attuale con quello dell'input. + this.nomeRobot.setElementAt(sc2.nextLine(), this.robotIndex); + + // Se il nome non è vuoto, aggiunge un carattere di spazio per migliorare la visualizzazione nelle frasi di output. + if (!(((String)nomeRobot.elementAt(this.robotIndex)).equalsIgnoreCase(""))) + this.nomeRobot.setElementAt(this.nomeRobot.elementAt(this.robotIndex) + " ", this.robotIndex); + + // Semplice output con il nuovo nome. + return "Ora il robottino si chiama " + nomeRobot.elementAt(this.robotIndex); + } + + // Per il comando "porky". + // Ancora meno che per "bier". + else if (comando.equalsIgnoreCase("porky")) { + System.out.println ("Porky è un grande"); + System.out.println ("Per maggiori informazioni visita il sito"); + return "http://kakati.forumfree.net/"; + } + + // Il comando "xxx" ha funzioni analoghe a bier. + else if (comando.equalsIgnoreCase("xxx")) { + System.out.println ("Il robottino " + nomeRobot.elementAt(this.robotIndex) + "ha incontrato una bella robottina..."); + return "*Censura*"; + } + + // "dance" setta tutte le variabili "statoParte" a false... + else if (comando.equalsIgnoreCase("dance")) { + + System.out.println ("Immagini che il robottino " + nomeRobot.elementAt(this.robotIndex) + " stia ballando..."); + System.out.println ("Il robottino ha smesso di ballare"); + + //...con questo ciclo for + for (int i = 0; i < 4; i++) { + ((PartiDelRobot)((Vector)this.pdrA.elementAt(this.robotIndex)).elementAt(i)).statoParte = false; + } + + return "Il robottino " + nomeRobot.elementAt(this.robotIndex) + "si è fermato ed è tornato nella posizione originale"; + + // Per il comando "newrobot", che crea un nuovo robottino. + } + else if (comando.equalsIgnoreCase("newrobot")) { + + // Aggiunge un elemento a "pdrA" con il metodo "addElement", della classe Vector. + // È stata necessaria la dicitura this. per modificare realmente il vettore. + // Se non lo avessi fatto non sarebbe successo, in quanto i metodi operano + // su i valori e non sulle variabili/oggetti. + this.pdrA.addElement(pdrB); + + // Aggiungo le 4 parti del robot. + // Forse avete già notato (ma quì sono più evidenti) alcuni cast che ho fatto: + // sono per far si che il compilatore capisca che il metodo viene invocato da un oggetto + // della classe vector, che senza cast considererebbe della classe Object. + ((Vector)(this.pdrA.elementAt(pdrA.size()-1))).addElement (leftArm); + ((Vector)(this.pdrA.elementAt(pdrA.size()-1))).addElement (rightArm); + ((Vector)(this.pdrA.elementAt(pdrA.size()-1))).addElement (leftLeg); + ((Vector)(this.pdrA.elementAt(pdrA.size()-1))).addElement (rightLeg); + + // Semplice output con richiesta di nome per il nuovo robottino. + System.out.println ("È stato creato un nuovo robot. Vuoi dare un nome al nuovo robot?"); + System.out.println ("Inserisci il nuovo nome e premi INVIO oppure lascia vuoto e premi INVIO"); + + String newName = sc2.nextLine(); + + if (!(((String)nomeRobot.elementAt(this.robotIndex)).equalsIgnoreCase(""))) + this.nomeRobot.setElementAt(this.nomeRobot.elementAt(this.robotIndex) + " ", this.robotIndex); + + this.nomeRobot.addElement(newName); + + return "È stato creato il robottino " + newName; + } + + // Il comando "deleterobot", per eliminare un robot. + else if (comando.equalsIgnoreCase("deleterobot")) { + + // Se c'è più di un robot esegue l'eliminazione. + if (pdrA.size()>1) { + System.out.println ("Quale robottino vuoi eliminare?"); + System.out.println (""); + + // Con un ciclo for scrive i nomi di tutti i robot preceduti da un numero in sequenza. + // Il numero è il corrispondente del loro indice di vettore. + for (int i = 0; i1) { + System.out.println ("A quale robottino vuoi dare i comandi?"); + System.out.println (""); + for (int i = 0; i