tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
992
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Effa Effa ist offline Grünschnabel
    Registriert seit
    Apr 2011
    Beiträge
    3
    Hallo Ihr!

    Wie Ihr Euch wahrscheinlich schon denken könnt, geht es auch bei mir um eine Aufgabe für die Uni.

    Wir sollen ein "einseitiges" Schiffe versenken programmieren. Soll heißen, der Computer setzt seine Schiffe auf ein 10x10 Spielfeld und ich schieße diese dann mit einer Eingabe a la "F5" ab.
    Nun soll nach jedem Zug das Spielfeld eingeblendet werden und der aktuelle Spielstand durch die Symbole (x getroffen, - vorbei, o noch nicht beschossen) angezeigt werden.
    Und genau da hänge ich nun.....
    Nachdem ich meinen ersten Tipp abgegeben habe, kommt anstatt des Spielfelds nur eine komische Zahlenfolge (ich weiß, dass das daran liegt, dass ich auf diese Weise kein Array ausdrucken kann, aber ich komme einfach nicht auf die richtige Lösung)

    Könntet ihr mir bitte helfen****

    Hier ist mein bisheriger Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    public class SchiffeVersenken {
        
        
        public static void main (String[] args)
        {
            System.out.println("Willkommen zu Schiffe versenken deluxe!");
            
            //Spielfeld-Objekt anlegen
            SpielHelfer meinSpielfeld = new SpielHelfer(10);
            
            //Schiffe erstellen
            Schiff [] computerSchiffe = {new Schlachtschiff(),new Kreuzer(),new  Kreuzer(),new Zerstoerer(),new Zerstoerer(),new Uboot()};
            
            
            int[] koordinaten;
            
            for(int i =0; i< computerSchiffe.length; i++)
            {
                
                boolean platziert = false;
                
                while(!platziert)
                {
                    koordinaten = 
                                    meinSpielfeld.gibMirSchiff(computerSchiffe[i].getSchiffsLaenge());
     
                    platziert = meinSpielfeld.platziereSchiff(computerSchiffe[i], 
                                    koordinaten[0], koordinaten[1], koordinaten[2], koordinaten[3]);
                }
            }
            
            
            System.out.println(meinSpielfeld.zeigeSpielfeld());
            
            System.out.println("Schiffe sind gesetzt.");
            
            
            System.out.println(meinSpielfeld.benutzerEingabe());
            
            Spielstand display = new Spielstand();


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    
    public class Spielstand {
        
        public SpielHelfer eingabe;
        private int treffer = 0;
        public Schiff [] [] feld;
        
        
        
        public boolean zeigeSpielstand(int [] tipp)
        {
            boolean daneben= true;
            for (int i =0; i<=feld[0].length; i++)
            {
                for (int j=0; j<=feld.length; j++)
                {
                    if (feld[tipp[0]][tipp[1]]!= null)//  getroffen
                    {
                        System.out.println("Getroffen");
                        daneben = false;
                        treffer++;
                    }
                }
                    
            }   
            if (daneben)
            {
                for (int i =0; i<=feld[0].length; i++)
                {
                    for (int j=0; j<=feld.length; j++)
                    {
                        System.out.println("Vorbei");
                    }
        
                        
                }
            }
            
            System.out.print(feld [tipp[0]][tipp[1]] == null ? "x " : "- ");
            return daneben;
        }
        
        
        public int getTreffer()
        {
            return treffer;
        }
    }

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    
    public class SpielHelfer
    {
        public Schiff [][] feld;       
        public Schiff schiffsLaenge;
        private int ausrichtung = (int)Math.random ();
        
        
        
        public SpielHelfer(int groesse)
        {
            feld = new Schiff [groesse][groesse];  
        }
        
        
        
        
        public String zeigeSpielfeld ()
        {
            
            String zeigeFeld = "Ihr Spielfeld:"+ "\n"+ "\n";
            
            for (int spalte=0; spalte<feld[0].length; spalte++)
            {
                for (int zeile=0; zeile<feld.length; zeile++)
                {
                    zeigeFeld += feld [zeile][spalte]== null ? "o " : "o ";
                    
                }
                zeigeFeld += "\n";
            }
            return zeigeFeld;
            
        }
        
        
        
        
        public int [] gibMirSchiff (int schiffAusmaß)
        {
            int[] koordinaten = new int[4];
            Random random = new Random();
            
            int ebenenGroesse = feld.length;
            int konkreteGroesse = ebenenGroesse - schiffAusmaß;
            
            int xKoordinate = Math.abs(random.nextInt()%konkreteGroesse);
            int yKoordinate = Math.abs(random.nextInt()%konkreteGroesse);
            
            //richtung = true --> waagrecht
            //richtung = false --> senkrecht
            boolean richtung = random.nextBoolean();
            
            koordinaten[0] = xKoordinate;
            koordinaten[2] = yKoordinate;
            
            if(richtung)
            {
                koordinaten[1] = xKoordinate + schiffAusmaß -1;
                koordinaten[3] = yKoordinate;
            }
            else
            {       
                koordinaten[1] = xKoordinate;
                koordinaten[3] = yKoordinate+ schiffAusmaß - 1;     
            }
            
            return koordinaten;
        }
        
        
        public boolean platziereSchiff(Schiff schiff, int startZeile, int endZeile, int startSpalte, 
            int endSpalte)
        {
            boolean frei = true;
            for(int zeile = startZeile; zeile <= endZeile; zeile++)
            {
                for(int spalte = startSpalte; spalte<= endSpalte; spalte++)
                {
                    if (feld[zeile][spalte]!=null)
                    {
                        frei = false;
                    }
                }
            }
            
            if(frei)
            {
                for(int zeile = startZeile; zeile <= endZeile; zeile++)
                {
                    for(int spalte = startSpalte; spalte<= endSpalte; spalte++)
                    {
                        feld[zeile][spalte] = schiff;
                    }
                }
            }
            
                
            return frei;
            
        }
        
        
        
        public int [] benutzerEingabe()
        {   Spielstand current = new Spielstand();
            
            
            Scanner scan = new Scanner(System.in);
                
     
                
                String tipp1 = scan.next();
                
                char []tipp2 = tipp1.toCharArray();
                int tippy = ((int)tipp2 [0])-58;
                
                int tippx = (int)tipp2[1];
                
                int [] tipp = new int [2];
                tipp[0]= tippx;
                tipp[1]= tippy;
                
                return tipp;
            }
     

  2. #2
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    Erst einmal willkommen hier im Forum

    Das Problem mit der Ausgabe des Arrays ist keine große Sache. Entweder du klapperst das Array mit einer Schleife ab oder du machst es so:
    Code java:
    1
    
    System.out.println(Arrays.toString(spielHelfer.benutzerEingabe()));
    Dann bekommst du deine Ergebnisse.
     
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  3. #3
    Effa Effa ist offline Grünschnabel
    Registriert seit
    Apr 2011
    Beiträge
    3
    Danke!!
    Euer Forum hat mir schon öfters weiter geholfen....

    Und nochmal danke für deine Antwort!!
    Hab die Schleife jetzt eingebaut, und entdeckt dass mein Fehler daran lag, dass ich ein Array ausgegeben hab, obwohl ich gar keins wollte.
    Jetzt ist aber mein Problem, dass ich von der main-Methode irgendwie nich auf die Klasse Spielstand zugreifen kann, zumindest wird nichts auf der Konsole ausgegeben.
     

  4. #4
    MiMi MiMi ist offline Mitglied Smaragd
    Registriert seit
    Sep 2007
    Beiträge
    1.177
    Am besten aus der Main heraus das Objekt SchiffeVersenken erstellen mit new und von dort aus dann alle anderen Klassen erstellen und Methoden aufrufen.
    Ansonsten versteh ich nicht was du meinst mit du kannst nich darauf zugreifen? Du erstellst am Ende der Main
    Code java:
    1
    
    Spielstand display = new Spielstand();
    Solange du dort keine Methode aufrufst, kann ja auch nix angezeigt werden?
     
    Waere super wenn ihr euren Code in dieser Form einfuegt:
    [JAVA]System.out.println("Test :)");[/JAVA]
    wird zu:
    Code java:
    1
    
    System.out.println("Test :)");
    Tabs sind uebrigens keine Feinde :)
    Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
    Danke :D

  5. #5
    Effa Effa ist offline Grünschnabel
    Registriert seit
    Apr 2011
    Beiträge
    3
    oh, ja.... da hab ich vergessen die letzten Zeilen rein zu kopieren.
    Eigentlich gehts so weiter:

    Code java:
    1
    2
    3
    4
    5
    
    String tipp1 = meinSpielfeld.benutzerEingabe();
            int []tipp= meinSpielfeld.wandleUm(tipp1);
            
            
            System.out.println(display.zeigeSpielstand(tipp));

    ich hab meine Methoden noch einmal ein bisschen umgeschrieben, deswegen taucht auf einmal ein"wandleUm" auf, aber eigentlich sollte es doch nicht daran liegen oder?

    Danke nochmal!!
     

  6. #6
    MiMi MiMi ist offline Mitglied Smaragd
    Registriert seit
    Sep 2007
    Beiträge
    1.177
    Nuetzlich bei sowas ist immer debuggen. Zur Not mit einigen System outs, um zu sehen bis wohin er kommt und ob ueberhaupt irgendwo eine Ausgabe ist.
    Kann es momentan hier auch nicht testen. Daher genaue Angabe was er nicht mach tund ob er ueberhaupt in die Methode kommt bzw ob dein wandleUm das macht was es soll
     
    Waere super wenn ihr euren Code in dieser Form einfuegt:
    [JAVA]System.out.println("Test :)");[/JAVA]
    wird zu:
    Code java:
    1
    
    System.out.println("Test :)");
    Tabs sind uebrigens keine Feinde :)
    Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
    Danke :D

Ähnliche Themen

  1. Schiffe versenken für Einsteiger?
    Von Marimi im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 14.11.10, 12:45
  2. [Perl] Schiffe versenken...
    Von Coldfist im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 21.01.07, 16:13
  3. Schiffe versenken
    Von Victim De Ace im Forum Java
    Antworten: 1
    Letzter Beitrag: 12.04.06, 18:21
  4. Brauche hilfe bei Schiffe versenken in c++
    Von Bone_Spirit im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 27.12.04, 16:31