home *** CD-ROM | disk | FTP | other *** search
- (***************************************************************************)
- (* AWARMANG.INC *)
- (* DIE INCLUDE-DATEI ORGANISIERT EIN-& AUSGABE SOWIE BERECHNUNG VON ZUEGEN *)
- (***************************************************************************)
-
- PROCEDURE ausgabe;
-
- VAR index : INTEGER;
-
- BEGIN
- (* Die aktuelle Belegung der Spielfelder wird geschrieben *)
- FOR index := 13 DOWNTO 8 DO
- BEGIN
- GotoXY(8*abs(index-13)+19,6); Write(spiel[index]:2)
- END;
- GotoXY(11,9); Write(spiel[0]-100:2);
- GotoXY(68,9); Write(spiel[7]:2);
- FOR index := 1 TO 6 DO
- BEGIN
- GotoXY(8*index+11,12); Write(spiel[index]:2)
- END;
- END;
-
- (*-------------------------------------------------------------------------*)
- (* Der menschliche Spieler ist am Zug und fuehrt denselben aus *)
-
- PROCEDURE m_zug;
-
- VAR anzahl, index, zug : INTEGER;
- ok, Exit : BOOLEAN;
- zeichen : CHAR;
-
- BEGIN
- ok := FALSE; Exit := TRUE;
- (* Der menschliche Spieler gibt seinen Zug ein *)
- REPEAT
- Write('Ihr Zug: ');
- REPEAT
- REPEAT
- (* ein Zeichen ohne Bildschirmecho von der Tastatur lesen *)
- Read(Kbd, zeichen)
- UNTIL zeichen IN ['1','2','3','4','5','6'];
- zug := Ord(zeichen) - Ord('0');
- IF spiel[zug] <> 0 THEN ok := TRUE
- UNTIL ok;
- (* Ausfuehrung des Zuges *)
- anzahl := spiel[zug]; spiel[zug] := 0;
- FOR index := 1 TO anzahl DO
- BEGIN
- zug := Succ(zug);
- IF zug = 14 THEN zug := 0;
- spiel[zug] := Succ(spiel[zug])
- END;
- IF NOT Exit THEN Exit := TRUE
- ELSE IF zug = 7 THEN Exit := FALSE;
- (* Entleerung des gegenueberliegenden Feldes *)
- IF (zug <> 7) AND (zug <> 0) THEN
- IF spiel[zug] = 1 THEN
- BEGIN
- spiel[7] := spiel[7] + spiel[14-zug]; spiel[14-zug] := 0
- END;
- (* Spielende erreicht? *)
- IF spiel[1]+spiel[2]+spiel[3]+spiel[4]+spiel[5]+spiel[6] = 0 THEN
- weiter := FALSE;
- IF spiel[8]+spiel[9]+spiel[10]+spiel[11]+spiel[12]+spiel[13] = 0 THEN
- weiter := FALSE;
- (* Ausgabe des Zuges und Vorbereitung des zweiten Zuges *)
- IF NOT weiter THEN Exit := TRUE;
- ausgabe;
- GotoXY(18,18); Write(' '); GotoXY(18,18)
- UNTIL Exit
- END;
-
- (*-------------------------------------------------------------------------*)
- (* Der Computer ist am Zug, berechnet denselben und fuehrt ihn aus *)
-
- PROCEDURE c_zug;
-
- VAR index, anzahl, summe : INTEGER;
- nochmal : BOOLEAN;
-
- BEGIN
- Write('Mein Zug: '); stief := 0; tiefe := 0;
- (* Erhoehung der Rechentiefe bei Erreichung des Endspiels *)
- nummer := Succ(nummer);
- IF nummer = 7 THEN stark := stark + 2;
- c_analyse; (* Berechnung des besten Zuges *)
- Write(best_1-7:1); (* Der berechnete Zug wird ausgefuehrt *)
- REPEAT UNTIL KeyPressed; (* auf Tastendruck warten *)
- nochmal := FALSE; anzahl := spiel[best_1]; spiel[best_1] := 0;
- FOR index := 1 TO anzahl DO
- BEGIN
- best_1 := Succ(best_1);
- IF best_1 = 14 THEN best_1 := 0;
- spiel[best_1] := Succ(spiel[best_1])
- END;
- IF best_1 = 0 THEN nochmal := TRUE
- ELSE IF best_1 <> 7 THEN (* Entleerung des gegenueberl. Feldes *)
- IF spiel[best_1] = 1 THEN
- BEGIN
- spiel[0] := spiel[0] + spiel[14 - best_1];
- spiel[14 - best_1] := 0
- END;
- (* Spielende erreicht *)
- summe := spiel[1]+spiel[2]+spiel[3]+spiel[4]+spiel[5]+spiel[6];
- IF summe = 0 THEN weiter := FALSE
- ELSE IF zahl - spiel[0] - spiel[7] - summe = 0 THEN weiter := FALSE;
- ausgabe; GotoXY(18,18); Write(' '); GotoXY(18,18);
- IF nochmal AND weiter THEN (* Ausgabe des zweiten Zuges *)
- BEGIN
- Write('Mein Zug:', best_2 - 7:2 );
- REPEAT UNTIL KeyPressed;
- anzahl := spiel[best_2]; spiel[best_2] := 0;
- FOR index := 1 TO anzahl DO
- BEGIN
- best_2 := Succ(best_2);
- IF best_2 = 14 THEN best_2 := 0;
- spiel[best_2] := Succ(spiel[best_2])
- END;
- IF best_2 <> 0 THEN
- IF best_2 <> 7 THEN
- IF spiel[best_2] = 1 THEN
- BEGIN
- spiel[0] := spiel[0] + spiel[14 - best_2];
- spiel[14 - best_2] := 0
- END;
- summe := spiel[1]+spiel[2]+spiel[3]+spiel[4]+spiel[5]+spiel[6];
- IF summe = 0 THEN weiter := FALSE
- ELSE IF zahl - spiel[0] - spiel[7] - summe = 0 THEN
- weiter := FALSE;
- ausgabe; GotoXY(18,18); Write(' '); GotoXY(18,18);
- END
- END;
-
- (*-------------------------------------------------------------------------*)
- (* Ermittlung des Siegers bei Spielende *)
-
- PROCEDURE spielende;
-
- VAR erg : INTEGER;
- sign : CHAR;
-
- BEGIN
- erg := spiel[0] - spiel[7];
- IF erg = 100 THEN Write('Das Spiel endet unentschieden!');
- IF erg > 100 THEN Write('Ich habe das Spiel gewonnen!');
- IF erg < 100 THEN Write('Sie haben das Spiel gewonnen!');
- GotoXY(18,20); (* Noch ein Spiel? *)
- Write('Wollen Sie noch einmal spielen? ( j / n ) ');
- REPEAT
- Read(Kbd, sign); sign := UpCase(sign)
- UNTIL sign IN ['J','N'];
- IF sign = 'N' THEN fertig := TRUE
- END;
-
- (*-------------------------------------------------------------------------*)
- (* Ende von AWARMANG. *)
-