home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 03 / spiel / folge.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-09-04  |  5.3 KB  |  154 lines

  1. (**********************************************************)
  2. (*                                                        *)
  3. (*   Filename FOLGE.PAS                                   *)
  4. (*                                                        *)
  5. (*   TOOLBOX-Spezial III Echtzeitverarbeitung             *)
  6. (*                                                        *)
  7. (*   (C) TOOLBOX und Thomas Lang 1988                     *)
  8. (*                                                        *)
  9. (*   Dieses File enthält den Teil des Spiels, der eine    *)
  10. (*   Folge von Buchstaben generiert bzw. den Timeout      *)
  11. (*   dafür überwacht. Dies wird mit der Periodic Nummer   *)
  12. (*   1 gemacht.                                           *)
  13. (*                                                        *)
  14. (**********************************************************)
  15.  
  16. Procedure FolgeAusgeben;
  17. Var
  18.    I:Integer;
  19. Begin
  20.    DruckText('Folge ');
  21.    DruckInteger(FolgeNummer,2);
  22.    DruckText(': ');
  23.    GotoXY(FolgeSpalte,FolgeZeile+FolgeNummer);
  24.    Write(FolgeNummer:2);
  25.    GotoXY(FolgeSpalte+5,FolgeZeile+FolgeNummer);
  26.    For I:=1 To FolgenLaenge Do Begin
  27.       Write(Folge[I]);
  28.       DruckChar(Folge[I]);
  29.       End;
  30.    GotoXY(EingabeSpalte,FolgeZeile+FolgeNummer);
  31. End;
  32.  
  33. Procedure Statistik;
  34. Begin
  35.    DruckLn;
  36.    DruckText('Es wurden ');
  37.    DruckInteger(AnzahlRichtig,2);
  38.    DruckText(' Folgen richtig eingegeben, ');
  39.    GotoXY(1,FolgeZeile+MaxFolgen+1);
  40.    Write('Auswertung: Es wurden ');
  41.    Write(AnzahlRichtig);
  42.    Write(' Folgen richtig eingegeben, ');
  43.    If (AnzahlRichtig<MaxFolgen) Then Begin
  44.       DruckLn;
  45.       DruckInteger(MaxFolgen-AnzahlRichtig-AnzahlUnvoll,2);
  46.       DruckText(' Folgen falsch mit ');
  47.       DruckInteger(RichtigBuchstaben,2);
  48.       DruckText(' richtigen Buchstaben (von ');
  49.       DruckInteger(FolgenLaenge*(MaxFolgen
  50.                    -AnzahlRichtig-AnzahlUnvoll),2);
  51.       DruckText(')');
  52.       DruckLn;
  53.       DruckInteger(AnzahlUnvoll,2);
  54.       DruckText(' Folgen unvollständig mit ');
  55.       DruckInteger(RichtigUnvoll,2);
  56.       DruckText(' richtigen Buchstaben (von ');
  57.       DruckInteger(FolgenLaenge*AnzahlUnvoll,2);
  58.       DruckText(')');
  59.       DruckLn;
  60.       WriteLn;
  61.       Write(MaxFolgen-AnzahlRichtig-AnzahlUnvoll:2);
  62.       Write(' Folgen falsch mit ');
  63.       Write(RichtigBuchstaben:2);
  64.       Write(' richtigen Buchstaben (von ');
  65.       Write(FolgenLaenge*(MaxFolgen
  66.                    -AnzahlRichtig-AnzahlUnvoll):2);
  67.       WriteLn(')');
  68.       Write(AnzahlUnvoll:2);
  69.       Write(' Folgen unvollständig mit ');
  70.       Write(RichtigUnvoll:2);
  71.       Write(' richtigen Buchstaben (von ');
  72.       Write(FolgenLaenge*AnzahlUnvoll:2);
  73.       WriteLn(')');
  74.       End
  75.    Else Begin
  76.       DruckText('keine war falsch oder unvollständig');
  77.       Write('keine war falsch oder unvollständig');
  78.       End;
  79.    DruckLn;
  80.    GotoXY(18,25);
  81.    Write('Statistik ausdrucken, abbrechen mit Leertaste');
  82.    RestDrucken:=True;
  83. End;
  84.  
  85. Procedure PPeriodic1;
  86. Var
  87.    I:Integer;
  88.    Ch:Char;
  89. Begin
  90.    If FolgenGenerier Then Begin    (* also generieren *)
  91.       FolgeNummer:=FolgeNummer+1;
  92.       AnzahlEingaben:=0;
  93.       FolgeOk:=True;
  94.       FolgeEingeben:=True;
  95.       FolgenGenerier:=False;
  96.       If FolgeNummer>1 Then
  97.          FolgenZeit:=FolgenZeit-FolgenDelta;
  98.       Frequenz:=MinFrequenz;
  99.       SoundDelta:=(MaxFrequenz-MinFrequenz)/
  100.                   (FolgenZeit/TastenDelta);
  101.       For I:=1 To FolgenLaenge Do Begin
  102.                               (* beliebigen Buchstaben *)
  103.                               (* von A..Z generieren *)
  104.          Folge[I]:=Chr(Ord('A')+Random(Ord('Z')-Ord('A')));
  105.  
  106.          If (I>1) And (Folge[I]=Folge[I-1]) Then Begin
  107.                               (* gleiche Buchstaben *)
  108.                               (* sollen nicht direkt *)
  109.                               (* aufeinander folgen *)
  110.             If Folge[I]<>'Z' Then
  111.                Folge[I]:=Chr(Ord(Folge[I])+1)
  112.             Else
  113.                Folge[I]:='A';
  114.             End;
  115.          End;
  116.       FolgeAusgeben;
  117.       If FolgeNummer=1 Then Begin  (* nur bei 1. Folge *)
  118.                               (* Aufgabe der Tastaturab- *)
  119.                               (* frage in Aufgabenliste *)
  120.                               (* eintragen, danach trägt *)
  121.                               (* sie sich selbst ein *)
  122.  
  123.          TastenZeit:=TimeNow; (* kommt also sofort dran *)
  124.          PutPerAbs(2,TastenZeit);
  125.          End;
  126.  
  127.       PutPerDelta(1,FolgenZeit);
  128.       End
  129.  
  130.    Else Begin                 (* TimeOut überwachen *)
  131.       NoSound;
  132.       If (AnzahlEingaben<FolgenLaenge) And
  133.          (FolgeOk) Then Begin
  134.                               (* nicht alle eingegeben *)
  135.                               (* aber keinen Fehler *)
  136.          DruckInteger(AnzahlEingaben,6);
  137.          DruckText(' Buchstaben Ok, dann Zeit abgelaufen');
  138.          DruckLn;
  139.          GotoXY(BewertungsSpalte,FolgeZeile+FolgeNummer);
  140.          Write(AnzahlEingaben:1);
  141.          Write(' Ok, dann Zeit');
  142.          FolgeEingeben:=False;
  143.          AnzahlUnvoll:=AnzahlUnvoll+1;
  144.          RichtigUnvoll:=RichtigUnvoll+AnzahlEingaben;
  145.          End;
  146.       If FolgeNummer<MaxFolgen Then Begin
  147.          FolgenGenerier:=True;
  148.          PutPerDelta(1,500.0);     (* und bald neue Folge *)
  149.          End
  150.       Else
  151.          Statistik;
  152.       End;
  153. End;
  154.