home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 07 / awari / awarmang.inc < prev   
Encoding:
Text File  |  1987-06-10  |  5.9 KB  |  158 lines

  1. (***************************************************************************)
  2. (*                          AWARMANG.INC                                   *)
  3. (* DIE INCLUDE-DATEI ORGANISIERT EIN-& AUSGABE SOWIE BERECHNUNG VON ZUEGEN *)
  4. (***************************************************************************)
  5.  
  6. PROCEDURE  ausgabe;
  7.  
  8.    VAR  index : INTEGER;
  9.  
  10.    BEGIN
  11.      (*   Die aktuelle Belegung der Spielfelder wird geschrieben   *)
  12.      FOR  index := 13  DOWNTO  8  DO
  13.        BEGIN
  14.          GotoXY(8*abs(index-13)+19,6);  Write(spiel[index]:2)
  15.        END;
  16.      GotoXY(11,9);  Write(spiel[0]-100:2);
  17.      GotoXY(68,9);  Write(spiel[7]:2);
  18.      FOR  index := 1  TO  6  DO
  19.        BEGIN
  20.          GotoXY(8*index+11,12);  Write(spiel[index]:2)
  21.        END;
  22.    END;
  23.  
  24. (*-------------------------------------------------------------------------*)
  25. (*      Der menschliche Spieler ist am Zug und fuehrt denselben aus        *)
  26.  
  27. PROCEDURE  m_zug;
  28.  
  29.    VAR  anzahl, index, zug  : INTEGER;
  30.         ok, Exit            : BOOLEAN;
  31.         zeichen             :    CHAR;
  32.  
  33.    BEGIN
  34.      ok := FALSE;  Exit := TRUE;
  35.      (*   Der menschliche Spieler gibt seinen Zug ein   *)
  36.      REPEAT
  37.        Write('Ihr Zug: ');
  38.        REPEAT
  39.          REPEAT
  40.            (* ein Zeichen ohne Bildschirmecho von der Tastatur lesen *)
  41.            Read(Kbd, zeichen)
  42.          UNTIL  zeichen  IN  ['1','2','3','4','5','6'];
  43.          zug := Ord(zeichen) - Ord('0');
  44.          IF  spiel[zug] <> 0  THEN  ok := TRUE
  45.        UNTIL  ok;
  46.        (*   Ausfuehrung  des  Zuges   *)
  47.        anzahl := spiel[zug];  spiel[zug] := 0;
  48.        FOR  index := 1  TO  anzahl  DO
  49.          BEGIN
  50.            zug := Succ(zug);
  51.            IF  zug = 14  THEN  zug := 0;
  52.            spiel[zug] := Succ(spiel[zug])
  53.          END;
  54.        IF  NOT Exit  THEN  Exit := TRUE
  55.        ELSE  IF  zug = 7  THEN  Exit := FALSE;
  56.        (*   Entleerung des gegenueberliegenden Feldes   *)
  57.        IF  (zug <> 7)  AND  (zug <> 0) THEN
  58.          IF  spiel[zug] = 1  THEN
  59.            BEGIN
  60.              spiel[7] := spiel[7] + spiel[14-zug];  spiel[14-zug] := 0
  61.            END;
  62.        (*   Spielende erreicht?   *)
  63.        IF spiel[1]+spiel[2]+spiel[3]+spiel[4]+spiel[5]+spiel[6] = 0 THEN
  64.          weiter := FALSE;
  65.        IF spiel[8]+spiel[9]+spiel[10]+spiel[11]+spiel[12]+spiel[13] = 0 THEN
  66.          weiter := FALSE;
  67.        (*   Ausgabe des Zuges und Vorbereitung des zweiten Zuges   *)
  68.        IF  NOT weiter  THEN  Exit := TRUE;
  69.        ausgabe;
  70.        GotoXY(18,18);  Write('           ');  GotoXY(18,18)
  71.      UNTIL Exit
  72.    END;
  73.  
  74. (*-------------------------------------------------------------------------*)
  75. (*   Der Computer ist am Zug, berechnet denselben und fuehrt ihn aus       *)
  76.  
  77. PROCEDURE  c_zug;
  78.  
  79.    VAR  index, anzahl, summe : INTEGER;
  80.         nochmal              : BOOLEAN;
  81.  
  82.    BEGIN
  83.      Write('Mein Zug: ');  stief := 0;  tiefe := 0;
  84.      (*   Erhoehung der Rechentiefe bei Erreichung des Endspiels   *)
  85.      nummer := Succ(nummer);
  86.      IF  nummer = 7  THEN  stark := stark + 2;
  87.      c_analyse;                 (*  Berechnung des besten Zuges   *)
  88.      Write(best_1-7:1);         (*  Der berechnete Zug wird ausgefuehrt   *)
  89.      REPEAT  UNTIL  KeyPressed; (*  auf Tastendruck warten *)
  90.      nochmal := FALSE;  anzahl := spiel[best_1];  spiel[best_1] := 0;
  91.      FOR  index := 1  TO  anzahl  DO
  92.        BEGIN
  93.          best_1 := Succ(best_1);
  94.          IF  best_1 = 14  THEN  best_1 := 0;
  95.          spiel[best_1] := Succ(spiel[best_1])
  96.        END;
  97.      IF  best_1 = 0  THEN  nochmal := TRUE
  98.      ELSE  IF  best_1 <> 7  THEN (* Entleerung des gegenueberl. Feldes *)
  99.        IF  spiel[best_1] = 1  THEN
  100.          BEGIN
  101.            spiel[0] := spiel[0] + spiel[14 - best_1];
  102.            spiel[14 - best_1] := 0
  103.          END;
  104.      (*   Spielende erreicht   *)
  105.      summe := spiel[1]+spiel[2]+spiel[3]+spiel[4]+spiel[5]+spiel[6];
  106.      IF  summe = 0  THEN  weiter := FALSE
  107.      ELSE  IF  zahl - spiel[0] - spiel[7] - summe = 0  THEN  weiter := FALSE;
  108.      ausgabe;  GotoXY(18,18);  Write('            ');  GotoXY(18,18);
  109.      IF  nochmal  AND  weiter  THEN  (*   Ausgabe des zweiten Zuges   *)
  110.        BEGIN
  111.          Write('Mein Zug:', best_2 - 7:2 );
  112.          REPEAT  UNTIL  KeyPressed;
  113.          anzahl := spiel[best_2];  spiel[best_2] := 0;
  114.          FOR  index := 1  TO  anzahl  DO
  115.            BEGIN
  116.              best_2 := Succ(best_2);
  117.              IF  best_2 = 14  THEN  best_2 := 0;
  118.              spiel[best_2] := Succ(spiel[best_2])
  119.            END;
  120.          IF  best_2 <> 0  THEN
  121.            IF  best_2 <> 7  THEN
  122.              IF  spiel[best_2] = 1  THEN
  123.                BEGIN
  124.                  spiel[0] := spiel[0] + spiel[14 - best_2];
  125.                  spiel[14 - best_2] := 0
  126.                END;
  127.          summe := spiel[1]+spiel[2]+spiel[3]+spiel[4]+spiel[5]+spiel[6];
  128.          IF  summe = 0  THEN  weiter := FALSE
  129.          ELSE  IF  zahl - spiel[0] - spiel[7] - summe = 0  THEN
  130.            weiter := FALSE;
  131.          ausgabe;  GotoXY(18,18);  Write('            ');  GotoXY(18,18);
  132.        END
  133.    END;
  134.  
  135. (*-------------------------------------------------------------------------*)
  136. (*                  Ermittlung des Siegers bei Spielende                   *)
  137.  
  138. PROCEDURE  spielende;
  139.  
  140.    VAR  erg  : INTEGER;
  141.         sign : CHAR;
  142.  
  143.    BEGIN
  144.      erg := spiel[0] - spiel[7];
  145.      IF  erg = 100  THEN  Write('Das Spiel endet unentschieden!');
  146.      IF  erg > 100  THEN  Write('Ich habe das Spiel gewonnen!');
  147.      IF  erg < 100  THEN  Write('Sie haben das Spiel gewonnen!');
  148.      GotoXY(18,20);                          (*   Noch ein Spiel?   *)
  149.      Write('Wollen Sie noch einmal spielen?  ( j / n )  ');
  150.      REPEAT
  151.        Read(Kbd, sign);  sign := UpCase(sign)
  152.      UNTIL  sign  IN  ['J','N'];
  153.      IF  sign = 'N'  THEN  fertig := TRUE
  154.    END;
  155.  
  156. (*-------------------------------------------------------------------------*)
  157. (*                      Ende von AWARMANG.                                 *)
  158.