Advertisement
lithie_oce

opi bonuses 3.0

Dec 21st, 2023 (edited)
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.77 KB | Source Code | 0 0
  1. Function ExecuteBonus50(Var PlayerString: AnsiString; Var LetterBank: TLetterArray; Var PlayersScore: TScoreArray; NumberOfPlayer: Integer): Boolean;
  2. Var
  3.     CountLetters, CountChar, ChangeIndex: Integer;
  4.     IsCorrect, IsOkay: Boolean;
  5.     LettertoChange: AnsiChar;
  6.     PlayersCopy, LetterStr: AnsiString;
  7. Begin
  8.     Randomize;
  9.     PlayersCopy := PlayerString;
  10.     For CountLetters := 0 To 4 Do
  11.     Begin
  12.         Write('Введите букву из вашего набора, которую вы хотели бы заменить: ');
  13.         Repeat
  14.             IsCorrect := False;
  15.             Readln(LetterStr);
  16.             If (LetterStr = '') Then
  17.                 Readln(LetterStr);
  18.             If (Length(LetterStr) = 1) Then
  19.             Begin
  20.                 LettertoChange := LetterStr[1];
  21.                 If (Ord(LettertoChange)>223) Then
  22.                 Begin
  23.                     For CountChar := 1 To 10 Do
  24.                         If (LetterToChange = PlayersCopy[CountChar]) Then
  25.                         Begin
  26.                             IsCorrect := True;
  27.                             PlayersCopy[CountChar] := '0';
  28.                             Repeat
  29.                                 IsOkay := True;
  30.                                 ChangeIndex := 255 - Random(32);
  31.                                 If (LetterBank[AnsiChar(ChangeIndex)] < 1) Then
  32.                                     IsOkay := False;
  33.                             Until (IsOkay);
  34.                             Dec(LetterBank[AnsiChar(ChangeIndex)]);
  35.                             PlayerString[CountChar] := AnsiChar(ChangeIndex);
  36.                             Break;
  37.                         End;
  38.                     If Not(IsCorrect) Then
  39.                         Write('В вашем наборе отсутствует такая буква или встречается меньшее количество раз. Повторите ввод: ');
  40.                 End
  41.                 Else
  42.                     Write('Введите букву. Повторите ввод: ')
  43.             End
  44.             Else
  45.                  Write('Введите только одну букву. Повторите ввод: ');
  46.         Until (IsCorrect);
  47.     End;
  48.     Dec(PlayersScore[NumberOfPlayer], 2);
  49.     ExecuteBonus50 := True;
  50. End;
  51.  
  52. Function CheckIfContains(PlayerString: AnsiString; Var LetterIndex: Integer; NumberOfPlayer: Integer): AnsiChar;
  53. Var
  54.     LetterCounter: Integer;
  55.     Letter: AnsiChar;
  56.     LetterStr: AnsiString;
  57.     IsCorrect: Boolean;
  58. Begin
  59.     Repeat
  60.         IsCorrect := False;
  61.         Readln(LetterStr);
  62.         If (LetterStr = '') Then
  63.             Readln(LetterStr);
  64.         If (Length(LetterStr) = 1) Then
  65.         Begin
  66.             Letter := LetterStr[1];
  67.             If (Ord(Letter)>223) Then
  68.             Begin
  69.                 For LetterCounter := 1 To 10 Do
  70.                     If (Letter = PlayerString[LetterCounter]) Then
  71.                     Begin
  72.                       IsCorrect := True;
  73.                       LetterIndex := LetterCounter;
  74.                     End;
  75.                 If Not(IsCorrect) Then
  76.                     Write('В наборе отсутствует такая буква или встречается меньшее количество раз. Повторите ввод: ');
  77.             End
  78.             Else
  79.                 Write('Введите букву. Повторите ввод: ');
  80.         End
  81.         Else
  82.             Write('Введите только одну букву. Повторите ввод: ');
  83.     Until (IsCorrect);
  84.     CheckIfContains := Letter;
  85. End;
  86.  
  87. Function ExecuteBonusHelp(Var PlayersLetters: TPlayerStringArray; NumberOfPlayer: Integer): Boolean;
  88. Var
  89.     IsCorrect: Boolean;
  90.     LetterToChange, DesiredLetter: AnsiChar;
  91.     LetterIndexToChange, DesiredLetterIndex, OtherPlayerNumber: Integer;
  92. Begin
  93.     Write('Введите букву из вашего набора, которую хотели бы заменить: ');
  94.     LetterToChange := CheckIfContains(PlayersLetters[NumberOfPlayer], LetterIndexToChange, NumberOfPlayer);
  95.     Write('Введите номер игрока, с которым хотели бы обменяться: ');
  96.     Repeat
  97.         IsCorrect := True;
  98.         Try
  99.             Readln(OtherPlayerNumber);
  100.         Except
  101.             IsCorrect := False;
  102.             Write('Введите цифру. Повторите ввод: ');
  103.         End;
  104.         if ((IsCorrect) And ((OtherPlayerNumber>0) And (OtherPlayerNumber<(High(PlayersLetters)+2)))) then
  105.         Begin
  106.             Dec(OtherPlayerNumber);
  107.             If (OtherPlayerNumber = NumberOfPlayer) Then
  108.             Begin
  109.                 Write('Вы не можете меняться с самим собой. Повторите ввод: ');
  110.                 IsCorrect := False;
  111.             End;
  112.             (*If (OtherPlayerNumber > High(PlayersLetters) ) Then
  113.             Begin
  114.                 Write('Такого игрока не существует. Повторите ввод: ');
  115.                 IsCorrect := False;
  116.             End;*)
  117.         End
  118.         Else
  119.         Begin
  120.             Write('Введите цифру от 1 до ', High(PlayersLetters)+1, ', кроме ', NumberOfPlayer+1,'. Повторите ввод: ');
  121.             IsCorrect := False;
  122.         End;
  123.     Until (IsCorrect);
  124.     Write('Введите букву из чужого набора, на которую вы хотели бы заменить свою букву: ');
  125.     DesiredLetter := CheckIfContains(PlayersLetters[OtherPlayerNumber], DesiredLetterIndex, OtherPlayerNumber);
  126.     PlayersLetters[NumberOfPlayer, LetterIndexToChange] := DesiredLetter;
  127.     PlayersLetters[OtherPlayerNumber, DesiredLetterIndex] := LetterToChange;
  128.     ExecuteBonusHelp := True;
  129. End;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement