[Risolto]Avventura testuale, primo programma

di il
1 risposte

[Risolto]Avventura testuale, primo programma

Ciao a tutti,
ho iniziato da poco a studiare il Java. Il libro che sto usando spiega bene i concetti più che la pratica in sè, e consiglia di provare da soli a progettare un programma e scrivere un codice. Ho pensato di fare una piccola avventura testuale. Sono riuscito a fare senza errori il primo passo, cioè quello di avere delle stanze e di potermi muovere tra esse. Ho costruito due classi per farlo, Stanza e Gioco. Ne ho aggiunta una terza Porta, per avere delle uscite bloccate, ma qui ho avuto i primi errori. Chiedo a voi come mai.
import java.util.Scanner;

public class Stanza {
	
	private String dir;
	private Scanner s;
	private Stanza[] usciteStanza;
	private String Descrizione;
	private Boolean[] usciteChiuse;
	private Porta porta;
	private String[] porteChiuse;
	private Boolean statoPorta;
	
	//Le stanze adiacenti possibili
	public void setUscite(Stanza uscite[]){
		this.usciteStanza = uscite;
	}
	
	public Stanza[] getUscite(){
		return usciteStanza;
	}
	//Richiesta di una direzione in input
	public Scanner getDirezione(){
		System.out.println("Dove vorresti muoverti?");
		Scanner s = new Scanner(System.in);
		return s;
	}
	
	//Controllo la direzione inserita.
	public void miMuovo(Scanner s){
	dir = s.nextLine();
	String[] comeSiApre = this.getPorteChiuse();
	switch(dir){
		case "n":
			if (usciteChiuse[0]==true){
				statoPorta = porta.Aprimi(comeSiApre[0]);
				}
			Stanza Stanza1 = usciteStanza[0];
			Stanza1.getUscite();
			Stanza1.getDescrizione();
			s = Stanza1.getDirezione();
			Stanza1.miMuovo(s);
			break;
		case "s":
			Stanza Stanza2 = usciteStanza[1];
			Stanza2.getUscite();
			Stanza2.getDescrizione();
			s = Stanza2.getDirezione();
			Stanza2.miMuovo(s);
			break;
		case "o":
			Stanza Stanza3 = usciteStanza[2];
			Stanza3.getUscite();
			Stanza3.getDescrizione();
			s = Stanza3.getDirezione();
			Stanza3.miMuovo(s);
			break;
		case "e":
			Stanza Stanza4 = usciteStanza[3];
			Stanza4.getUscite();
			Stanza4.getDescrizione();
			s = Stanza4.getDirezione();
			Stanza4.miMuovo(s);
			break;
		}
	}
	//La descrizione della stanza.
	public String setDescrizione(String Descrizione){
		return this.Descrizione = Descrizione;
	}
	public void getDescrizione(){
		System.out.println(Descrizione);
	}

	public Boolean[] getUsciteChiuse() {
		return usciteChiuse;
	}

	public void setUsciteChiuse(Boolean[] usciteChiuse) {
		this.usciteChiuse = usciteChiuse;
	}

	public String[] getPorteChiuse() {
		return porteChiuse;
	}

	public void setPorteChiuse(String[] porteChiuse) {
		this.porteChiuse = porteChiuse;
	}

}

import java.util.Scanner;
public class Gioco {
public static void main(String[] args){
	Stanza Terreno1 = new Stanza();
	Stanza Terreno2 = new Stanza();
	Stanza Terreno3 = new Stanza();
	Stanza[] Terreno1Uscite = {Terreno2,Terreno3}; //Stanze adiacenti alla stanza
	Stanza[] Terreno2Uscite = {Terreno3,Terreno1};
	Stanza[] Terreno3Uscite = {Terreno1,Terreno2};
	Terreno1.setUscite(Terreno1Uscite);
	Terreno2.setUscite(Terreno2Uscite);
	Terreno3.setUscite(Terreno3Uscite);
	Terreno1.setDescrizione("Bevenuto nel Terreno1"); 
	Terreno2.setDescrizione("Bevenuto nel Terreno2");
	Terreno3.setDescrizione("Benvenuto nel Terreno3");
	Terreno1.getDescrizione();
	String[] Terreno1PorteChiuse = {"codice","codice"}; //Come si aprono le porte nelle varie direzioni
	Terreno1.setPorteChiuse(Terreno1PorteChiuse);
	Boolean[] Terreno1UsciteChiuse = {true,true}; //Quali direzioni sono chiuse
	Terreno1.setUsciteChiuse(Terreno1UsciteChiuse); 
	Scanner dir = Terreno1.getDirezione(); //prendo la prima direzione
	Terreno1.miMuovo(dir); 
}
}

import java.util.Scanner;

public class Porta {
	
	private String s;
	
	
	public Boolean Aprimi(String s){
		System.out.println("La porta è chiusa");
		switch(s){
		case "codice":
			System.out.println("Serve un codice per aprirla!");
			Scanner stringaInserita = this.getInput();
			String codiceInserito = stringaInserita.nextLine();
			if (codiceInserito=="1234"){
				return true;
			}
			
		}
		return false;
	}


	private Scanner getInput(){
		System.out.println("Dimmi come");
		Scanner inputInserito = new Scanner(System.in);
		return inputInserito;
	}
}
E restituisce questo messaggio di errore:
Exception in thread "main" java.lang.NullPointerException
at Stanza.miMuovo(Stanza.java:35)
at Stanza.miMuovo(Stanza.java:55)
at Stanza.miMuovo(Stanza.java:55)
at Gioco.main(Gioco.java:22)
Quando inserisco come input n.

Chi mi può aiutare?
Devi accedere o registrarti per scrivere nel forum
1 risposte