Einzelnen Beitrag anzeigen

Benutzerbild von Radon
Radon

Registriert seit: 15. Mai 2006
29 Beiträge
 
#1

If-Verschachtelung in VierGewinnt - komisches Ergebnis

  Alt 29. Mai 2006, 18:04
Hallo!

Ich bin dabei ein VierGewinnt zu programmieren, Delphi ist ziemliches Neuland für mich.

Ich hänge bei der Gewinnprüfung. Diese habe ich mal konzipiert und theoretisch dürfte sie (wenn ich keinen Denkfehler gemacht habe) auch funktionieren. Tut sie aber nicht. Nun glaube ich, dass es an Fehlern in der If-then-else Verschachtelung liegt.

Hier mal der Code:

Delphi-Quellcode:
//======================================================
// Gewinnüberprüfung
//======================================================

procedure TVierGewinnt.GewinnPruefung(GSpalte, GZeile: Integer);

var
  x, y, durchlauf: Integer;
  gewonnen: boolean;
begin
  for durchlauf := 0 to 3 do
  begin
    x := 0;
    y := 0;
    case durchlauf of
      0: begin
          x := 1;
          y := 0;
          end;
      1: begin
          x := 0;
          y := 1;
          end;
      2: begin
          x := 1;
          y := -1;
          end;
      3: begin
          x := -1;
          y := -1;
          end;
    end;

  if Feld[GSpalte + 1 * x, GZeile + 1 * y] = Spieler then
    if Feld[GSpalte + 2 * x, GZeile + 2 * y] = Spieler then
      if Feld[GSpalte + 3 * x, GZeile + 3 * y] = Spieler then
        begin
        gewonnen := true;
        end
      else
        if Feld[GSpalte - 1 * x, GZeile - 1 * y] = Spieler then
          begin
          gewonnen := true;
          end

    else
      if Feld[GSpalte - 1 * x, GZeile - 1 * y] = Spieler then
        if Feld[GSpalte - 2 * x, GZeile - 2 * y] = Spieler then
          begin
          gewonnen := true;
          end


  else
    if Feld[GSpalte - 1 * x, GZeile - 1 * y] = Spieler then
      if Feld[GSpalte - 2 * x, GZeile - 2 * y] = Spieler then
        if Feld[GSpalte - 3 * x, GZeile - 3 * y] = Spieler then
          begin
          gewonnen := true;
          end;


  if gewonnen = true then
  begin
    ShowMessage('Spieler '+IntToStr(Spieler)+' hat gewonnen!');
// FreeAndNil(PaintBox1);
    FreeAndNil(VierGewinnt);
    gewonnen := false;
  end;


end;
end;

//======================================================
//======================================================
Ich weiß nicht genau ob ihr da meine Gedankengänge nachvollziehen könnt, das Prog hab ich nochmal im Anhang. Jedenfalls glaube ich, dass eben hier irgendwo der wurm drin ist, eine Abfrage in die Falsche geht und dadurch irgendwas schiefgelaufen ist. Merkmal ist, dass nur die vertikale gewinnprüfung funktioniert.
Angehängte Dateien
Dateityp: rar vier_gewinnt_211.rar (175,6 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat