Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 37 von 37

Thema: Fragen zum SCL-Code

  1. #31
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wozu berechnest Du #i_j, wenn Du es dann in der Abfrage nicht verwendest?

  2. #32
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.788
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Hallo,
    ich würde die Suchroutine so gar nicht machen.
    Mein Vorschlag wäre :
    - du fängst in der untersten Reihe an und kontrollierst die Farbe des Elementes mit dem aktuellen Index. Für den setzt du dann den Farbzähler auf 1.
    - nun ermittelst du die Position des nächsten Nachbarn basierend auf deiner aktuellen Position. Ist die Position legal (also in deiner Matrix) und hat er die gleiche Farbe wie dein Ausgangsfeld dann erhöhst du den Zähler für die Farbe. Ist die Position illegal oder die Farbe nicht identisch dann brichst du ab, erhöhst den Index und fängst wieder von vorne an.
    - war die Position legal und die Farbe die richtige dann checkst du den nächsten Nachbarn für dieses Feld und verfährst wie vorher.
    - Ist dein Farbzähler[Farbe] irgendwann >= 4 dann hat die Farbe gewonnen.

    Anmerkung:
    bei der Vergabe von Variablennamen würde ich etwas fantasievoller vorgehen. Die Namen kosten nichts mehr, wenn sie Aufgabe der Variablen sinnvoll beschreiben und sie erfordern auch nicht mehr Bearbeitungszeit ...

    Gruß
    Larry

  3. #33
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Sowas hatte ich ihm weiter oben auch schon vorgeschlagen, aber er möchte lieber seinen Weg weiter verfolgen (was ich auch legitim finde).
    Zusätzlich erschwerend wirkt sich natürlich noch die Benutzung von 2 Spielfeldern statt nur einem aus.

    Ich hab' ja auch schon des öfteren bemerkt, das es überflüssig ist, jedesmal das komplette Spielfeld auf einen Gewinn zu überprüfen.
    Besonders für die Diagonalen fand' ich daher die FOR-Schleifen für eher ungeeignet und hab' in meiner Variante der Gewinnprüfung komplett auf sie verzichtet.

  4. #34
    Registriert seit
    03.09.2013
    Beiträge
    93
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke für eure antworten

    Das programm funktioniert man kann gegeneinander spielen.
    Ich werde das Programm irgendeinmal in einem neuen Thread vorstellen mit den Dokumentation.

    Ich danke euch trotzdem mit euren genialen ideen

    gruss

  5. #35
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Heißt das, jetzt funktionieren alle Auswertungen?

  6. #36
    Registriert seit
    03.09.2013
    Beiträge
    93
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    ja, es funktionieren alle Auswertungen!

  7. #37
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Na denn:



    Ist zwar sicher noch nicht alles Gold, was glänzt, aber das wird schon noch.
    Einfach (wie bisher) am Ball bleiben.



    Übrigens, so hab' ich die Diagonalen (analog zu meiner Spaltenprüfung) geprüft:
    Zitat Zitat von hucki Beitrag anzeigen
    3. Erste Diagonale:
    Code:
    6 o o o o o o ? 
    5 o o o o o ? o
    4 o o o o X o o
    3 o o o ? o o o
    2 o o ? o o o o
    1 o ? o o o o o
    x 1 2 3 4 5 6 7
    Auch hier kann der aktuelle Spielstein wieder ein mittlerer der Reihe sein. Also von ganz unten in Zeile 1 an prüfen. Die Spalte mit der begonnen wird, ist die aktuelle Spalte minus die aktuelle Zeile plus 1. Und dann nach oben arbeiten -> Zeile + 1 und Spalte + 1. die Prüfung kann abgebrochen werden, wenn Folge = 4 oder Spalte > 7 oder Zeile > 6.
    Code:
      IF NOT Gewinn THEN
          Folge := 0;                                                              // Folge gleicher Spielsteine initieren
          Spalte:= "aktuelle Spalte" - "aktuelle Zeile" + 1;                       // Anfangsspalte der 1. Diagonale berechnen
          Zeile := 1;                                                              // Anfangszeile festlegen
          REPEAT
              IF Spalte > 0 THEN                                                   // Nur wenn das berechnete Feld innerhalb des Spielfelds liegt
                 Folge:= SEL (G:= SPIELFELD[Spalte, Zeile] = "aktueller Spieler",  // Im Spielfeld der gleicher Spieler eingetragen?
                              IN0:= 0,                                             // nein: Folge gleicher Spielsteine auf 0 rücksetzen
                              IN1:= Folge + 1);                                    // ja:   Folge Spielsteine um 1 erhöhen
              END_IF;
              Spalte:= Spalte + 1;                                                 // letzten Wert für Spalte um eins erhöhen
              Zeile := Zeile  + 1;                                                 // letzten Wert für Zeile  um eins erhöhen
          UNTIL Folge = 4 OR Spalte > Spalten OR Zeile > Zeilen                    // Schleife eventuell wiederholen
          END_REPEAT;
          Gewinn:= Folge = 4;                                                      // Gewinn setzen, wenn Folge=4
      END_IF;
    Und dementsprechend, wie oben erklärt, die 2. Diagonale:
    Zitat Zitat von hucki Beitrag anzeigen
    4. Zweite Diagonale:
    Code:
    6 o o ? o o o o 
    5 o o o ? o o o
    4 o o o o X o o
    3 o o o o o ? o
    2 o o o o o o ?
    1 o o o o o o o ?
    x 1 2 3 4 5 6 7 8
    Wie man sieht, können die Diagonalen auch außerhalb des Spielfelds beginnen. Wenn also die Spalte einen Wert außerhalb des Spielfelds hat, muss die Prüfung übersprungen werden, Folge bleibt dann einfach noch bei 0.
    Code:
      IF NOT Gewinn THEN
          Folge := 0;                                                              // Folge gleicher Spielsteine initieren
          Spalte:= "aktuelle Spalte" + "aktuelle Zeile" - 1;                       // Anfangsspalte der 2. Diagonale berechnen
          Zeile := 1;                                                              // Anfangszeile festlegen
          REPEAT
              IF Spalte <= Spalten THEN                                            // Nur wenn das berechnete Feld innerhalb des Spielfelds
                 Folge:= SEL (G:= SPIELFELD[Spalte, Zeile] = "aktueller Spieler",  // Im Spielfeld der gleicher Spieler eingetragen?
                              IN0:= 0,                                             // nein: Folge gleicher Spielsteine auf 0 rücksetzen
                              IN1:= Folge + 1);                                    // ja:   Folge Spielsteine um 1 erhöhen
              END_IF;
              Spalte:= Spalte - 1;                                                 // letzten Wert für Spalte um eins erhöhen
              Zeile := Zeile  + 1;                                                 // letzten Wert für Zeile  um eins erhöhen
          UNTIL Folge = 4 OR Spalte < 1 OR Zeile > Zeilen                          // Schleife eventuell wiederholen
          END_REPEAT;
          Gewinn:= Folge = 4;                                                      // Gewinn setzen, wenn Folge=4
      END_IF;
    Geändert von hucki (22.11.2013 um 10:11 Uhr) Grund: Kommentar im Code korrigiert

Ähnliche Themen

  1. TIA Fragen zum code
    Von bkizilkaya im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 21.10.2013, 12:21
  2. Exponent im SCL Code
    Von paula23 im Forum Simatic
    Antworten: 26
    Letzter Beitrag: 08.09.2013, 19:40
  3. Fehlersuche SCL-Code
    Von Sinix im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 12.07.2011, 14:53
  4. Fehler im SCL Code
    Von Felse im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 18.06.2009, 12:33
  5. SCL code
    Von awl-scl im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 14.01.2008, 17:02

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •