Hallo,
zur Zeit programmieren wir in der Schule ein kleines Spiel.
Wir haben ein Array und müssen ein kleines Männchen dazu bringen, durch dieses Array zu "laufen" mit hilfe der Pfeiltasten.
Ich habe es schon geschaft, dass mein Männchen nach links oder nach oben läuft.
Doch sobald ich nach rechts oder unten will, wird mir ein Fehler angezeigt:
"Array out of Index."
Ich verstehe nicht wieso und wo das Problem ist, da ich es ja genau gleich mache wie beim nach links und nach oben laufen.
Hier mal der Quelltext:
Der InpStream.getKeyCode() besorgt mir einfach nur den ASCII Code einer Taste, damit ich auch mit z.B. den Pfeiltasten arbeiten kann.
Das Feld ist 40 auf 40 groß.
Hier ist aber noch der Code dafür:
Cookie007
zur Zeit programmieren wir in der Schule ein kleines Spiel.
Wir haben ein Array und müssen ein kleines Männchen dazu bringen, durch dieses Array zu "laufen" mit hilfe der Pfeiltasten.
Ich habe es schon geschaft, dass mein Männchen nach links oder nach oben läuft.
Doch sobald ich nach rechts oder unten will, wird mir ein Fehler angezeigt:
"Array out of Index."
Ich verstehe nicht wieso und wo das Problem ist, da ich es ja genau gleich mache wie beim nach links und nach oben laufen.
Hier mal der Quelltext:
Java:
public class zimmer {
static int s; // Steuerung für das Maenchen, zum Speichern des TastenCodes
static int y=0; // Zum Suchen im Feld
static int x=0; // Zum Suchen im Feld
public static void go(){
for (;;){
speicher.zimmer(); // Methode zum Zimmerplan zeichnen lassen
s = InpStream.getKeyCode(); // Nach KeyCode einer Taste fragen und in "s" speichern
/* Tastencodes:
37 = Pfeiltaste nach links.
38 = Pfeiltaste nach oben.
39 = Pfeiltaste nach rechts.
40 = Pfeiltaste nach unten.
*/
// speicher.M = Position der Spielfigur
// M steht für "Maennchen"
if ( s==37 ){ // Fuer Pfeiltaste nach links
for ( y=0 ; y<40 ; y++ ){
for ( x=0 ; x<40 ; x++ ){
if ( speicher.M==speicher.zimmer[y][x] ){ // Sucht die Stelle von M im Feld
speicher.zimmer[y][x-1]=speicher.M; // Schreibt M eins nach links
speicher.zimmer[y][x]=speicher.l; // Schreibt auf das alte Feld ein Leerzeichen
}
}
}
}
if ( s==38 ){ // Fuer Pfeiltaste nach oben
for ( y=0 ; y<40 ; y++ ){
for ( x=0 ; x<40 ; x++ ){
if ( speicher.M==speicher.zimmer[y][x] ){ // Sucht die Stelle von M im Feld
speicher.zimmer[y-1][x]=speicher.M; // Schreibt M eins nach oben
speicher.zimmer[y][x]=speicher.l; // Schreibt auf das alte Feld ein Leerzeichen
}
}
}
}
if ( s==39 ){ // Fuer Pfeiltaste nach rechts
for ( y=0 ; y<40 ; y++ ){
for ( x=0 ; x<40 ; x++ ){
if ( speicher.M==speicher.zimmer[y][x] ){ // Sucht die Stelle von M im Feld
speicher.zimmer[y][x+1]=speicher.M; // Schreibt M eins nach rechts
speicher.zimmer[y][x]=speicher.l; // Schreibt auf das alte Feld ein Leerzeichen
}
}
}
}
if ( s==40 ){ // Fuer Pfeiltaste nach unten
for ( y=0 ; y<40 ; y++ ){
for ( x=0 ; x<40 ; x++ ){
if ( speicher.M==speicher.zimmer[y][x] ){ // Sucht die Stelle von M im Feld
speicher.zimmer[y+1][x]=speicher.M; // Schreibt M eins nach unten
speicher.zimmer[y][x]=speicher.l; // Schreibt auf das alte Feld ein Leerzeichen
}
}
}
}
}
}
}
Der InpStream.getKeyCode() besorgt mir einfach nur den ASCII Code einer Taste, damit ich auch mit z.B. den Pfeiltasten arbeiten kann.
Das Feld ist 40 auf 40 groß.
Hier ist aber noch der Code dafür:
Java:
public class speicher {
static String w="###"; // Wand
static String l=" "; // Leerraum
static String t=" ()"; // Tuer
static String M="~~~"; // Maenchen zum rum laufen
// Zimmer ist 40 auf 40.
static String zimmer[][]={
{ w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w },
{ w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,w,w,w,w,w,w,w,w,w,w,w,w,w,l,w,w,w,w,w,w,w,w,w,w,w,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,w,w,w,w,w,w,w,w,w,w,w,w,w,l,w,w,w,w,w,w,w,w,w,w,w,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,w,w,w,w,w,w,w,l,w,w,w,w,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,w,w,w,w,w,w,w,l,w,w,w,w,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,M,t },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,t },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,l,l,l,l,l,l,l,l,w },
{ w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w },
{ w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w },
};
// Funktion zum Zimmer zeichnen lassen.
// Aufrufen mit "speicher.zimmer();"
public static void zimmer(){
for (int y=0; y<40; y++){
for (int x=0; x<40; x++){
System.out.print(zimmer[y][x]);
}
System.out.println( );
}
}
}
Cookie007