# Schiffe versenken



## 123123123 (9. Januar 2012)

Hallo!
Mal eine Frage:
Gibt es irgendwo ein Beispiel zu das Spiel 'Schiffe versenken' für NetBeans?
Es soll nicht graphisch dargestellt werden, sondern es geht einfach um Prinzip! Es kann mit Nullen und Kreuzen dargestellt werden!
Ich finde einfach keinen passendes und ich hab selber noch nie mit Java gearbeitet. 
Dankeschön!


----------



## Bratkartoffel (9. Januar 2012)

Hi,

eventuell hilft dir das weiter: klick.

Ansonsten: Nein, ich wüsste nicht wo man das sonst herunterladen kann. Ist eine Aufgabe, die nicht allzu schwer ist und somit auch für Anfänger geeignet ist.

Gruß,
BK


----------



## G1n0 0n3 (9. Januar 2012)

Hi,

vielleicht hilft es dir weiter: http://informatik.zum.de/pieper/java2006/java2006_04_1_Schiffeversenken.pdf

Gruß
G1n0


----------



## 123123123 (10. Januar 2012)

Dankeschön für die Seiten. 
Hab mal selber was gebastelt aber ich kriege eine endlose Schleife, warum?

```
package Gebiet;

public class Gebiet
{
    /**
    * @param args
    */
    public static void main(String[] args)
    {
        int x=10;
        int y=10;
        int counter = 1;
        
        int [][] O = new int [x][y];
        
        for(int col = 0; col < y; col++)
        {
            for(int line = 0; line < x; line++)
            {
                O    [col][line] = -1;
            }
        }
        System.out.println("");
        while(counter < 11)
        {
            for(int k = 0; k < x; k++)
            {
                int a = (int) (Math.random()*x);
                int b = (int) (Math.random()*y);
                O[a][b] = 0;
            }
            System.out.println();
            
            for(int col = 0; col < y; col++)
            {
                for(int line = 0; line < x; line++)
                {
                    if(O[col][line] == -1)
                    {
                        System.out.print("0" + " ");
                    }
                    
                    if(O[col][line] == 0)
                    {
                        System.out.print("X" + " ");
                    }

                    if(O[col][line] == 1)
                    {
                        System.out.print("S" + " ");
                    }
                }
                System.out.println("");
            }
            
        
        }
        
    }
}
```

Also ich brauch nur 2 solche 10x10 Kästchen erstmal ohne die Schiffe! Ich bin ziemlich am Anfang mit Java deswegen bitte ich euch mir mit einfach Wörtern zu erklären! 
Danke!


----------



## Bratkartoffel (10. Januar 2012)

Hi,


```
while(counter < 11)
```

Du erhöhst den Counter nie.

Würde dir ausserdem empfehlen das ganze etwas abstrakter zu machen. Somit kannst du dich auch etwas genauer mit Vererbung auseinander setzen.

Zum Beispiel:
Eine abstrakte Klasse Feld. Davon erben dann die Klassen Schiff und Wasser. In jeder von Feld abgeleiteten Klasse kannst du die toString() Methode überschreiben, die bei Aufruf den entsprechenden Buchstaben zurückgibt die das Feld darstellt.

Gruß,
BK


----------



## 123123123 (10. Januar 2012)

Ok, was du mir vogeschlagen hast verwirrt mich! 
Hab jetzt so gelöst:


```
package Schiffeversenken;

public class Schiffeversenken {

	    /**
	    * @param args
	    */
	public static void main(String[] args) {
	        int x=8;
	        int y=8;
	        	        
	        int [][] Schiff = new int [x][y];
	        
	        for(int spalte = 0; spalte < y; spalte++)
	        {
	            for(int row = 0; row < x; row++)
	            {
	            	Schiff   [spalte][row] = -1;
	            }
	        }
	        System.out.println("");
	        
	            for(int c = 0; c < x; c++)
	            {
	                int a = (int) (Math.random()*x);
	                int b = (int) (Math.random()*y);
	                Schiff[a][b] = 0;
	            }
	            System.out.println();
	            
	            for(int spalte = 0; spalte < y; spalte++)
	            {
	                for(int row = 0; row < x; row++)
	                {
	                    if(Schiff[spalte][row] == -1)
	                    {
	                        System.out.print("0" + " ");
	                    }
	                    
	                    if(Schiff[spalte][row] == 0)
	                    {
	                        System.out.print("X" + " ");
	                    }

	                }
	                System.out.println("");
	            }
	            
	            System.out.println("<---------Gegner---------->");
	            int x1=8;
		        int y1=8;
		     
		        int [][] Feind = new int [x1][y1];
		        
		        for(int spalte = 0; spalte < y1; spalte++)
		        {
		            for(int row = 0; row < x1; row++)
		            {
		            	Feind   [spalte][row] = -1;
		            }
		        }
		        System.out.println("");
		        
		            for(int k = 0; k < x1; k++)
		            {
		                int a = (int) (Math.random()*x1);
		                int b = (int) (Math.random()*y1);
		                Feind[a][b] = 0;
		            }
		            System.out.println();
		            
		            for(int spalte = 0; spalte < y1; spalte++)
		            {
		                for(int row = 0; row < x1; row++)
		                {
		                    if(Feind[spalte][row] == -1)
		                    {
		                        System.out.print("0" + " ");
		                    }
		                    
		                    if(Feind[spalte][row] == 0)
		                    {
		                        System.out.print("X" + " ");
		                    }

		                }
		                System.out.println("");
		            }
	        }
	        
	    }
```


Kann man das meinem Lehrer zeigen? Ich musste nur das Grundgerüst aufbauen, ohne graphische Tricks !


----------



## Bratkartoffel (11. Januar 2012)

Hi,

ich würde da noch ein paar Änderungen vorschlagen:

1. Du hast alles in der Main-Methode. Das sieht nicht schick aus, und wird so normal auch nicht gemacht. Lagere die einzelnen Teile in sinnvollen Schritten in Methoden aus.

2. Die static main() ist eigentlich nur dazu da, eine Instanz von dem Objekt zu erstellen, in der sie steht. Das heißt die komplette Funktionalität wird über Methoden des Objektes durchgeführt.

3. Du hast viel redundanten Code drin und das Ding lässt sich schlecht erweitern. Wieder ein Grund die einzelnen Schritte in Methoden auszulagern.

4. Du hast keine Kommentare drin. Lediglich die Standard-JavaDoc Kommentare, diese sagen aber auch nichts aus.

Gruß
BK


----------

