home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 08 / einstieg / deckeln.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1988-12-15  |  16.9 KB  |  689 lines

  1.  
  2. (* ------------------------------------------- *)
  3. (*             Summe & Produkt                 *)
  4. (*    Spiel mit Multiplikation und Addition    *)
  5. (*                                             *)
  6. (*  (c) 1989 TOOLBOX &  Berthold Freier        *)
  7. (* ------------------------------------------- *)
  8.  
  9.  
  10. PROGRAM deckeln;
  11.  
  12.  
  13. USES Crt,Graph,Drivers;     (* benötigte Units *)
  14.  
  15. (* =========================================== *)
  16.                               (* Deklarationen *)
  17. TYPE
  18.   feldtyp = RECORD
  19.     x : BYTE;
  20.     y : BYTE;
  21.     zahl : BYTE;
  22.     wert : BYTE;
  23.     haeufig : BYTE;
  24.   END;
  25.   zweipointer = ARRAY[1..2] OF Pointer;
  26.  
  27. (* =========================================== *)
  28.                                  (* Konstanten *)
  29. CONST
  30.   feld : ARRAY [1..20] OF feldtyp =
  31.     ((x:1 ; y:1 ; zahl: 1 ; wert:0 ; haeufig:1),
  32.      (x:2 ; y:1 ; zahl: 2 ; wert:0 ; haeufig:3),
  33.      (x:3 ; y:1 ; zahl: 3 ; wert:0 ; haeufig:4),
  34.      (x:4 ; y:1 ; zahl: 4 ; wert:0 ; haeufig:6),
  35.      (x:1 ; y:2 ; zahl: 5 ; wert:0 ; haeufig:6),
  36.      (x:2 ; y:2 ; zahl: 6 ; wert:0 ; haeufig:9),
  37.      (x:3 ; y:2 ; zahl: 7 ; wert:0 ; haeufig:6),
  38.      (x:4 ; y:2 ; zahl: 8 ; wert:0 ; haeufig:7),
  39.      (x:1 ; y:3 ; zahl: 9 ; wert:0 ; haeufig:5),
  40.      (x:2 ; y:3 ; zahl:10 ; wert:0 ; haeufig:5),
  41.      (x:3 ; y:3 ; zahl:11 ; wert:0 ; haeufig:2),
  42.      (x:4 ; y:3 ; zahl:12 ; wert:0 ; haeufig:5),
  43.      (x:1 ; y:4 ; zahl:15 ; wert:0 ; haeufig:2),
  44.      (x:2 ; y:4 ; zahl:16 ; wert:0 ; haeufig:1),
  45.      (x:3 ; y:4 ; zahl:18 ; wert:0 ; haeufig:2),
  46.      (x:4 ; y:4 ; zahl:20 ; wert:0 ; haeufig:2),
  47.      (x:1 ; y:5 ; zahl:24 ; wert:0 ; haeufig:2),
  48.      (x:2 ; y:5 ; zahl:25 ; wert:0 ; haeufig:1),
  49.      (x:3 ; y:5 ; zahl:30 ; wert:0 ; haeufig:2),
  50.      (x:4 ; y:5 ; zahl:36 ; wert:0 ; haeufig:1));
  51.  
  52. (* =========================================== *)
  53.                                   (* Variablen *)
  54. VAR
  55.   name : ARRAY [1..2] OF STRING[8];
  56.   punkte : ARRAY [1..2] OF INTEGER;
  57.   augenzahl : ARRAY [1..2] OF BYTE;
  58.   deckel : zweipointer;
  59.   ch: CHAR;
  60.   zahlwert : STRING[2];
  61.   rundenzahl,
  62.   gespielt,
  63.   weggenommen,
  64.   spielerzahl,
  65.   spielstaerke,
  66.   spieler,
  67.   summe,
  68.   produkt,
  69.   wurfzahl,
  70.   wurfaugen : BYTE;
  71.   i,
  72.   kontrolle,
  73.   wuerfelx : INTEGER;
  74.   beenden : BOOLEAN;
  75.  
  76. (* =========================================== *)
  77.  
  78. PROCEDURE erklaerung;
  79.  
  80. BEGIN
  81.   ClrScr;
  82.   TextColor(11);
  83.   GotoXY(30,1);
  84.   Write('D E C K E L N');
  85.   GotoXY(30,3);
  86.   Write('Spielerklärung');
  87.   TextColor(7);
  88.   GotoXY(1,5);
  89.   Write('Dieses Spiel können 2 Personen gegen');
  90.   Write('einander oder 1 Person gegen den PC');
  91.   Write(' spielen.');
  92.   GotoXY(1,7);
  93.   Write('Ein Feld mit 20 Abteilungen enthält ');
  94.   Write('jeweils eine Zahl und einen Wert.');
  95.   GotoXY(1,9);
  96.   Write('Es wird mit zwei Würfeln geworfen, ');
  97.   Write('anschließend wählt der Spieler, ob er');
  98.   GotoXY(1,10);
  99.   Write('lieber die Summe oder das Produkt der');
  100.   Write(' erzielten Augen "deckeln" will.');
  101.   GotoXY(1,12);
  102.   Write('"Deckeln" heißt, daß der angegebene ');
  103.   Write('Wert dem Spieler gutgeschrieben wird');
  104.   Write(' und ');
  105.   GotoXY(1,13);
  106.   Write('zugleich ein Deckel über das gewählte');
  107.   Write(' Feld gestülpt wird, damit ist es ');
  108.   Write('nicht');
  109.   GotoXY(1,14);
  110.   Write('mehr wählbar.');
  111.   GotoXY(1,16);
  112.   Write('Gewonnen hat, wer am Ende der Runde');
  113.   Write(' die meisten Punkte erreicht hat.');
  114.   Delay(2000);
  115.   TextColor(3);
  116.   GotoXY(3,18);
  117.   Write('Und jetzt bitte einige Vorgaben zum');
  118.   Write(' Spiel:');
  119. END;
  120.  
  121. (* =========================================== *)
  122.  
  123. PROCEDURE spielereingaben;
  124.  
  125. VAR  eingabe : STRING;
  126.  
  127. BEGIN
  128.   GotoXY(3,20);                 (* Spielerzahl *)
  129.   Write('Wieviele Spieler wollen teilnehmen ');
  130.   Write('( 1 oder 2 ) ?');
  131.   REPEAT
  132.     ch:=ReadKey;
  133.   UNTIL ((ch='1') OR (ch='2'));
  134.   Val(ch,spielerzahl,kontrolle);
  135.   Write (' ',spielerzahl);
  136.   GotoXY(1,22);
  137.   Write('Bitte den Namen des ersten Spielers ');
  138.   Write('eingeben (bis 8 Buchstaben) : ');
  139.   Readln(eingabe);
  140.   name[1]:=Copy(eingabe,1,8);
  141.  
  142. (* ------------------------------------------- *)
  143.  
  144.   IF spielerzahl=2 THEN       (* Namenseingabe *)
  145.     BEGIN
  146.     GotoXY(1,23);
  147.     Write('Bitte den Namen des zweiten Spieler');
  148.     Write('s eingeben (bis 8 Buchstaben) : ');
  149.     Readln(eingabe);
  150.     name[2]:=Copy(eingabe,1,8);
  151.     END
  152.   ELSE
  153.     name[2]:='Computer';
  154.  
  155. (* ------------------------------------------- *)
  156.  
  157.   IF spielerzahl=1 THEN      (* Spielstärke PC *)
  158.     BEGIN
  159.     GotoXY(1,23);
  160.     Write('Wie soll der Computer spielen ?');
  161.     Write('     1 = schwach         2 = stark');
  162.     REPEAT
  163.       ch:=ReadKey;
  164.     UNTIL ((ch='1') OR (ch='2'));
  165.     Val(ch,spielstaerke,kontrolle);
  166.     Write (' ',spielstaerke);
  167.     END;
  168.   GotoXY(1,25);
  169.   Write('Nach wieviel Runden wird abgebrochen ');
  170.   Write('( 10 - 50 ) ? Mit ENTER abschließen !');
  171.   REPEAT
  172.     GotoXY(75,25);
  173.     Readln(eingabe);
  174.     Val(eingabe,rundenzahl,kontrolle);
  175.   UNTIL ((rundenzahl>9) AND (rundenzahl<51));
  176. END;
  177.  
  178. (* =========================================== *)
  179.  
  180. PROCEDURE initialisierung    (*Graphiktreiber *);
  181.  
  182. VAR
  183.   GraphDriver,GraphMode : INTEGER;
  184.  
  185. (* ------------------------------------------- *)
  186.  
  187. PROCEDURE Abort(Msg : STRING);
  188.   BEGIN
  189.   Writeln(Msg, ': ', GraphErrorMsg(GraphResult));
  190.   Halt(1);
  191. END;
  192.  
  193. (* ------------------------------------------- *)
  194.  
  195. BEGIN
  196.   IF RegisterBGIdriver(@CGADriverProc) < 0 THEN
  197.     Abort('CGA');
  198.   GraphDriver:=CGA;
  199.   GraphMode:=CGAC1;
  200.   InitGraph(GraphDriver,GraphMode,'');
  201.   IF GraphResult <> 0 THEN
  202.     BEGIN
  203.     Write ('Fehler bei Initialisierung der ');
  204.     Write ('Graphik :',GraphDriver);
  205.     Writeln ('Bitte RETURN drücken ');
  206.     Readln;halt;
  207.     END;
  208. END;
  209.  
  210. (* =========================================== *)
  211.  
  212. PROCEDURE deckeleinlesen;
  213.  
  214. VAR groesse : INTEGER;
  215.  
  216. BEGIN
  217.   ClearViewPort;
  218.   FOR i:=1 TO 2 DO
  219.   BEGIN
  220.     SetColor(i);
  221.     SetFillStyle(CloseDotFill,i);
  222.     Ellipse(i*30,40,0,360,14,19);
  223.     FloodFill(i*30,40,i);
  224.     groesse:=ImageSize(i*30-14,21,i*30+14,59);
  225.     GetMem(deckel[i],groesse);
  226.     GetImage(i*30-14,21,i*30+14,59,deckel[i]^);
  227.   END;
  228. END;
  229.  
  230. (* =========================================== *)
  231.  
  232. PROCEDURE wertbelegung;
  233.  
  234. BEGIN
  235.   FOR i:=1 TO 20 DO
  236.     feld[i].wert:=random(5)+1;
  237. END;
  238.  
  239. (* =========================================== *)
  240.  
  241. PROCEDURE spielfeld;
  242.  
  243. BEGIN
  244.   SetTextJustify(CenterText,CenterText);
  245.   FOR i:=1 TO 20 DO
  246.   BEGIN
  247.  
  248. (* ------------------------------------------- *)
  249.  
  250.     SetColor(1);                  (* Wertmarke *)
  251.     Str(feld[i].wert,zahlwert);
  252.     OutTextXY(feld[i].x*30-15,feld[i].y*40-12,
  253.       zahlwert);
  254.     Circle(feld[i].x*30-15,feld[i].y*40-13,8);
  255.  
  256. (* ------------------------------------------- *)
  257.  
  258.     SetColor(2);                       (* Zahl *)
  259.     Str(feld[i].zahl,zahlwert);
  260.     OutTextXY(feld[i].x*30-15,feld[i].y*40-27,
  261.       zahlwert);
  262.  
  263. (* ------------------------------------------- *)
  264.  
  265.     SetColor(3);                     (* Rahmen *)
  266.     Ellipse(feld[i].x*30-15,feld[i].y*40-21,0,
  267.       360,14,19);
  268.   END;
  269.  
  270. (* ------------------------------------------- *)
  271.  
  272.   SetColor(1);                 (* Würfelrahmen *)
  273.   SetTextJustify(LeftText,BottomText);
  274.   OutTextXY(152,48,'╔═════╗     ╔═════╗');
  275.   FOR i:=7 TO 10 DO
  276.     OutTextXY(152,i*8,'║     ║     ║     ║');
  277.   OutTextXY(152,88,'╚═════╝     ╚═════╝');
  278.  
  279. (* ------------------------------------------- *)
  280.  
  281.   SetColor(3);                 (* Titelausgabe *)
  282.   OutTextXY(180,8,'D E C K E L N');
  283.  
  284. (* ------------------------------------------- *)
  285.  
  286.   SetColor(1);                 (* Namenausgabe *)
  287.   OutTextXY(156,22,name[1]);
  288.   OutTextXY(156,32,'0 Punkte');     (* Punkte *)
  289.   SetColor(2);
  290.   OutTextXY(252,22,name[2]);
  291.   OutTextXY(252,32,'0 Punkte');
  292. END;
  293.  
  294. (* =========================================== *)
  295.  
  296. PROCEDURE punktausgabe;
  297.  
  298. BEGIN
  299.   SetViewPort(148,24,165,32,ClipOn);
  300.   ClearViewPort;
  301.   SetViewPort(244,24,261,32,ClipOn);
  302.   ClearViewPort;
  303.   SetViewPort(0,0,319,199,ClipOn);
  304.   SetColor(1);
  305.   Str(punkte[1]:2,zahlwert);
  306.   OutTextXY(148,32,zahlwert);
  307.   SetColor(2);
  308.   Str(punkte[2]:2,zahlwert);
  309.   OutTextXY(244,32,zahlwert);
  310. END;
  311.  
  312. (* =========================================== *)
  313.  
  314. PROCEDURE wuerfelloeschen;
  315.  
  316. BEGIN
  317.   SetViewPort(wuerfelx,48,wuerfelx+40,80,ClipOn);
  318.   ClearViewPort;
  319.   SetViewPort(0,0,319,199,ClipOn);
  320. END;
  321.  
  322. (* =========================================== *)
  323.  
  324. PROCEDURE wuerfelaugen;
  325.  
  326. BEGIN
  327.  
  328.   CASE wurfzahl OF          (* Wievielter Wurf *)
  329.    1 : wuerfelx:=161;
  330.    2 : wuerfelx:=257;
  331.   END;
  332.   wuerfelloeschen;
  333.   SetColor(2);
  334.  
  335. (* ------------------------------------------- *)
  336.  
  337.   CASE wurfaugen OF    (* Augenzahl darstellen *)
  338.    1 : OutTextXY(wuerfelx,68,'  O  ');
  339.    2 : BEGIN
  340.          OutTextXY(wuerfelx,56,'O    ');
  341.          OutTextXY(wuerfelx,80,'    O');
  342.        END;
  343.    3 : BEGIN
  344.          OutTextXY(wuerfelx,56,'O    ');
  345.          OutTextXY(wuerfelx,68,'  O  ');
  346.          OutTextXY(wuerfelx,80,'    O');
  347.        END;
  348.    4 : BEGIN
  349.          OutTextXY(wuerfelx,56,'O   O');
  350.          OutTextXY(wuerfelx,80,'O   O');
  351.        END;
  352.    5 : BEGIN
  353.          OutTextXY(wuerfelx,56,'O   O');
  354.          OutTextXY(wuerfelx,68,'  O  ');
  355.          OutTextXY(wuerfelx,80,'O   O');
  356.        END;
  357.    6 : BEGIN
  358.          OutTextXY(wuerfelx,56,'O   O');
  359.          OutTextXY(wuerfelx,68,'O   O');
  360.          OutTextXY(wuerfelx,80,'O   O');
  361.        END;
  362.   END;
  363. END;
  364.  
  365. (* =========================================== *)
  366.  
  367. PROCEDURE wuerfeln;
  368. VAR text : STRING;
  369. BEGIN
  370.   SetColor(spieler);         (* Aufruf Spieler *)
  371.   text:=ConCat(name[spieler],' ist dran!');
  372.   OutTextXY(156,104,text);
  373.   OutTextXY(140,118,'Würfeln mit Leertaste!');
  374.   REPEAT
  375.     ch:=ReadKey;
  376.   UNTIL ch=' ';
  377.   sound(320);delay(50);nosound;delay(40);
  378.   sound(260);delay(50);nosound;delay(40);
  379.   sound(220);delay(50);nosound;
  380.   wurfzahl:=1;
  381.   wurfaugen:=Random(6)+1;;
  382.   augenzahl[1]:=wurfaugen;
  383.   wuerfelaugen;
  384.   wurfzahl:=2;
  385.   wurfaugen:=Random(6)+1;;
  386.   augenzahl[2]:=wurfaugen;
  387.   wuerfelaugen;
  388.   summe:=augenzahl[1]+augenzahl[2];
  389.   produkt:=augenzahl[1]*augenzahl[2];
  390. END;
  391.  
  392. (* =========================================== *)
  393.  
  394. PROCEDURE meldungloeschen;
  395. BEGIN
  396.   SetViewPort(140,93,319,199,ClipOn);
  397.   ClearViewPort;
  398.   SetViewPort(0,0,319,199,ClipOn);
  399. END;
  400.  
  401. (* =========================================== *)
  402.  
  403. PROCEDURE spielerzug;
  404. BEGIN
  405.   SetColor(2);             (* Auswahl anbieten *)
  406.   OutTextXY(180,140,'S');
  407.   OutTextXY(180,150,'P');
  408.   OutTextXY(180,160,'V');
  409.   SetColor(3);
  410.   OutTextXY(190,140,'umme');
  411.   OutTextXY(190,150,'rodukt');
  412.   OutTextXY(190,160,'erzichten');
  413.   OutTextXY(140,174,'S , P oder V drücken!');
  414.   REPEAT                      (* und auswählen *)
  415.     ch:=ReadKEY;
  416.     ch:=UpCase(ch);
  417.   UNTIL ch in ['S','P','V'];
  418.  
  419. (* ------------------------------------------- *)
  420.  
  421.   CASE ch OF                    (* Verzweigung *)
  422.    'S' : BEGIN
  423.       IF feld[summe].wert<>0 THEN
  424.         BEGIN
  425.         punkte[spieler]:=punkte[spieler]+
  426.           feld[summe].wert;
  427.         feld[summe].wert:=0;
  428.         PutImage(feld[summe].x*30-29,
  429.           feld[summe].y*40-40,deckel[spieler]^,
  430.           NormalPut);
  431.         INC(weggenommen,1);
  432.         END;
  433.       END;
  434.  
  435.    'P' : BEGIN
  436.     IF produkt>12 THEN
  437.       BEGIN
  438.       FOR i:=13 TO 20 DO
  439.         BEGIN
  440.          IF feld[i].zahl=produkt THEN produkt:=i;
  441.         END;
  442.       END;
  443.       IF feld[produkt].wert<>0 THEN
  444.         BEGIN
  445.         punkte[spieler]:=punkte[spieler]+
  446.           feld[produkt].wert;
  447.         feld[produkt].wert:=0;
  448.         PutImage(feld[produkt].x*30-29,
  449.           feld[produkt].y*40-40,deckel[spieler]^,
  450.           NormalPut);
  451.         INC(weggenommen,1);
  452.         END;
  453.       END;
  454.  
  455.    'V' : BEGIN
  456.        OutTextXY(180,190,'Schade !');
  457.        Delay(2000);
  458.       END;
  459.   END;                           (* CASE-Block *)
  460.   punktausgabe;
  461. END;
  462.  
  463. (* =========================================== *)
  464.  
  465. PROCEDURE weitermitleer;
  466. BEGIN
  467.   SetColor(3);
  468.   OutTextXY(140,190,'Weiter mit Leertaste!');
  469.   REPEAT
  470.     ch:=ReadKey;
  471.   UNTIL ch=' ';
  472. END;
  473.  
  474. (* =========================================== *)
  475.  
  476. PROCEDURE computerzug;
  477.  
  478. BEGIN
  479.   IF produkt>12 THEN      (* Ergebnis anpassen *)
  480.     BEGIN
  481.     FOR i:=13 TO 20 DO
  482.       BEGIN
  483.         IF feld[i].zahl=produkt THEN produkt:=i;
  484.       END;
  485.     END;
  486.  
  487. (* ------------------------------------------- *)
  488.  
  489.   IF ((feld[summe].wert=0) AND  (* Nichts geht *)
  490.     (feld[produkt].wert=0)) THEN
  491.   BEGIN
  492.     OutTextXY(140,170,'Ich muß verzichten');
  493.     weitermitleer;
  494.     punktausgabe;
  495.     Exit;
  496.   END;
  497.  
  498. (* ------------------------------------------- *)
  499.  
  500.   IF feld[summe].wert>feld[produkt].wert THEN
  501.   BEGIN
  502.     OutTextXY(140,170,'Ich nehme die Summe.');
  503.     weitermitleer;
  504.     punkte[2]:=punkte[2]+feld[summe].wert;
  505.     feld[summe].wert:=0;
  506.     PutImage(feld[summe].x*30-29,
  507.       feld[summe].y*40-40,deckel[2]^,NormalPut);
  508.     INC(weggenommen,1);
  509.     punktausgabe;
  510.     Exit;
  511.   END;
  512.  
  513. (* ------------------------------------------- *)
  514.  
  515.   IF feld[produkt].wert>feld[summe].wert THEN
  516.   BEGIN
  517.     OutTextXY(140,170,'Ich nehme das Produkt.');
  518.     weitermitleer;
  519.     punkte[2]:=punkte[2]+feld[produkt].wert;
  520.     feld[produkt].wert:=0;
  521.     PutImage(feld[produkt].x*30-29,
  522.      feld[produkt].y*40-40,deckel[2]^,NormalPut);
  523.     INC(weggenommen,1);
  524.     punktausgabe;
  525.     Exit;
  526.   END;
  527.  
  528. (* ------------------------------------------- *)
  529.  
  530.   IF feld[produkt].wert=feld[summe].wert THEN
  531.   BEGIN
  532.     IF spielstaerke=2 THEN
  533.     BEGIN
  534.       IF feld[summe].haeufig<
  535.         feld[produkt].haeufig THEN
  536.         BEGIN
  537.           MoveTo(140,170);
  538.           OutText('Ich nehme die Summe.');
  539.           weitermitleer;
  540.           punkte[2]:=punkte[2]+feld[summe].wert;
  541.           feld[summe].wert:=0;
  542.           PutImage(feld[summe].x*30-29,
  543.             feld[summe].y*40-40,deckel[2]^,
  544.           NormalPut);
  545.           INC(weggenommen,1);
  546.         END
  547.  
  548.       ELSE
  549.         BEGIN
  550.           MoveTo(140,170);
  551.           OutText('Ich nehme das Produkt.');
  552.           weitermitleer;
  553.           punkte[2]:=punkte[2]+
  554.             feld[produkt].wert;
  555.           feld[produkt].wert:=0;
  556.           PutImage(feld[produkt].x*30-29,
  557.           feld[produkt].y*40-40,deckel[2]^,
  558.           NormalPut);
  559.           INC(weggenommen,1);
  560.        END;
  561.      END;
  562.     punktausgabe;
  563.   END;
  564. END;
  565.  
  566. (* =========================================== *)
  567.  
  568. PROCEDURE hauptsteuerung;
  569.  
  570. BEGIN
  571.   spieler:=2;              (* Voreinstellungen *)
  572.   gespielt:=0;
  573.   weggenommen:=0;
  574.   punkte[1]:=0;
  575.   punkte[2]:=0;
  576.  
  577. (* ------------------------------------------- *)
  578.  
  579.   REPEAT                         (* Steuerteil *)
  580.     spieler:=3-spieler;
  581.     sound(400);delay(40);nosound;
  582.     IF spieler=2 THEN INC(gespielt,1);
  583.     wuerfeln;
  584.     IF ((spielerzahl=1) AND (spieler=2)) THEN
  585.       computerzug
  586.     ELSE
  587.       spielerzug;
  588.     meldungloeschen;
  589.     wuerfelx:=161;
  590.     wuerfelloeschen;
  591.     wuerfelx:=257;
  592.     wuerfelloeschen;
  593.   UNTIL ((weggenommen=20) OR
  594.     (gespielt=rundenzahl));
  595. END;
  596.  
  597. (* =========================================== *)
  598.  
  599. PROCEDURE ergebnismeldung;
  600. BEGIN
  601.   TextMode(LastMode);
  602.   ClrScr;
  603.   TextBackGround(8);
  604.   TextColor(11);
  605.   GotoXY(30,1);
  606.   Write('D E C K E L N');
  607.   GotoXY(30,3);
  608.   Write('Endergebnis :');
  609.   TextColor(7);
  610.   GotoXY(25,8);
  611.   Write(name[1],' erreichte ',punkte[1]);
  612.   Write(' Punkte.');
  613.   GotoXY(25,10);
  614.   Write(name[2],' erreichte ',punkte[2]);
  615.   Write(' Punkte.');
  616.   TextColor(2);
  617.   GotoXY(25,14);
  618.  
  619. (* ------------------------------------------- *)
  620.  
  621.   IF punkte[1]=punkte[2] THEN    (* Auswertung *)
  622.     Write('Es gab ein Unentschieden !');
  623.   IF punkte[1]>punkte[2] THEN
  624.   BEGIN
  625.     Write(name[1],' hat gewonnen !');
  626.     GotoXY(25,20);
  627.     TextColor(7);
  628.     Write('Herzlichen Glückwunsch !');
  629.   END;
  630.   IF punkte[1]<punkte[2] THEN
  631.   BEGIN
  632.     Write(name[2],' hat gewonnen !');
  633.     GotoXY(25,20);
  634.     TextColor(7);
  635.     Write('Herzlichen Glückwunsch !');
  636.   END;
  637. END;
  638.  
  639. (* =========================================== *)
  640.  
  641. PROCEDURE wiederholungsfrage;
  642.  
  643. BEGIN
  644.   TextColor(2);
  645.   GotoXY(25,23);
  646.   Write('Noch ein Spiel ( J / N ) ?');
  647.   REPEAT
  648.     ch:=ReadKey;
  649.     ch:=UpCase(ch);
  650.   UNTIL ch in ['N','J'];
  651.   CASE ch OF
  652.   'N' : beenden:=TRUE;
  653.   'J' : beenden:=FALSE;
  654.   END;
  655.   SetGraphMode(CGAC1);
  656. END;
  657.  
  658. (* =========================================== *)
  659.  
  660. BEGIN                         (* Hauptprogramm *)
  661.   TextMode (C80);
  662.   Randomize;
  663.   beenden:=FALSE;
  664.   erklaerung;
  665.   spielereingaben;
  666.   initialisierung;
  667.   deckeleinlesen;
  668.  
  669. (* ------------------------------------------- *)
  670.  
  671.   REPEAT                      (* Hauptschleife *)
  672.     SetColor(1);
  673.     ClearViewPort;
  674.     wertbelegung;
  675.     spielfeld;
  676.     hauptsteuerung;
  677.     ergebnismeldung;
  678.     wiederholungsfrage;
  679.   UNTIL beenden=TRUE;
  680.  
  681. (* ------------------------------------------- *)
  682.  
  683.   CloseGraph;              (* Abschlußarbeiten *)
  684.   TextMode(LastMode);
  685.   ClrScr;
  686. END.                   (* Ende des Quelltextes *)
  687.  
  688. (* =========================================== *)
  689.