1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84:
| function TForm1.Min_Zug(Spielbrett: Grundspielbrett; Breite, Hoehe, Farbe, tiefe, suchtiefe: Integer): integer; var beste_knotennr: integer; bester_wert: integer; wert: integer; I: integer; naechstes_Spielbrett: ^Grundspielbrett; Zugliste: TList; Eintrag: ^Grundspielbrett; Gegnerfarbe : integer; begin if Siegbedingung(Spielbrett, Breite, Hoehe, Farbe) then begin result := INFINITY; exit; end; if (tiefe = suchtiefe) then begin result := Eval_Spielbrett(Spielbrett,Farbe); exit; end else begin Gegnerfarbe := (SCHWARZ + WEISS) - Farbe; Zugliste := TList.Create; for I := breite to (Hoehe * Breite - 1) - Breite do begin if spielbrett[i] = Farbe then begin if spielbrett[i + breite*Farbe] = LEER then begin New(Eintrag); Eintrag^ := Copy(spielbrett); Eintrag^[i + (breite) * Farbe] := FARBE; Eintrag^[i] := LEER; Zugliste.Add(Eintrag); end; if spielbrett[i + (breite-1)*Farbe] = Gegnerfarbe then begin New(Eintrag); Eintrag^ := Copy(spielbrett); Eintrag^[i + (breite-1) * Farbe] := FARBE; Eintrag^[i] := LEER; Zugliste.Add(Eintrag); end; if spielbrett[i + (breite+1)*Farbe] = Gegnerfarbe then
begin New(Eintrag); Eintrag^ := Copy(spielbrett); Eintrag^[i + (breite+1) * Farbe] := FARBE; Eintrag^[i] := LEER; Zugliste.Add(Eintrag); end; end; end; bester_wert := INFINITY; beste_knotennr := 0; for I := 0 to Zugliste.Count - 1 do begin naechstes_Spielbrett := Zugliste.Items[i]; wert := Max_Zug(naechstes_Spielbrett^, Breite , Hoehe, -Farbe, tiefe+1, suchtiefe); if Wert < bester_Wert then begin bester_Wert := Wert; beste_knotennr:= i; end; end; Zugliste.Free; if tiefe = 0 then begin result := beste_Knotennr; exit; end else begin result := bester_Wert; exit; end; end; end; |