# Schachbrett mit N x N Feldern



## paukenpaule (23. Jan 2010)

Hallo,

ich muss ein Schachbrett mit NxN Feldern erstellen, mit gleichbleibenden Gesamtmaßen, die einzelnen Felder müssen mitskalieren.

Mit google habe ich folgenden Code für die Erstellung eines Schachbretts gefunden:

```
public class Schachbrett extends Applet {
   //Das Schachbrett wird so gezeichnet:
   //Zuerst wird ein schwarzes Brett 
   //(inkl. 2 Pixel breiten Rahmen)
   //gezeichnet. Danach werden die weißen Quadrate gesetzt
   
   final int x = 50; //x-Koordinate der linken oberen Ecke 
                     //(ohne Rahmen)
   final int y = 50; //y-Koordiante der linken oberen Ecke 
                     //(ohne Rahmen)


   public void paint (Graphics g) {
      //Zeichnen des grossen shcwarzen Quadrats (inkl. Rahmen)
      g.setColor(Color.BLACK);
      g.fillRect(x-2,y-2,164,164);
      //Zeichnen der weissen Quadrate
      g.setColor(Color.WHITE);
      //zuerst die weise Quadrate, die in der ersten 
      //Spalte beginnen
      for (int i=0; i<4; i++)
         for (int j=0; j<4; j++)
             g.fillRect(x+j*40,y+i*40, 20,20);
      // dann die, die in der zweiten Spalte beginnen
      for (int i=0; i<4; i++)
         for (int j=0; j<4; j++)
             g.fillRect(x+20+j*40,y+20+i*40, 20,20);
   }
}
```

Allerdings ist dieses ja nicht veränderbar.

Ich habe versucht eine Main-Methode einzubauen damit ich die Werte durch ein N ersetzen kann

```
public static void main(String[] args) {
			
		int n = Integer.parseInt(args [0]);
```

Allerdings erkennt Java mein deklariertes n nicht in der paint Methode, wie kann ich diese mit einander verbinden?

Gruß


----------



## noobadix (23. Jan 2010)

Ich kann auch nicht erkennen, dass n irgendwo verwendet würde oO

Zeig mal den gesamten Quellkod.


----------



## paukenpaule (23. Jan 2010)

```
import java.applet.Applet;
import java.awt.*;


public class Schachbrett extends Applet {
   //Das Schachbrett wird so gezeichnet:
   //Zuerst wird ein schwarzes Brett (inkl. 2 Pixel breiten Rahmen)
   //gezeichnet. Danach werden die weißen Quadrate gesetzt
   
   final int x = 0; //x-Koordinate der linken oberen Ecke (ohne Rahmen)
   final int y = 1; //y-Koordiante der linken oberen Ecke (ohne Rahmen)


   public void paint (Graphics g) {
      //Zeichnen des grossen shcwarzen Quadrats (inkl. Rahmen)
      g.setColor(Color.BLACK);
      g.fillRect(x-4,y-2,164,140);
      //Zeichnen der weissen Quadrate
      g.setColor(Color.RED);
      //zuerst die weise Quadrate, die in der ersten Spalte beginnen
      for (int i=0; i<n; i++)
         for (int j=0; j<n; j++)
             g.fillRect(x+j*40,y+i*40, 20,20);
      // dann die, die in der zweiten Spalte beginnen
      for (int i=0; i<n; i++)
         for (int j=0; j<n; j++)
             g.fillRect(x+20+j*40,y+20+i*40, 20,20);
  
   public static void main(String args[]){
	  
    	  int n = Integer.parseInt(args[0]);
	  
      }
}
```

Also der Gesamte Quellcode funktioniert auch noch nicht, ich möchte erstmal nur die paint Methode der main Methode zuordnen, damit ich später "rumprobieren" kann.

Ich bin nen absolut blutiger Anfänger auf ner Uni die einem so ziemlich gar nichts erklärt:toll:

PS: hier mal nen beispiel, damit ihr seht wie es aussehen soll. Einmal für n=5 und n=8 zb. Es scheitert aber schon daran, das in den Zeilen der paint methode, n als nicht deklariert dasteht.


----------



## noobadix (23. Jan 2010)

Dann solltest du folgendes, kostenloses, auch downloadbares Buch lesen: Galileo Computing :: Java ist auch eine Insel (8. Auflage) oder fünfzig euro investieren in "Java von Kopf bis Fuß" wenn du so wie ich etwas begriffsstutzig bist 

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6 Eigene Klassen schreiben
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6.2 Privatsphäre und Sichtbarkeit

Variablen haben einen Gültigkeitsbereich, in dem du auf sie zugreifen kannst. Dieser Gültigkeitsbereich kann eine Klasse oder eine Methode sein, außerhalb kennt man die Variable eben nicht. Wenn du eine Variable in einer Methode (wie hier main) deklarierst, ist sie auch nur dort gültig/bekannt.

Möchtest du nun innerhalb deiner Klasse auf eine Variable zugreifen, musst du sie auch dort deklarieren, beschreiben/initialisieren kannst du sie woanders. Die beiden Variablen x und y wurden hier ja außerhalb der Methoden deklariert und auch initialisiert. Dort wo die stehen, musst du auch dein n deklarieren.


----------



## eRaaaa (23. Jan 2010)

Sollst du denn überhaupt ein Applet schreiben? Oder eine normale Desktop- Anwendung?


----------



## paukenpaule (24. Jan 2010)

Habe nun mit Hilfe von Googel und einem Programmierass der mir versucht hat, den Code zu erklären folgendes gefunden:


```
public class Schachbrett {
    public static void main(String[] args) {  
    	
    	int felder = Integer.parseInt(args[0]); 
        StdDraw.setXscale(0, felder); 
        StdDraw.setYscale(0, felder); 
        
        for (int i = 0; i < felder; i++) { 
            for (int j = 0; j < felder; j++) { 
                if ((i + j) % 2 != 0) StdDraw.setPenColor(StdDraw.RED); 
                else                  StdDraw.setPenColor(StdDraw.BLACK); 
                StdDraw.filledSquare(i + .5, j + .5, .5); 
            } 
        } 
        StdDraw.show(); 
    } 
 
}
```

Nun ist folgendes Problem, dass IMMER das erste obere linke Kästchen rot sein muss.
Hat jemand eine Idee?


----------



## eRaaaa (24. Jan 2010)

....;( :autsch:

Probiers doch mal 

```
if ((i + j) % 2 == 0)
```

oder einfach die Farben tauschen? :bae: :autsch:


----------



## Tobias (24. Jan 2010)

Wetten, dass modulo in der Aufgabenstellung drinsteht?


----------



## Ebenius (24. Jan 2010)

:lol:


----------



## Tomate_Salat (24. Jan 2010)

ich hab ncoh nie wirklich mit applets gearbeitet...nur mal reingesehen...aber verwendet man in applets nicht eine [c]init();[/c] anstatt einer [c]main(String[] args);[/c] ?!


----------



## Neondream (24. Jan 2010)

na die aufgabe musst du bis 00.00 uhr fürn grünvogel abgegeben haben oder? 

ich komm auch nicht weiter 

PS: wollte ich mal gesagt haben


----------



## kvr (24. Jan 2010)

habt ihr denn die spirale hinbekommen?? ^^


----------

