Wie funktioniert das? > Schiffe versenken

  • Themenstarter Themenstarter Gelöschtes Mitglied 53953
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 53953

Gast
Hallo,
ich möchte, dass sich das Programm nach jeder Eingabe merkt, welche Felder bereits eingetippt wurden. Beispiel: User tippt auf das Feld 2 und es ist ein Treffer - dann würde das folgendermaßen aussehen:
[ ] [ x ][ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
Nun will ich, dass wenn der Nutzer "3" eintippt, das Programm weiß, was an zweiter Stelle steht,
also: [ ] [ x ][ x ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
und nicht [ ] [ ][ x ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
Ich hoffe ihr versteht was ich meine ... 😕

Hier ist der Code (es funktioniert alles wie es soll, bis auf das oben genannte. Ach und es kann sein, dass ich es umständlich geschrieben habe, bin ja noch ein Anfänger 😳):

Code:
import java.util.*;

public class Schiffeversenken {
 
  public static void main(String[] args) {
    System.out.println("Schiffeversenken - Mini");
 
    Scanner scr = new Scanner(System.in);
 
    int pos1=0;
    int pos2=0;
    int pos3=0;
    int win;
 
    //Position des Schiffes festlegen:
 
    int p1 = (int) (Math.random()*8+1);
    int p2 = p1+1;
    int p3 = p1+2;
    int test;
 
    //Eingabe + Anzeige:
 
    String[] felder = new String[11];
 
    do {
      System.out.println();
      System.out.print("Position zwischen 1/10: ");
      int pUser = scr.nextInt();
 
      if (pUser == p1) {
        System.out.println();
        System.out.println("Treffer auf Feld "+pUser+"!");
        System.out.println();
        pos1=1;
        for (int x=1;x<felder.length ;x++ ) {
          if (pUser == x && pos1==1) {
            System.out.print("[ x ] ");
          }
          else {
            System.out.print("[   ] ");
          }
        }
      }
      else if (pUser == p2) {
        System.out.println();
        System.out.println("Treffer auf Feld "+pUser+"!");
        System.out.println();
        pos2=1;
        for (int x=1;x<felder.length ;x++ ) {
          if (pUser == x) {
            System.out.print("[ x ] ");
          }
          else {
            System.out.print("[   ] ");
          }
        }
      }
        else if (pUser == p3) {
        System.out.println();
        System.out.println("Treffer auf Feld "+pUser+"!");
        System.out.println();
        pos3=1;
        for (int x=1;x<felder.length ;x++ ) {
          if (pUser == x) {
            System.out.print("[ x ] ");
          }
          else {
            System.out.print("[   ] ");
          }
        }
      }
        else {
        System.out.println();
        System.out.println("Leider kein Treffer auf Feld "+pUser+"!");
        System.out.println();
        for (int x=1;x<felder.length ;x++ ) {
          if (pUser == x) {
            System.out.print("[ - ] ");
          }
          else {
            System.out.print("[   ] ");
          }
        }
      }
   
      win = pos1+pos2+pos3;
   
      System.out.println();
      System.out.println();
   
      if (win==3) {
        System.out.println("Gewonnen!");
        System.out.println();
      }
    } while (win==0 || win==1 || win==2);
  }
}
 
Ohne dein Code angeschaut zu haben solltest du dich mal mit Arrays beschäftigen. (eventuell auch 2D Arrays wenn dein Feld aus mehr als einer Zeile besteht.)
Jeder Spieler besitzt ein 2D-Array als Feld, auf dem seine Schiffe liegen. Alle anderen Felder beinhalten bspw. ein Leerzeichen [ ].

Wenn ein Spieler nun eine Eingabe macht wird kontrolliert ob auf diesem Feld ein Schiff liegt. Wenn ja wird an die Position im Array feld1[x][y] ein X geschrieben und wenn nicht bleibt es leer. Also [ ].

Gruß
Robert
 
Du hast zwar ein String[] felder, aber darin speicherst du nichts! Du musst dem Array schon was zuweisen damit du dir etwas merken kannst 😉
Also anstatt auf der Konsole etwas auszugeben, weißt du deine Strings ("[ x ]", "[ ]" oder "[ - ]") dem Array zu.
Nach dem if/else Konstrukt gibst du das Array mittels Schleife auf der Konsole aus.

Noch ein Hinweis: Bei deinen for-Schleife beginnst du mit "int x = 1" ... Arrays fangen bei Index 0 an!
 
Habe den Code jetzt soweit abgeändert, dass die eingegebenen Felder gespeichert werden. Aber jetzt gibt es mir "null" aus, da ich nicht genau weiß, wie ich die leeren Kästchen ausgeben lassen kann... kann mir da jemand helfen?

Code:
Code:
import java.util.*;

public class schiffe {
 
  public static void main(String[] args) {
    System.out.println("Schiffeversenken - Mini");
   
    Scanner scr = new Scanner(System.in);
   
    int pos1=0;
    int pos2=0;
    int pos3=0;
    int win;
 
    //Position des Schiffes festlegen:
   
    int p1 = (int) (Math.random()*8+1);
    int p2 = p1+1;
    int p3 = p1+2;
    int test;
   
    //Eingabe + Anzeige:
   
    String[] felder = new String[10];
   
    do {
      System.out.println();
      System.out.print("Position zwischen 1/10: ");
      int pUser = scr.nextInt()-1;
   
      for (int x=0;x<felder.length ;x++ ) {
        if (pUser==p1) {
          felder[p1]="[x]";
          pos1=1;
        }
        else if (pUser==p2) {
          felder[p2]="[x]";
          pos2=1;
        }
        else if (pUser==p3) {
          felder[p3]="[x]";
          pos3=1;
        } 
        else if (pUser>p3 || pUser<p1) {
          felder[pUser]="[-]";
        } 
        else {
          felder[x]="[]";
        } 
      }
       
      for (int x=0;x<felder.length ;x++ ) {
        System.out.print(felder[x]);
      } 
     
      System.out.println();
      System.out.println();
      win = pos1+pos2+pos3;
      if (win==3) {
        System.out.println("Gewonnen!");
        System.out.println();
      } 
    } while (win==0 || win==1 || win==2); 
  }
}
 
Dann verwende halt "LEER" statt "".
Oder noch besser "[ ]".
Ich weiß nicht ob ichs falsch platziere... verstehe es nicht ganz:
Code:
import java.util.*;

public class schiffe {
 
  public static void main(String[] args) {
    System.out.println("Schiffeversenken - Mini");
   
    Scanner scr = new Scanner(System.in);
   
    int pos1=0;
    int pos2=0;
    int pos3=0;
    int win;
 
    //Position des Schiffes festlegen:
   
    int p1 = (int) (Math.random()*8+1);
    int p2 = p1+1;
    int p3 = p1+2;
    int test;
   
    //Eingabe + Anzeige:
   
    String[] felder = new String[10];;
    do {
      System.out.println();
      System.out.print("Position zwischen 1/10: ");
      int pUser = scr.nextInt()-1;
   
      for (int x=0;x<felder.length ;x++ ) {
        if (pUser==p1) {
          felder[p1]="[x]";
          pos1=1;
        }
        else if (pUser==p2) {
          felder[p2]="[x]";
          pos2=1;
        }
        else if (pUser==p3) {
          felder[p3]="[x]";
          pos3=1;
        } 
        else if (pUser>p3 || pUser<p1) {
          felder[pUser]="[-]";
        } 
      }
     
      for (int x=0;x<0 ;x++ ) {
        felder[x]="[]";
      } 
     
      System.out.println();
      System.out.println();
      win = pos1+pos2+pos3;
      if (win==3) {
        System.out.println("Gewonnen!");
        System.out.println();
      } 
    } while (win==0 || win==1 || win==2); 
  }
}
 
Dann zeige mal kompletten Code.
Code:
import java.util.*;

public class schiffe {
 
  public static void main(String[] args) {
    System.out.println("Schiffeversenken - Mini");
   
    Scanner scr = new Scanner(System.in);
   
    int pos1=0;
    int pos2=0;
    int pos3=0;
    int win;
 
    //Position des Schiffes festlegen:
   
    int p1 = (int) (Math.random()*8+1);
    int p2 = p1+1;
    int p3 = p1+2;
    int test;
   
    //Eingabe + Anzeige:
   
    String[] felder = new String[10];
    for (int i=0;i<0 ;i++ ) {
      felder[i]="[]";
    } 
   
    do {
      System.out.println();
      System.out.print("Position zwischen 1/10: ");
      int pUser = scr.nextInt()-1;
   
      for (int x=0;x<felder.length ;x++ ) {
        if (pUser==p1) {
          felder[p1]="[x]";
          pos1=1;
        }
        else if (pUser==p2) {
          felder[p2]="[x]";
          pos2=1;
        }
        else if (pUser==p3) {
          felder[p3]="[x]";
          pos3=1;
        } 
        else if (pUser>p3 || pUser<p1) {
          felder[pUser]="[-]";
        }  
      }
     
      for (int x=0;x<felder.length ;x++ ) {
        System.out.print(felder[x]);
      } 
     
      System.out.println();
      System.out.println();
      win = pos1+pos2+pos3;
      if (win==3) {
        System.out.println("Gewonnen!");
        System.out.println();
      } 
    } while (win==0 || win==1 || win==2); 
  }
}
 

Zurück
Oben