home *** CD-ROM | disk | FTP | other *** search
- CONST MaxZuege = ;
- maximaleTiefe = ;
-
- TYPE StellungsTyp = ;
- ZugTyp = ;
- ZuglistenTyp = ARRAY [1..MaxZuege] OF ZugTyp;
-
- (*
-
- PROCEDURE Zuggenerator (VAR Stellung: StellungsTyp; VAR Zugliste: ZuglistenTyp;
- VAR ZugZahl: BYTE);
-
- PROCEDURE FuehreZugAus (VAR Stellung: StellungsTyp; Zug: ZugTyp);
-
- PROCEDURE NimmZugZurueck (VAR Stellung: StellungsTyp; Zug: ZugTyp);
-
- FUNCTION ComputerAmZug (VAR Stellung: StellungsTyp): BOOLEAN;
-
- FUNCTION statischeBewertung (VAR Stellung: StellungsTyp): INTEGER;
-
- *)
-
- FUNCTION ErmittleStellungswert (VAR Stellung: StellungsTyp; Tiefe: BYTE;
- alpha0, beta0: INTEGER; besterZug: ZugTyp): INTEGER;
-
- VAR Zugliste : ZuglistenTyp;
- aktuellerZug, besterZugNeu : ZugTyp;
- alpha, beta, aktuellerWert : INTEGER;
- ZugZahl, ZugNr : BYTE;
- CutOff : BOOLEAN;
-
- BEGIN
- IF Tiefe = maximaleTiefe THEN
- ErmittleStellungswert := statischeBewertung(Stellung)
- ELSE BEGIN
- IF ComputerAmZug(Stellung) THEN alpha := -10000 ELSE beta := 10000;
- Zuggenerator(Stellung, Zugliste, ZugZahl);
- IF ZugZahl = 0 THEN
- ErmittleStellungswert := 0
- ELSE BEGIN
- ZugNr := 0; CutOff := FALSE;
- WHILE (ZugNr < ZugZahl) AND (NOT CutOff) DO BEGIN
- ZugNr := SUCC(ZugNr);
- aktuellerZug := Zugliste[ZugNr];
- FuehreZugAus(Stellung, aktuellerZug);
- aktuellerWert := ErmittleStellungswert(Stellung, Tiefe+1, alpha, beta, besterZugNeu);
- NimmZugZurueck(Stellung, aktuellerZug);
- IF ComputerAmZug(Stellung) THEN BEGIN
- IF alpha < aktuellerWert THEN BEGIN
- alpha := aktuellerWert; besterZug := aktuellerZug
- END; (* then *)
- IF alpha >= beta0 THEN CutOff := TRUE
- END (* then *)
- ELSE BEGIN
- IF beta > aktuellerWert THEN BEGIN
- beta := aktuellerWert; besterZug := aktuellerZug
- END; (* then *)
- IF beta <= alpha0 THEN CutOff := TRUE
- END (* else *)
- END; (* while *)
- IF ComputerAmZug(Stellung) THEN
- ErmittleStellungswert := alpha
- ELSE
- ErmittleStellungswert := beta
- END (* else *)
- END (* else *)
- END; (* ErmittleStellungswert *)