Advertisement
Sauka1337

Untitled

Dec 20th, 2023
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 48.41 KB | None | 0 0
  1. program MemoryTrainerGame;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. uses
  7.   System.SysUtils,
  8.   Classes,
  9.   Windows;
  10.  
  11. const
  12.   AnimationFrames: array [0..3] of string = (
  13.     '|', '/', '-', '\');
  14.   FireworkColors: array [1..6] of Integer = (12, 14, 10, 13, 9, 11);
  15.  
  16. Type
  17.     TWordsArr = Array Of String;
  18.     TPosArr = Array Of Integer;
  19.  
  20. // тут вообще ничего не трогать никому руки откушу.
  21. procedure ClearScreen;
  22. var
  23.     stdout: THandle;
  24.     csbi: TConsoleScreenBufferInfo;
  25.     ConsoleSize: DWORD;
  26.     NumWritten: DWORD;
  27.     Origin: TCoord;
  28. begin
  29.     stdout := GetStdHandle(STD_OUTPUT_HANDLE);
  30.     Win32Check(stdout <> INVALID_HANDLE_VALUE);
  31.     Win32Check(GetConsoleScreenBufferInfo(stdout, csbi));
  32.     ConsoleSize := csbi.dwSize.X * csbi.dwSize.Y;
  33.     Origin.X := 0;
  34.     Origin.Y := 0;
  35.     Win32Check(FillConsoleOutputCharacter(stdout, ' ', ConsoleSize, Origin,
  36.       NumWritten));
  37.     Win32Check(FillConsoleOutputAttribute(stdout, csbi.wAttributes, ConsoleSize,
  38.       Origin, NumWritten));
  39.     Win32Check(SetConsoleCursorPosition(stdout, Origin));
  40. end;
  41. // дальше трогайте
  42.  
  43. procedure SetConsoleColor(Color: Integer);
  44. begin
  45.   SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color);
  46. end;
  47.  
  48. procedure GotoXY(X, Y: Integer);
  49. var
  50.   CursorPosition: TCoord;
  51. begin
  52.   CursorPosition.X := X - 1;
  53.   CursorPosition.Y := Y - 1;
  54.   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), CursorPosition);
  55. end;
  56.  
  57. procedure DrawFirework(X, Y: Integer; Color: Integer; FramePath: string);
  58. var
  59.   BurstFrame: TStringList;
  60.   Line: string;
  61.   LineCount, I: Integer;
  62. begin
  63.   BurstFrame := TStringList.Create;
  64.  
  65.   try
  66.     BurstFrame.LoadFromFile(FramePath);
  67.  
  68.     SetConsoleColor(Color);
  69.  
  70.     // Draw the firework tail
  71.     for I := 1 to BurstFrame.Count do
  72.     begin
  73.       GotoXY(X, Y - I);
  74.       Write(BurstFrame[I - 1]);
  75.     end;
  76.  
  77.     Sleep(100); // Adjust the speed of the animation
  78.  
  79.     SetConsoleColor(7); // Reset to default color
  80.   finally
  81.     BurstFrame.Free;
  82.   end;
  83. end;
  84.  
  85. procedure AdvancedFireworksAnimation;
  86. var
  87.   I, J: Integer;
  88.   FramePath, ExePath: string;
  89. begin
  90.   Randomize;
  91.   ExePath := ExtractFilePath(ParamStr(0));
  92.  
  93.   for I := 1 to 12 do // Number of fireworks
  94.   begin
  95.     for J := 1 to 9 do // Number of frames
  96.     begin
  97.       FramePath := ExePath + 'fireworks' + IntToStr(J) + '.txt'; // Replace with the actual path
  98.       DrawFirework(Random(80) + 1, Random(20) + 10, FireworkColors[Random(6) + 1], FramePath);
  99.       DrawFirework(Random(80) + 1, Random(20) + 50, FireworkColors[Random(6) + 1], FramePath);
  100.       DrawFirework(Random(80) + 1, Random(20) + 100, FireworkColors[Random(6) + 1], FramePath);
  101.       DrawFirework(Random(80) + 50, Random(20) + 100, FireworkColors[Random(6) + 1], FramePath);
  102.       DrawFirework(Random(80) + 50, Random(20) + 50, FireworkColors[Random(6) + 1], FramePath);
  103.       ClearScreen;
  104.     end;
  105.  
  106.     Sleep(300); // Pause between fireworks
  107.   end;
  108. end;
  109.  
  110. procedure DrawVictoryAnimation;
  111. const
  112.     CongratulationsMessage: array [1..8] of string = (
  113.     '╔═══╗─────────────╔╗───╔╗───╔╗',
  114.     '║╔═╗║────────────╔╝╚╗──║║──╔╝╚╗',
  115.     '║║─╚╬══╦═╗╔══╦═╦═╩╗╔╬╗╔╣║╔═╩╗╔╬╦══╦═╗╔══╗',
  116.     '║║─╔╣╔╗║╔╗╣╔╗║╔╣╔╗║║║║║║║║╔╗║║╠╣╔╗║╔╗╣══╣',
  117.     '║╚═╝║╚╝║║║║╚╝║║║╔╗║╚╣╚╝║╚╣╔╗║╚╣║╚╝║║║╠══║',
  118.     '╚═══╩══╩╝╚╩═╗╠╝╚╝╚╩═╩══╩═╩╝╚╩═╩╩══╩╝╚╩══╝',
  119.     '──────────╔═╝║',
  120.     '──────────╚══╝'
  121.   );
  122.  
  123. var
  124.   I : Integer;
  125. begin
  126.   SetConsoleColor(10); // Set color to green
  127.  
  128.   for I := 1 to Length(CongratulationsMessage) do
  129.   begin
  130.     GotoXY(80, 20 + I);
  131.     Write(CongratulationsMessage[I]);
  132.     Sleep(100); // Adjust the speed of the animation
  133.   end;
  134.  
  135.   SetConsoleColor(7); // Reset to default color
  136. end;
  137.  
  138. Function CheckWordsEquality(Const WordFromData, InputedWord: String): Boolean;
  139. Var
  140.     I, Pos: Integer;
  141. Begin
  142.     Pos := Length(InputedWord) + 1;
  143.     For I := 1 To Length(WordFromData) Do
  144.     Begin
  145.         If Not(WordFromData[I] = InputedWord[Pos - I]) Then
  146.         Begin
  147.             CheckWordsEquality := False;
  148.             Exit();
  149.         End;
  150.     End;
  151.     CheckWordsEquality := True;
  152. End;
  153.  
  154. Function FindWordPos(Const Arr: TWordsArr; InputedWord: String): Integer;
  155. Var
  156.     I: Integer;
  157. Begin
  158.     for I := Low(Arr) to High(Arr) do
  159.     Begin
  160.         if CompareText(Arr[I], InputedWord) = 0 then
  161.         Begin
  162.             FindWordPos := I;
  163.             Exit();
  164.         End;
  165.     End;
  166.     FindWordPos := -1;
  167. End;
  168.  
  169. function CheckWordsExistanceInArr(Const Arr, InputedWords: TWordsArr): Boolean;
  170. Var
  171.     I, J, CountArr, CountInputed: Integer;
  172. Begin
  173.     for I := Low(InputedWords) to High(InputedWords) do
  174.     Begin
  175.         CountArr := 0;
  176.         CountInputed := 0;
  177.         for J := Low(Arr) to High(Arr) do
  178.         Begin
  179.             if CompareText(Arr[J], InputedWords[I]) = 0 then
  180.                 Inc(CountArr);
  181.             if CompareText(InputedWords[J], InputedWords[I]) = 0 then
  182.                 Inc(CountInputed);
  183.         End;
  184.         if CountArr <> CountInputed then
  185.         Begin
  186.             CheckWordsExistanceInArr := False;
  187.             Exit;
  188.         End;
  189.     End;
  190.     CheckWordsExistanceInArr := True;
  191. End;
  192.  
  193. function CheckWordsOrder(WordsFromData, InputedWords: TWordsArr): Boolean;
  194. var
  195.     I: Integer;
  196. begin
  197.     Result := True;
  198.     if Length(WordsFromData) <> Length(InputedWords) then
  199.     begin
  200.         Result := False;
  201.         Exit;
  202.     end;
  203.     for I := Low(WordsFromData) to High(WordsFromData) do
  204.     begin
  205.         if WordsFromData[I] <> InputedWords[I] then
  206.         begin
  207.             Result := False;
  208.             break;
  209.         end;
  210.     end;
  211. end;
  212.  
  213. function ReverseString(const S: string): string;
  214. var
  215.     I: Integer;
  216. begin
  217.     SetLength(Result, Length(S));
  218.     for I := 1 to Length(S) do
  219.     begin
  220.         Result[I] := S[Length(S) - I + 1];
  221.     end;
  222. end;
  223.  
  224. function ReverseWords(Words: TWordsArr): TWordsArr;
  225. var
  226.     I: Integer;
  227. begin
  228.     SetLength(Result, Length(Words));
  229.     for I := Low(Words) to High(Words) do
  230.     begin
  231.         Result[I] := ReverseString(Words[I]);
  232.     end;
  233. end;
  234.  
  235. function ReverseArr(Arr: TWordsArr): TWordsArr;
  236. var
  237.     I: Integer;
  238. begin
  239.     SetLength(Result, Length(Arr));
  240.     for I := Low(Arr) to High(Arr) do
  241.     begin
  242.         Result[High(Arr) - I] := Arr[I];
  243.     end;
  244. end;
  245.  
  246. function ReadWordsFromFile(const FileName: string): TStringList;
  247. var
  248.     Reader: TStreamReader;
  249.     S: string;
  250.     Words: TStringList;
  251. begin
  252.     Words := TStringList.Create;
  253.     Reader := TStreamReader.Create(FileName, TEncoding.UTF8);
  254.     try
  255.         while not Reader.EndOfStream do
  256.         begin
  257.             S := Reader.ReadLine;
  258.             Words.Add(S);
  259.         end;
  260.     finally
  261.         Reader.Free;
  262.     end;
  263.     Result := Words;
  264. end;
  265.  
  266. Function GetRandomWord(Words: TStringList): string;
  267. var
  268.     Index: Integer;
  269. begin
  270.     Index := Random(Words.Count);
  271.     Result := Words[Index];
  272. end;
  273.  
  274. procedure CongratulateUser;
  275. begin
  276.     Sleep(1000);
  277.     GotoXY(80, 20);
  278.     Writeln('Поздравляем! Вы успешно прошли все этапы.');
  279.     GotoXY(80, 22);
  280.     Writeln('Вы продемонстрировали отличную память и внимательность.');
  281.     GotoXY(80, 24);
  282.     Writeln('Спасибо за игру. Надеемся, вам понравилось!');
  283.     Sleep(4000);
  284.     ClearScreen;
  285.     DrawVictoryAnimation;
  286.     Sleep(3000);
  287.     ClearScreen;
  288.     AdvancedFireworksAnimation;
  289. end;
  290.  
  291. procedure DisplayRulesFirstStageAndContinue;
  292. var
  293.     input: string;
  294. begin
  295.     Writeln('Этап 1: На экране на некоторое время отображается слово из 5 букв, а затем пропадает.');
  296.     Writeln('Пользователь вводит с клавиатуры это же слово, но в обратном порядке («перевернутым»)');
  297.     Writeln;
  298.     Writeln('Например:');
  299.     Writeln;
  300.     Writeln('Исходное слово - ');
  301.     Writeln;
  302.     Writeln('СТОЛБ');
  303.     Writeln;
  304.     Writeln('Слово, введенное пользователем');
  305.     Writeln;
  306.     Writeln('БЛОТС');
  307.     Writeln;
  308.     Writeln('ОТВЕТ ВЕРНЫЙ!');
  309.     Writeln;
  310.     Writeln('Программа анализирует введенную строку и выдает сообщение о верном (пользователь ввел');
  311.     Writeln('«перевернутое» слово правильно) или неверном вводе');
  312.     Writeln;
  313.     Writeln('Затем появляется новое слово с тем же количеством букв и ожидается новый ввод');
  314.     Writeln('«перевернутого» слова. После правильно введенных трех подряд верных «перевернутых» слов');
  315.     Writeln('начинают выводиться слова длиннее на одну букву и так до тех пор, пока пользователь не введет');
  316.     Writeln('подряд три «перевернутых» 8 буквенных слова. На том этап 1 завершен.');
  317.     repeat
  318.         Writeln;
  319.         Writeln('Хотите продолжить? (д/н)');
  320.         ReadLn(input);
  321.     until (input = 'Д') or (input = 'д') or (input = 'Н') or (input = 'н');
  322.     if (input = 'Н') or (input = 'н') then
  323.         Halt;
  324. end;
  325.  
  326. procedure DisplayRulesSecondStageAndContinue;
  327. var
  328.     input: string;
  329. begin
  330.     Writeln('Этап 2: На экране на некоторое время отображается последовательность из 5 различных слов, а');
  331.     Writeln('затем пропадает. Пользователь вводит с клавиатуры эти же слова в произвольном порядке.');
  332.     Writeln;
  333.     Writeln('Программа анализирует введенную строку и выдает сообщение о верном (все слова угаданы а');
  334.     Writeln('порядок их следования друг за другом значения не имеет) или неверном (пользователь вспомнил');
  335.     Writeln('не все слова) вводе.');
  336.     Writeln;
  337.     Writeln('Например:');
  338.     Writeln;
  339.     Writeln('Исходная последовательность КРОСС МАКСИМУМ СТОЛБ ГОЛОВА ТАБЛИЦА');
  340.     Writeln;
  341.     Writeln('Последовательность пользователя ГОЛОВА ТАБЛИЦА МАКСИМУМ СТОЛБ КРОСС');
  342.     Writeln;
  343.     Writeln('ОТВЕТ ВЕРНЫЙ!');
  344.     Writeln;
  345.     Writeln('Затем появляется новая последовательность из других 5 слов. После правильно введенных трех');
  346.     Writeln('подряд последовательностей из 5 слов начинают выводиться последовательности из 6 слов и так');
  347.     Writeln('до тех пор, пока пользователь не введет подряд три правильных последовательности из 8 слов.');
  348.     Writeln('На том этап 2 завершен.');
  349.     repeat
  350.         Writeln;
  351.         Writeln('Хотите продолжить? (д/н)');
  352.         ReadLn(input);
  353.     until (input = 'Д') or (input = 'д') or (input = 'Н') or (input = 'н');
  354.     if (input = 'Н') or (input = 'н') then
  355.         Halt;
  356. end;
  357.  
  358. procedure DisplayRulesThirdStageAndContinue;
  359. var
  360.     input: string;
  361. begin
  362.     Writeln('Этап 3: Аналогичен этапу 2. Введенная пользователем последовательность считается верной,');
  363.     Writeln('если совпали не только слова, но и порядок их следования друг за другом.');
  364.     Writeln;
  365.     Writeln('Например:');
  366.     Writeln;
  367.     Writeln('Исходная последовательность КРОСС МАКСИМУМ СТОЛБ ГОЛОВА ТАБЛИЦА');
  368.     Writeln;
  369.     Writeln('Последовательность пользователя КРОСС МАКСИМУМ СТОЛБ ГОЛОВА ТАБЛИЦА');
  370.     Writeln;
  371.     Writeln('ОТВЕТ ВЕРНЫЙ!');
  372.     repeat
  373.         Writeln;
  374.         Writeln('Хотите продолжить? (д/н)');
  375.         ReadLn(input);
  376.     until (input = 'Д') or (input = 'д') or (input = 'Н') or (input = 'н');
  377.     if (input = 'Н') or (input = 'н') then
  378.         Halt;
  379. end;
  380.  
  381. procedure DisplayRulesFourthStageAndContinue;
  382. var
  383.     input: string;
  384. begin
  385.     Writeln('Этап 4: Аналогичен этапу 2. Только пользователь должен вводить последовательность «перевернутой»');
  386.     Writeln;
  387.     Writeln('Например:');
  388.     Writeln;
  389.     Writeln('Исходная последовательность КРОСС МАКСИМУМ СТОЛБ ГОЛОВА ТАБЛИЦА');
  390.     Writeln;
  391.     Writeln('Последовательность пользователя ТАБЛИЦА ГОЛОВА СТОЛБ МАКСИМУМ КРОСС');
  392.     Writeln;
  393.     Writeln('ОТВЕТ ВЕРНЫЙ!');
  394.     repeat
  395.         Writeln;
  396.         Writeln('Хотите продолжить? (д/н)');
  397.         ReadLn(input);
  398.     until (input = 'Д') or (input = 'д') or (input = 'Н') or (input = 'н');
  399.     if (input = 'Н') or (input = 'н') then
  400.         Halt;
  401. end;
  402.  
  403. procedure DisplayRulesFifthStageAndContinue;
  404. var
  405.     input: string;
  406. begin
  407.     Writeln('Этап 5: Аналогичен этапу 2. Только пользователь должен вводить каждое слово «перевернутым»');
  408.     Writeln;
  409.     Writeln('Например:');
  410.     Writeln;
  411.     Writeln('Исходная последовательность КРОСС МАКСИМУМ СТОЛБ ГОЛОВА ТАБЛИЦА');
  412.     Writeln;
  413.     Writeln('Последовательность пользователя БЛОТС ССОРК АЦИЛБАТ АВОЛОГ МУМИСКАМ');
  414.     Writeln;
  415.     Writeln('ОТВЕТ ВЕРНЫЙ!');
  416.     repeat
  417.         Writeln;
  418.         Writeln('Хотите продолжить? (д/н)');
  419.         ReadLn(input);
  420.     until (input = 'Д') or (input = 'д') or (input = 'Н') or (input = 'н');
  421.     if (input = 'Н') or (input = 'н') then
  422.         Halt;
  423. end;
  424.  
  425. {
  426. procedure DrawLoadingAnimation;
  427. var
  428.   FrameIndex: Integer;
  429. begin
  430.   for FrameIndex := 1 to 4 do
  431.   begin
  432.     writeln('               _________________________________________________');
  433.     writeln('              /                                                 \');
  434.     writeln('             |    ___________________________________________    |');
  435.     writeln('             |   |                                           |   |');
  436.     writeln('             |   |  C:\> _                                   |   |');
  437.     writeln('             |   |                                           |   |');
  438.     writeln('             |   |                                           |   |');
  439.     writeln('             |   |                                           |   |');
  440.     writeln('             |   |    ──────────────────────────────────     |   |');
  441.     writeln('             |   |   │ Приветствуем в тренажере памяти! │    |   |');
  442.     writeln('             |   |    ──────────────────────────────────     |   |');
  443.     writeln('             |   |                                           |   |');
  444.     Writeln('             |   |     Loading ' + AnimationFrames[FrameIndex - 1] + '                             |   |');
  445.     writeln('             |   |                                           |   |');
  446.     writeln('             |   |                                           |   |');
  447.     writeln('             |   |                                           |   |');
  448.     writeln('             |   |                                           |   |');
  449.     writeln('             |   |___________________________________________|   |');
  450.     writeln('             |                                                   |');
  451.     writeln('              \_________________________________________________/');
  452.     writeln('                      \___________________________________/');
  453.     writeln('                   ___________________________________________');
  454.     writeln('                _-''    .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.  --- `-_');
  455.     writeln('             _-''.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.  .-.-.`-_');
  456.     writeln('          _-''.-.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-`__`. .-.-.-.`-_');
  457.     writeln('       _-''.-.-.-.-. .-----.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-----. .-.-.-.-.`-');
  458.     writeln('    _-''.-.-.-.-.-. .---.-. .-------------------------. .-.---. .---.-.-.-.`-');
  459.     writeln('   :-------------------------------------------------------------------------:');
  460.     writeln('   `---._.-------------------------------------------------------------._.---''');
  461.     Sleep(300); // Pause for 1 second
  462. //    ClearScreen;
  463.     Write(#13); // Move cursor back to the beginning of the line
  464.   end;
  465. end;
  466. }
  467.  
  468.  
  469. procedure DrawLoadingAnimation;
  470. var
  471.   FrameIndex: Integer;
  472.   Frame: string;
  473. begin
  474.   for FrameIndex := 1 to 4 do
  475.   begin
  476.     Frame := sLineBreak + sLineBreak +
  477.       '               _________________________________________________' + sLineBreak +
  478.       '              /                                                 \' + sLineBreak +
  479.       '             |    ___________________________________________    |' + sLineBreak +
  480.       '             |   |                                           |   |' + sLineBreak +
  481.       '             |   |  C:\> _                                   |   |' + sLineBreak +
  482.       '             |   |                                           |   |' + sLineBreak +
  483.       '             |   |                                           |   |' + sLineBreak +
  484.       '             |   |                                           |   |' + sLineBreak +
  485.       '             |   |     Loading... ' + AnimationFrames[FrameIndex - 1] + '                          |   |' + sLineBreak +
  486.       '             |   |                                           |   |' + sLineBreak +
  487.       '             |   |                                           |   |' + sLineBreak +
  488.       '             |   |                                           |   |' + sLineBreak +
  489.       '             |   |                                           |   |' + sLineBreak +
  490.       '             |   |                                           |   |' + sLineBreak +
  491.       '             |   |                                           |   |' + sLineBreak +
  492.       '             |   |                                           |   |' + sLineBreak +
  493.       '             |   |                                           |   |' + sLineBreak +
  494.       '             |   |___________________________________________|   |' + sLineBreak +
  495.       '             |                                                   |' + sLineBreak +
  496.       '              \_________________________________________________/' + sLineBreak +
  497.       '                      \___________________________________/' + sLineBreak +
  498.       '                    ___________________________________________' + sLineBreak +
  499.       '                 _-''    .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.  --- `-_' + sLineBreak +
  500.       '              _-''.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.  .-.-.`-_' + sLineBreak +
  501.       '           _-''.-.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-`__`. .-.-.-.`-_' + sLineBreak +
  502.       '        _-''.-.-.-.-. .-----.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-----. .-.-.-.-.`-' + sLineBreak +
  503.       '     _-''.-.-.-.-.-. .---.-. .-------------------------. .-.---. .---.-.-.-.`-' + sLineBreak +
  504.       '   :-------------------------------------------------------------------------:' + sLineBreak +
  505.       '   `---._.-------------------------------------------------------------._.---'+''+'' + sLineBreak;
  506. //    ClearScreen;
  507.     Write(Frame);
  508.     Sleep(150); // Pause for 1 second
  509. //    ClearScreen;
  510.     Write(#13); // Move cursor back to the beginning of the line
  511.   end;
  512. end;
  513.  
  514. procedure RunLoadingScreen(DurationInSeconds: Integer);
  515. var
  516.   StartTime, CurrentTime: DWORD;
  517. begin
  518.   StartTime := GetTickCount;
  519.   repeat
  520.     CurrentTime := GetTickCount;
  521.     DrawLoadingAnimation;
  522.   until (CurrentTime - StartTime) >= (DurationInSeconds * 1000);
  523. end;
  524.  
  525. Function AskRules(): string;
  526. var
  527.     input: string;
  528. begin
  529. //    Writeln('                        ────────────────────────────────────── ');
  530. //    Writeln('                      *│ Приветствуем вас в тренажере памяти! │* ');
  531. //    Writeln('                        ────────────────────────────────────── ');
  532. {
  533.     writeln('               _________________________________________________');
  534.     writeln('              /                                                 \');
  535.     writeln('             |    ___________________________________________    |');
  536.     writeln('             |   |                                           |   |');
  537.     writeln('             |   |  C:\> _                                   |   |');
  538.     writeln('             |   |                                           |   |');
  539.     writeln('             |   |                                           |   |');
  540.     writeln('             |   |                                           |   |');
  541.     writeln('             |   |    ──────────────────────────────────     |   |');
  542.     writeln('             |   |   │ Приветствуем в тренажере памяти! │    |   |');
  543.     writeln('             |   |    ──────────────────────────────────     |   |');
  544.     writeln('             |   |                                           |   |');
  545.     writeln('             |   |                                           |   |');
  546.     writeln('             |   |                                           |   |');
  547.     writeln('             |   |                                           |   |');
  548.     writeln('             |   |                                           |   |');
  549.     writeln('             |   |___________________________________________|   |');
  550.     writeln('             |                                                   |');
  551.     writeln('              \_________________________________________________/');
  552.     writeln('                      \___________________________________/');
  553.     writeln('                   ___________________________________________');
  554.     writeln('                _-''    .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.  --- `-_');
  555.     writeln('             _-''.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.  .-.-.`-_');
  556.     writeln('          _-''.-.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-`__`. .-.-.-.`-_');
  557.     writeln('       _-''.-.-.-.-. .-----.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-----. .-.-.-.-.`-');
  558.     writeln('    _-''.-.-.-.-.-. .---.-. .-------------------------. .-.---. .---.-.-.-.`-');
  559.     writeln('   :-------------------------------------------------------------------------:');
  560.     writeln('   `---._.-------------------------------------------------------------._.---''');
  561. }
  562.     RunLoadingScreen(2);
  563.     ClearScreen;
  564.     writeln('               _________________________________________________');
  565.     writeln('              /                                                 \');
  566.     writeln('             |    ___________________________________________    |');
  567.     writeln('             |   |                                           |   |');
  568.     writeln('             |   |  C:\> _                                   |   |');
  569.     writeln('             |   |                                           |   |');
  570.     writeln('             |   |                                           |   |');
  571.     writeln('             |   |                                           |   |');
  572.     writeln('             |   |    ──────────────────────────────────     |   |');
  573.     writeln('             |   |   │ Приветствуем в тренажере памяти! │    |   |');
  574.     writeln('             |   |    ──────────────────────────────────     |   |');
  575.     writeln('             |   |                                           |   |');
  576.     writeln('             |   |                                           |   |');
  577.     writeln('             |   |                   PLAY                    |   |');
  578.     writeln('             |   |                                           |   |');
  579.     writeln('             |   |                                           |   |');
  580.     writeln('             |   |___________________________________________|   |');
  581.     writeln('             |                                                   |');
  582.     writeln('              \_________________________________________________/');
  583.     writeln('                      \___________________________________/');
  584.     writeln('                   ___________________________________________');
  585.     writeln('                _-''    .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.  --- `-_');
  586.     writeln('             _-''.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--.  .-.-.`-_');
  587.     writeln('          _-''.-.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-`__`. .-.-.-.`-_');
  588.     writeln('       _-''.-.-.-.-. .-----.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-----. .-.-.-.-.`-');
  589.     writeln('    _-''.-.-.-.-.-. .---.-. .-------------------------. .-.---. .---.-.-.-.`-');
  590.     writeln('   :-------------------------------------------------------------------------:');
  591.     writeln('   `---._.-------------------------------------------------------------._.---''');
  592.     Writeln;
  593.     Writeln('Хотите ли вы ознакомится с правилами каждого из этапов или желаете пропустить обучение?');
  594. //    Writeln('                   пропустить обучение?');
  595.     Writeln;
  596.     repeat
  597.         Writeln('Да, хочу ознакомиться / Нет, пропустить обучение (д/н)');
  598.         Writeln;
  599.         ReadLn(input);
  600.     until (input = 'Д') or (input = 'д') or (input = 'Н') or (input = 'н');
  601.     ClearScreen;
  602.     Result := input;
  603. end;
  604.  
  605. Function AskReady(): string;
  606. var
  607.     input: string;
  608. begin
  609.     Writeln('Вы готовы начать игру?');
  610.     repeat
  611.         Writeln('Да/Нет. (д/н)');
  612.         ReadLn(input);
  613.     until (input = 'Д') or (input = 'д') or (input = 'Н') or (input = 'н');
  614.     Result := input;
  615. end;
  616.  
  617. Function ChoiseDifficulty(): char;
  618. var
  619.     input: char;
  620. begin
  621.     Writeln('Пожалуйста, выберите уровень сложности. ');
  622.     Writeln;
  623.     Writeln('1 - Легкий. 1 Этап - 5 секунд. 2 Этап - 25 секунд. 3 Этап - 30 секунд. 4 Этап - 35 секунд. 5 Этап - 40 секунд. ');
  624.     Writeln;
  625.     Writeln('2 - Средний. 1 Этап - 4 секунд. 2 Этап - 20 секунд. 3 Этап - 25 секунд. 4 Этап - 30 секунд. 5 Этап - 35 секунд. ');
  626.     Writeln;
  627.     Writeln('3 - Сложный. 1 Этап - 2 секунд. 2 Этап - 10 секунд. 3 Этап - 15 секунд. 4 Этап - 15 секунд. 5 Этап - 20 секунд. ');
  628.     Writeln;
  629.     repeat
  630.         Writeln(' Легкий (1) | Средний (2) | Сложный (3) ');
  631.         Writeln;
  632.         ReadLn(input);
  633.     until (input = '1') or (input = '2') or (input = '3');
  634.     ClearScreen;
  635.     Result := input;
  636. end;
  637.  
  638. function Join(const Separator: string; const Words: array of string): string;
  639. var
  640.     I: Integer;
  641. begin
  642.     Result := '';
  643.     for I := Low(Words) to High(Words) do
  644.     begin
  645.         if I <> Low(Words) then
  646.             Result := Result + Separator;
  647.         Result := Result + Words[I];
  648.     end;
  649. end;
  650.  
  651. function Split(const Separator, input: string): TWordsArr;
  652. var
  653.     StringList: TStringList;
  654.     I: Integer;
  655. begin
  656.     StringList := TStringList.Create;
  657.     try
  658.         StringList.Delimiter := Separator[1];
  659.         StringList.StrictDelimiter := True;
  660.         StringList.DelimitedText := input;
  661.         SetLength(Result, StringList.Count);
  662.         for I := 0 to StringList.Count - 1 do
  663.             Result[I] := StringList[I];
  664.     finally
  665.         StringList.Free;
  666.     end;
  667. end;
  668.  
  669. var
  670.     WordsFromData, InputedWords: TWordsArr;
  671.     FileNames: array [0 .. 3] of string;
  672.     FileName: string;
  673.     Words: TStringList;
  674.     RandomWord, temp, input: string;
  675.     I, J, K, correctAnswers, roundsPassed: Integer;
  676.     ExePath: string;
  677.     diff: char;
  678.  
  679. begin
  680.     // Получить путь к исполняемому файлу
  681.     ExePath := ExtractFilePath(ParamStr(0));
  682.  
  683.     // Определить пути к файлам
  684.     FileNames[0] := ExePath + 'words-5.txt';
  685.     FileNames[1] := ExePath + 'words-6.txt';
  686.     FileNames[2] := ExePath + 'words-7.txt';
  687.     FileNames[3] := ExePath + 'words-8.txt';
  688.     FileName := ExePath + 'words-all.txt';
  689.     Randomize;
  690.     correctAnswers := 0;
  691.  
  692.     // stage 1
  693.     { Этап 1: На экране на некоторое время отображается слово из 5 букв, а затем пропадает.
  694.       Пользователь вводит с клавиатуры это же слово, но в обратном порядке («перевернутым»)
  695.       Например:
  696.       Исходное слово
  697.       Слово, введенное пользователем
  698.       ОТВЕТ ВЕРНЫЙ!
  699.       СТОЛБ
  700.       БЛОТС
  701.       Программа
  702.       анализирует введенную строку и выдает сообщение о верном (пользователь ввел
  703.       «перевернутое» слово правильно) или неверном вводе
  704.       Затем появляется новое слово с тем же количеством букв и ожидается новый ввод
  705.       «перевернутого» слова. После правильно введенных трех подряд верных «перевернутых» слов
  706.       начинают выводиться слова длиннее на одну букву и так до тех пор, пока пользователь не введет
  707.       подряд три «перевернутых» 8 буквенных слова. На том этап 1 завершен.
  708.     }
  709.     // можно вводить строку во время таймера!!!!! исправить потому что жесть как не честно атата
  710.     roundsPassed := 0;
  711.     correctAnswers := 0;
  712.     input := AskRules();
  713.     diff := ChoiseDifficulty();
  714.     if (input = 'Д') or (input = 'д') then
  715.     begin
  716.         DisplayRulesFirstStageAndContinue;
  717.         ClearScreen;
  718.     end;
  719.     case diff of
  720.         '1':
  721.             Writeln('На вашем уровне сложности у вас 5 секунд на этот этап');
  722.         '2':
  723.             Writeln('На вашем уровне сложности у вас 4 секунды на этот этап');
  724.         '3':
  725.             Writeln('На вашем уровне сложности у вас 2 секунды на этот этап');
  726.     end;
  727.     // Главный цикл программы
  728.     input := AskReady();
  729.     repeat
  730.         if (input = 'Н') or (input = 'н') then
  731.         begin
  732.             Writeln('ОК, начнем, когда вы будете готовы.');
  733.             input := AskReady();
  734.         end;
  735.     until (input = 'Д') or (input = 'д');
  736.     ClearScreen;
  737.     while roundsPassed < 4 do
  738.     begin
  739.         Words := ReadWordsFromFile(FileNames[roundsPassed]);
  740.         while correctAnswers < 3 do
  741.         begin
  742.             Writeln;
  743.             Writeln('Исходное слово: ');
  744.             Writeln;
  745.             RandomWord := GetRandomWord(Words);
  746.             Writeln(RandomWord);
  747.             Writeln;
  748.             case diff of
  749.                 '1':
  750.                     Sleep(5000);
  751.                 '2':
  752.                     Sleep(4000);
  753.                 '3':
  754.                     Sleep(2000);
  755.             end;
  756.  
  757.             ClearScreen; // Очистка консоли
  758.             Writeln('Введите это слово в обратном порядке:');
  759.             Writeln;
  760.             SetLength(InputedWords, 1);
  761.             ReadLn(InputedWords[0]);
  762.             if (InputedWords[0] = '52') then
  763.             begin
  764.                 roundsPassed := 4; // Завершить все этапы
  765.                 break;
  766.             end
  767.             else if (Length(RandomWord) = Length(InputedWords[0])) and
  768.               CheckWordsEquality(RandomWord, InputedWords[0]) then
  769.             begin
  770.                 Writeln;
  771.                 Writeln('ОТВЕТ ВЕРНЫЙ!');
  772.                 Inc(correctAnswers);
  773.             end
  774.             else
  775.             begin
  776.                 Writeln;
  777.                 Writeln('ОТВЕТ НЕВЕРНЫЙ!');
  778.                 correctAnswers := 0;
  779.             end;
  780.         end;
  781.         correctAnswers := 0;
  782.         Inc(roundsPassed);
  783.     end;
  784.  
  785.     // Сброс для следующего этапа
  786.     correctAnswers := 0;
  787.     { Этап 2: На экране на некоторое время отображается последовательность из 5 различных слов, а
  788.       затем пропадает. Пользователь вводит с клавиатуры эти же слова в произвольном порядке.
  789.       Программа анализирует введенную строку и выдает сообщение о верном (все слова угаданы а
  790.       порядок их следования друг за другом значения не имеет) или неверном (пользователь вспомнил
  791.       не все слова) вводе.
  792.       Например:
  793.       Исходная последовательность КРОСС МАКСИМУМ СТОЛБ ГОЛОВА ТАБЛИЦА
  794.       Последовательность пользователя ГОЛОВА ТАБЛИЦА МАКСИМУМ СТОЛБ КРОСС
  795.       ОТВЕТ ВЕРНЫЙ!
  796.       Затем появляется новая последовательность из других 5 слов. После правильно введенных трех
  797.       подряд последовательностей из 5 слов начинают выводиться последовательности из 6 слов и так
  798.       до тех пор, пока пользователь не введет подряд три правильных последовательности из 8 слов.
  799.       На том этап 2 завершен. }
  800.     if (input = 'Д') or (input = 'д') then
  801.     begin
  802.         DisplayRulesSecondStageAndContinue;
  803.         ClearScreen;
  804.     end;
  805.     roundsPassed := 0;
  806.     correctAnswers := 0;
  807.     case diff of
  808.         '1':
  809.             Writeln('На вашем уровне сложности у вас 25 секунд на этот этап');
  810.         '2':
  811.             Writeln('На вашем уровне сложности у вас 20 секунды на этот этап');
  812.         '3':
  813.             Writeln('На вашем уровне сложности у вас 10 секунды на этот этап');
  814.     end;
  815.     // Главный цикл программы
  816.     input := AskReady();
  817.     repeat
  818.         if (input = 'Н') or (input = 'н') then
  819.         begin
  820.             Writeln('ОК, начнем, когда вы будете готовы.');
  821.             input := AskReady();
  822.         end;
  823.     until (input = 'Д') or (input = 'д');
  824.     ClearScreen;
  825.     while correctAnswers < 3 do
  826.     begin
  827.         Writeln;
  828.         Writeln('Исходные слова: ');
  829.         Writeln;
  830.         SetLength(WordsFromData, roundsPassed + 5);
  831.         for K := Low(WordsFromData) to High(WordsFromData) do
  832.         begin
  833.             WordsFromData[K] := GetRandomWord(Words);
  834.         end;
  835.         Writeln(Join(' ', WordsFromData)); // Вывод слов в одной строке
  836.         Writeln;
  837.         case diff of
  838.             '1':
  839.                 Sleep(25000);
  840.             '2':
  841.                 Sleep(20000);
  842.             '3':
  843.                 Sleep(10000);
  844.         end; // Задержка в 5 секунд
  845.         ClearScreen; // Очистка консоли
  846.         Writeln;
  847.         Writeln('Введите эти слова в любом порядке:');
  848.         Writeln;
  849.         ReadLn(temp);
  850.         Writeln;
  851.         InputedWords := Split(' ', temp);
  852.         // Разделение введенной строки на слова
  853.         if (InputedWords[Length(InputedWords) - 1] = '52') then
  854.         begin
  855.             roundsPassed := 4; // Завершить все этапы
  856.             break;
  857.         end;
  858.         if CheckWordsExistanceInArr(WordsFromData, InputedWords) then
  859.         begin
  860.             Writeln('ОТВЕТ ВЕРНЫЙ!');
  861.             Writeln;
  862.             Inc(correctAnswers);
  863.         end
  864.         else
  865.         begin
  866.             Writeln('ОТВЕТ НЕВЕРНЫЙ!');
  867.             Writeln;
  868.             correctAnswers := 0;
  869.         end;
  870.     end;
  871.  
  872.     // stage 3
  873.     // ... Структура аналогична Stage 2, но проверяет точное совпадение последовательностей
  874.     { конкретнее
  875.       Этап 3: Аналогичен этапу 2. Введенная пользователем последовательность считается верной,
  876.       если совпали не только слова, но и порядок их следования друг за другом.
  877.       Например:
  878.       Исходная последовательность КРОСС МАКСИМУМ СТОЛБ ГОЛОВА ТАБЛИЦА
  879.       Последовательность пользователя КРОСС МАКСИМУМ СТОЛБ ГОЛОВА ТАБЛИЦА
  880.       ОТВЕТ ВЕРНЫЙ! }
  881.     // Этап 3
  882.     correctAnswers := 0;
  883.     if (input = 'Д') or (input = 'д') then
  884.     begin
  885.         DisplayRulesThirdStageAndContinue;
  886.         ClearScreen;
  887.     end;
  888.  
  889.     roundsPassed := 0;
  890.     correctAnswers := 0;
  891.     case diff of
  892.         '1':
  893.             Writeln('На вашем уровне сложности у вас 30 секунд на этот этап');
  894.         '2':
  895.             Writeln('На вашем уровне сложности у вас 25 секунды на этот этап');
  896.         '3':
  897.             Writeln('На вашем уровне сложности у вас 15 секунды на этот этап');
  898.     end;
  899.     // Главный цикл программы
  900.     input := AskReady();
  901.     repeat
  902.         if (input = 'Н') or (input = 'н') then
  903.         begin
  904.             Writeln('ОК, начнем, когда вы будете готовы.');
  905.             input := AskReady();
  906.         end;
  907.     until (input = 'Д') or (input = 'д');
  908.     ClearScreen;
  909.     while roundsPassed < 4 do
  910.     begin
  911.         Words := ReadWordsFromFile(FileName);
  912.         while correctAnswers < 3 do
  913.         begin
  914.             Writeln;
  915.             Writeln('Исходные слова: ');
  916.             Writeln;
  917.             SetLength(WordsFromData, roundsPassed + 5);
  918.             for K := Low(WordsFromData) to High(WordsFromData) do
  919.             begin
  920.                 WordsFromData[K] := GetRandomWord(Words);
  921.             end;
  922.             Writeln(Join(' ', WordsFromData)); // Вывод слов в одной строке
  923.             Writeln;
  924.             case diff of
  925.                 '1':
  926.                     Sleep(30000);
  927.                 '2':
  928.                     Sleep(25000);
  929.                 '3':
  930.                     Sleep(15000);
  931.             end; // Задержка
  932.             ClearScreen; // Очистка консоли
  933.             Writeln;
  934.             Writeln('Введите эти слова в том же порядке:');
  935.             Writeln;
  936.             ReadLn(temp);
  937.             Writeln;
  938.             InputedWords := Split(' ', temp);
  939.             // Разделение введенной строки на слова
  940.             if (InputedWords[Length(InputedWords) - 1] = '52') then
  941.             begin
  942.                 roundsPassed := 4; // Завершить все этапы
  943.                 break;
  944.             end;
  945.             if CheckWordsExistanceInArr(WordsFromData, InputedWords) and
  946.               CheckWordsOrder(WordsFromData, InputedWords) then
  947.             begin
  948.                 Writeln('ОТВЕТ ВЕРНЫЙ!');
  949.                 Writeln;
  950.                 Inc(correctAnswers);
  951.             end
  952.             else
  953.             begin
  954.                 Writeln('ОТВЕТ НЕВЕРНЫЙ!');
  955.                 Writeln;
  956.                 correctAnswers := 0;
  957.             end;
  958.         end;
  959.         correctAnswers := 0;
  960.         Inc(roundsPassed);
  961.     end;
  962.  
  963.     // Сброс для следующего этапа
  964.     correctAnswers := 0;
  965.  
  966.     // stage 4
  967.     // ... Структура аналогична Stage 2, но пользователь вводит слова в обратном порядке.
  968.     { Этап 4: Аналогичен этапу 2. Только пользователь должен вводить каждое слово «перевернутым»
  969.       Например:
  970.       Исходная последовательность КРОСС МАКСИМУМ СТОЛБ ГОЛОВА ТАБЛИЦА
  971.       Последовательность пользователя БЛОТС ССОРК АЦИЛБАТ АВОЛОГ МУМИСКАМ
  972.       ОТВЕТ ВЕРНЫЙ! }
  973.     // Этап 4
  974.     if (input = 'Д') or (input = 'д') then
  975.     begin
  976.         DisplayRulesFourthStageAndContinue;
  977.         ClearScreen;
  978.     end;
  979.  
  980.     roundsPassed := 0;
  981.     correctAnswers := 0;
  982.     case diff of
  983.         '1':
  984.             Writeln('На вашем уровне сложности у вас 35 секунд на этот этап');
  985.         '2':
  986.             Writeln('На вашем уровне сложности у вас 30 секунды на этот этап');
  987.         '3':
  988.             Writeln('На вашем уровне сложности у вас 15 секунды на этот этап');
  989.     end;
  990.     // Главный цикл программы
  991.     input := AskReady();
  992.     repeat
  993.         if (input = 'Н') or (input = 'н') then
  994.         begin
  995.             Writeln('ОК, начнем, когда вы будете готовы.');
  996.             input := AskReady();
  997.         end;
  998.     until (input = 'Д') or (input = 'д');
  999.     ClearScreen;
  1000.     while roundsPassed < 4 do
  1001.     begin
  1002.         Words := ReadWordsFromFile(FileName);
  1003.         while correctAnswers < 3 do
  1004.         begin
  1005.             Writeln;
  1006.             Writeln('Исходные слова: ');
  1007.             Writeln;
  1008.             SetLength(WordsFromData, roundsPassed + 5);
  1009.             for K := Low(WordsFromData) to High(WordsFromData) do
  1010.             begin
  1011.                 WordsFromData[K] := GetRandomWord(Words);
  1012.             end;
  1013.             Writeln(Join(' ', WordsFromData)); // Вывод слов в одной строке
  1014.             Writeln;
  1015.             case diff of
  1016.                 '1':
  1017.                     Sleep(35000);
  1018.                 '2':
  1019.                     Sleep(30000);
  1020.                 '3':
  1021.                     Sleep(15000);
  1022.             end; // Задержка в 5 секунд
  1023.             ClearScreen; // Очистка консоли
  1024.             Writeln;
  1025.             Writeln('Введите эти слова в обратном порядке:');
  1026.             Writeln;
  1027.             ReadLn(temp);
  1028.             Writeln;
  1029.             InputedWords := Split(' ', temp);
  1030.             // Разделение введенной строки на слова
  1031.             if (InputedWords[Length(InputedWords) - 1] = '52') then
  1032.             begin
  1033.                 roundsPassed := 4; // Завершить все этапы
  1034.                 break;
  1035.             end;
  1036.             if CheckWordsExistanceInArr(WordsFromData, ReverseArr(InputedWords))
  1037.             then
  1038.             begin
  1039.                 Writeln('ОТВЕТ ВЕРНЫЙ!');
  1040.                 Writeln;
  1041.                 Inc(correctAnswers);
  1042.             end
  1043.             else
  1044.             begin
  1045.                 Writeln('ОТВЕТ НЕВЕРНЫЙ!');
  1046.                 Writeln;
  1047.                 correctAnswers := 0;
  1048.             end;
  1049.         end;
  1050.         correctAnswers := 0;
  1051.         Inc(roundsPassed);
  1052.     end;
  1053.  
  1054.     // Этап 5(4)
  1055.     if (input = 'Д') or (input = 'д') then
  1056.     begin
  1057.         DisplayRulesFifthStageAndContinue;
  1058.         ClearScreen;
  1059.     end;
  1060.  
  1061.     roundsPassed := 0;
  1062.     correctAnswers := 0;
  1063.     case diff of
  1064.         '1':
  1065.             Writeln('На вашем уровне сложности у вас 40 секунд на этот этап');
  1066.         '2':
  1067.             Writeln('На вашем уровне сложности у вас 35 секунды на этот этап');
  1068.         '3':
  1069.             Writeln('На вашем уровне сложности у вас 20 секунды на этот этап');
  1070.     end;
  1071.     // Главный цикл программы
  1072.     input := AskReady();
  1073.     repeat
  1074.         if (input = 'Н') or (input = 'н') then
  1075.         begin
  1076.             Writeln('ОК, начнем, когда вы будете готовы.');
  1077.             input := AskReady();
  1078.         end;
  1079.     until (input = 'Д') or (input = 'д');
  1080.     ClearScreen;
  1081.     while roundsPassed < 4 do
  1082.     begin
  1083.         Words := ReadWordsFromFile(FileName);
  1084.         for J := 1 to 3 do
  1085.         begin
  1086.             Writeln;
  1087.             Writeln('Исходные слова: ');
  1088.             Writeln;
  1089.             SetLength(WordsFromData, roundsPassed + 5);
  1090.             for K := Low(WordsFromData) to High(WordsFromData) do
  1091.             begin
  1092.                 WordsFromData[K] := GetRandomWord(Words);
  1093.             end;
  1094.             Writeln(Join(' ', WordsFromData)); // Вывод слов в одной строке
  1095.             case diff of
  1096.                 '1':
  1097.                     Sleep(40000);
  1098.                 '2':
  1099.                     Sleep(35000);
  1100.                 '3':
  1101.                     Sleep(20000);
  1102.             end; // Задержка в 5 секунд
  1103.             ClearScreen; // Очистка консоли
  1104.             Writeln;
  1105.             Writeln('Введите эти слова в обратном порядке:');
  1106.             Writeln;
  1107.             ReadLn(temp);
  1108.             Writeln;
  1109.             InputedWords := Split(' ', temp);
  1110.             // Разделение введенной строки на слова
  1111.             if (InputedWords[Length(InputedWords) - 1] = '52') then
  1112.             begin
  1113.                 roundsPassed := 4; // Завершить все этапы
  1114.                 break;
  1115.             end;
  1116.             if CheckWordsExistanceInArr(ReverseWords(WordsFromData),
  1117.               InputedWords) then
  1118.             begin
  1119.                 Writeln('ОТВЕТ ВЕРНЫЙ!');
  1120.                 Writeln;
  1121.                 Inc(correctAnswers);
  1122.             end
  1123.             else
  1124.             begin
  1125.                 Writeln('ОТВЕТ НЕВЕРНЫЙ!');
  1126.                 Writeln;
  1127.                 correctAnswers := 0;
  1128.             end;
  1129.         end;
  1130.         correctAnswers := 0;
  1131.         Inc(roundsPassed);
  1132.     end;
  1133.  
  1134.     CongratulateUser;
  1135.     ReadLn;
  1136.  
  1137. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement