Alle diagonale Elemente finden



  • Hey Leute!

    ich möchte ein 4-Gewinnt programmieren. Dazu muss ich ja alles diagonalen Elemente finden. Ich hab hier schon mal angefangen aber irgendwie komm ich grad nicht mehr weiter. Könnt ihr mir helfen?

    for(int y=6; y>=2; y=y-2)
    	{
    		for(int x=1; x=7; x=x+2)
    		{
    			if(spielfeld[x][y] == stein)
    				if(spielfeld[x+2][y+2] == stein)
    					if(spielfeld[x+4][y+4] == stein)
    						if(spielfeld[x+6][y+6] == stein)
    						{
    							return 1;
    						}
    		}
    	}
    

    Das Feld sieht so aus:

    |1|2|3|4|5|6|7|
    |-|-|-|-|-|-|-|
    | | | | | | | |
    |-|-|-|-|-|-|-|
    | | | | | | | |
    |
    |
    .
    .
    .
    

    Die Variablen x und y entsprechen den Koordinaten wie man es gewöhnt ist.



  • Erst einmal solltest du erwähnen, was denn überhaupt dein Problem ist. Wo kommst du nicht weiter?

    Dann fällt mir sofort das for(int x=1; x=7; x=x+2) auf, wobei das x=7 tödlich ist. Hier weist du x nämlich immer den Wert sieben zu (unabhängig von vonrangehenden Zuweisungen), und das wird immer zu 'wahr' ausgewertet, sprich, du erhälst eine Endlosschleife.

    Dann verstehe ich nicht, weswegen du x und y immer um zwei Schritte änderst. Vllt. übersehe ich da aber auch einfach nur was. Aber eigentlich müsste doch eine Änderung um jeweils 1 reichen?

    Ansonsten musst du dir auch über die Grenzen deines Felder im Klaren werden. Im ersten Schritt ist y bspw. 6 und in den verschachtelten if-Anweisungen würde auf das Feld spielfeld[..][y+6 = 12] zugegriffen werden. Das max. wäre aber 6 bei einer Feldgröße von 7x7.



  • Zwischen einem Spielstein und dem nächsten Spielstein ist aber in jede Richtung gesehen noch ein char, der mit einer '|' oder '-' besetzt ist...

    x=7 ist natürlich falsch



  • Ich weiß eher nicht wie "algorithmisch" rangehen soll... Ich hab mir auch schon eine Zeichnung dazu gemacht... Aber ich komm da halt grad nicht drauf



  • vip@r schrieb:

    Zwischen einem Spielstein und dem nächsten Spielstein ist aber in jede Richtung gesehen noch ein char, der mit einer '|' oder '-' besetzt ist...

    stehen diese Trennzeichen denn tatsächlich so in deinem Spielfeld 😮 ? Ich hätte ja nur die echten Felder gespeichert und die Trennzeichen nur bei der Ausgabe drumherum gezeichnet.

    PS: Und anstelle der geschachtelten if-Abfrage hätte ich noch eine Schleife verwendet.



  • ja, die trennzeichen stehen im feld...



  • wie löse ich nun mein problem der diagonalen linien?



  • so wie der code oben steht, komm ich eigentlich nu bis zur hälft aller möglichen diagonalen. wie kann ich aber alle diagonalen durchgehen?



  • Vermutlich stimmen die Indizs noch nicht so ganz auf deine Struktur. Wie gesagt, ich würde als erstes nur die echten Felder in dem Array speichern und nicht die Trennzeichen. Danach eine dreifache Schleife:

    for(int x=0;x<=maxx-4;++x)
      for(int y=0;y<=maxy-4;++y)
      {
        int count=0;
        for(int rel=0;rel<4;++rel)
          if(feld[x+rel][y+rel]==stein) ++count;
        if(count==4) return 1;
      }
    return 0;
    

Anmelden zum Antworten