andbin ha scritto:
manu20 ha scritto:
il problema è che non riesco a far "muovere" il personaggio e credo che l'errore sia dovuto dagli indici che non hanno mai lo stesso valore nelle diverse funzioni (ho fatto 4 funzioni solo per i 4 movimenti possibili: su, giù,destra,sinistra)... quindi se ho capito bene qual'è il problema la mia domanda è: come posso far risultare sempre gli stessi indici anche in funzioni diverse contando che il return lo uso già per salvarmi il punteggio...
Dipende tutto da come hai "modellato" le cose .... mostra del codice possibilmente, almeno per far capire la tua logica.
scusa se non ho risposto subito comunque ecco tutto il codice del programma..
import javax.swing.*;
public class MappaAntica {
public static void main(String[] argV) {
//dichiarazione allocaszione e inizializzazione della matrice labirinto
String[][] labirinto = {
{"start ", "*", "*", "+","+"},
{"10","10","10","50","5"},
{"*","*","*","+","5"},
{"+","*","+","*","50"},
{"*","+","*","+","end"},
};
//dichiarazione variabili
int n;
int r;
int c;
int i;
int j;
int tesoro;
int punteggio;
String str;
int somma;
char opz;
int punti;
//inizializzazione variabili
n=5;
r = 0;
c = 0;
tesoro = 0;
punteggio = 0;
str = "";
i = 0;
j = 0;
somma = 0;
opz = ' ';
punti = 0;
// richiamo funzione formattazione
str=formattazione(labirinto, n );
//
opz=JOptionPane.showInputDialog("per muoverti nella mappa useremo i comandi 'wasd'\n" +
"w- per andare sopra.\n" +
"a- per andare a sinistra.\n" +
"s- per andare indietro.\n" +
"d- per andare a destra.\n" +
"ecco a te la mappa:\n" + str).charAt(0);
while(!giocofinito(labirinto, i, j)) {
switch(opz) {
case 'w':
//richiamo la funzione case w per andae verso l'alto.
punti=caseW(labirinto, i, j);
somma+=punti;
System.out.println("ti trovi nella posizione " + (i+1) + " " + (j+1));
break;
case 'a':
//richiamo la funzione caseA per andare a sinistra
punti=caseA(labirinto, i, j);
somma+=punti;
System.out.println("ti trovi nella posizione " + (i+1) + " " + (j+1));
break;
case 'd':
//richiamo la funzione caseD per andare a destra
punti=caseD(labirinto, n, i, j);
somma+=punti;
System.out.println("ti trovi nella posizione " + (i+1) + " " + (j+1) );
break;
case 's':
//richiamo la funzione caseS per adnare verso il basso.
punti=caseS(labirinto, n,i, j);
somma+=punti;
System.out.println("ti trovi nella posizione " + (i+1) + " " + (j+1) );
break;
default:
JOptionPane.showMessageDialog(null,"hai digitato male, riprova!");
}
opz=JOptionPane.showInputDialog("per muoverti nella mappa useremo i comandi 'wasd'\n" +
"w- per andare sopra.\n" +
"a- per andare a sinistra.\n" +
"s- per andare indietro.\n" +
"d- per andare a destra.\n" +
"ecco a te la mappa:\n" + str).charAt(0);
}
JOptionPane.showMessageDialog(null,"hai totalizzato " + punteggio + " punti, bravo!");
}
// funzione formattazione
private static String formattazione(String[][] mat, int dim) {
//dichiarazione variabili
String str;
int i;
int j;
//inizializzazione variabili
str="";
for(i = 0; i < dim; i++) {
for( j = 0; j < dim; j++) {
str += String.format("| %2s ", mat[i][j]);
}
str += " |\n";
str += "+-----------------------------+\n";
}
return str;
}
//funzione caseW
private static int caseW(String[][] matrice, int i, int j ) {
//dichiarazione delle variabili
int punteggio;
//inizializzazione dell variabili
punteggio = 0;
//controllo per vedere se si e' agli argini
if(i-1 >= 0) {
switch(matrice[i-1][j]) {
case "*":
i--;
break;
case "+":
JOptionPane.showMessageDialog(null,"Topolino e' andato su una trappola mortale! riprova da capo!");
i = 0;
j = 0;
break;
case "5":
i--;
punteggio+=5;
break;
case "10":
i--;
punteggio += 10;
break;
case "50":
i--;
punteggio += 50;
break;
case "end": JOptionPane.showMessageDialog(null,"WOW! Hai raggiunto la fine, complimenti!");
}
}
return punteggio;
}
//funzione caseA
private static int caseA(String[][] matrice, int i, int j) {
//dichiarazione delle variabili
int punteggio;
//inizializzazione dell variabili
punteggio = 0;
//controllo per vedere se si e' ai margini
if(j-1 >= 0) {
switch(matrice[i][j-1]) {
case "*":
j--;
break;
case "+":
JOptionPane.showMessageDialog(null,"Topolino e' andato su una trappola mortale! riprova da capo!");
i = 0;
j = 0;
break;
case "5":
j--;
punteggio+=5;
break;
case "10":
j--;
punteggio += 10;
break;
case "50":
j--;
punteggio += 50;
break;
case "end": JOptionPane.showMessageDialog(null,"WOW! Hai raggiunto la fine, complimenti!");
}
}
return punteggio;
}
//funzione caseD
private static int caseD(String[][] matrice, int dim, int i, int j) {
//dichiarazione delle variabili
int punteggio;
//inizializzazione dell variabili
punteggio = 0;
//controllo per vedere se si e' ai margini
if(j+1 < dim) {
switch(matrice[i][j+1]) {
case "*":
j++;
break;
case "+":
JOptionPane.showMessageDialog(null,"Topolino e' andato su una trappola mortale! riprova da capo!");
i = 0;
j = 0;
break;
case "5":
j++;
punteggio+=5;
break;
case "10":
j++;
punteggio += 10;
break;
case "50":
j++;
punteggio += 50;
break;
case "end": JOptionPane.showMessageDialog(null,"WOW! Hai raggiunto la fine, complimenti!");
}
}
return punteggio;
}
//funzione caseS
private static int caseS(String[][] matrice, int dim, int i, int j) {
//dichiarazione delle variabili
int punteggio;
//inizializzazione dell variabili
punteggio = 0;
//controllo per vedere se si e' ai margini
if(i+1 < dim) {
switch(matrice[i+1][j]) {
case "*":
i++;
break;
case "+":
JOptionPane.showMessageDialog(null,"Topolino e' andato su una trappola mortale! riprova da capo!");
i = 0;
j = 0;
break;
case "5":
i++;
punteggio+=5;
break;
case "10":
i++;
punteggio += 10;
break;
case "50":
i++;
punteggio += 50;
break;
case "end": JOptionPane.showMessageDialog(null,"WOW! Hai raggiunto la fine, complimenti!");
}
}
return punteggio;
}
private static boolean giocofinito(String[][] mat, int i, int j) {
//dichiarazione variabili
boolean fine;
//inizializzazione variabili
fine=false;
//controllo
if(mat[i][j].equals("end")) {
fine=true;
return fine;
} else {
return fine;
}
}
}
credo ti interessi solo la parte delle funzioni comunque l ho messo tutto magari mi puoi dare qualche chicca