Advertisement
lithie_oce

OPI laba

Dec 12th, 2023 (edited)
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.91 KB | Source Code | 0 0
  1. program bonuses;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils,
  7.   Windows;
  8.  
  9. Type
  10. TLetterArray = Array ['а'..'я'] of Integer;
  11. TPlayerStringArray = Array Of String;
  12. TScoreArray = Array of Integer;
  13. TBonusArray = Array Of Array [0..1] Of Boolean;
  14. Const
  15.     StartLetterBank: TLetterArray = (8, 4, 4, 4, 4, 16, 4, 4, 8, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4 ,4, 4, 8, 4, 8, 8, 8);
  16. Function ExecuteBonus50(Var PlayerString: String; LetterBank: TLetterArray; PlayersScore: TScoreArray; NumberOfPlayer: Integer): Boolean;
  17. Var
  18.     CountLetters, CountChar, ChangeIndex: Integer;
  19.     IsCorrect, IsOkay: Boolean;
  20.     LettertoChange: Char;
  21.     PlayersCopy: String;
  22. Begin
  23.     Randomize;
  24.     PlayersCopy := PlayerString;
  25.     For CountLetters:= 0 To 4 Do
  26.         Repeat
  27.             Writeln ('Введите букву из вашего набора, которую хотели бы заменить');
  28.             Readln (LetterToChange);
  29.             IsCorrect := False;
  30.             For CountChar := 1 To 10 Do
  31.                 If (LetterToChange = PlayersCopy[CountChar]) Then
  32.                 Begin
  33.                     IsCorrect := True;
  34.                     PlayersCopy[CountChar] := '0';
  35.                     Repeat
  36.                         IsOkay := True;
  37.                         ChangeIndex := 255-Random (32);
  38.                         If (LetterBank[Chr(ChangeIndex)] < 1) Then
  39.                             IsOkay := False;
  40.                     Until (IsOkay);
  41.                     Dec(LetterBank[Chr(ChangeIndex)]);
  42.                     PlayerString [CountChar] := Chr(ChangeIndex);
  43.                     Break;
  44.                 End;
  45.             If Not(IsCorrect) Then
  46.                 Writeln ('В вашем наборе отсутствует такая буква или встречается меньшее количество раз. Повторите ввод');
  47.         Until (IsCorrect);
  48.     Dec(PlayersScore[NumberOfPlayer], 2);
  49.     ExecuteBonus50 := True;
  50. End;
  51.  
  52. Function CheckIfContains (PlayerString: String; Var LetterIndex: Integer): Char;
  53. Var
  54.     LetterCounter: Integer;
  55.     Letter: Char;
  56.     IsCorrect: Boolean;
  57. Begin
  58.     Repeat
  59.         Readln(Letter);
  60.         IsCorrect := False;
  61.         For LetterCounter := 1 To 10 Do
  62.             If (Letter = PlayerString[LetterCounter]) Then
  63.             Begin
  64.                 IsCorrect := True;
  65.                 LetterIndex := LetterCounter;
  66.             End;
  67.             If Not(IsCorrect) Then
  68.                 Writeln ('В наборе отсутствует такая буква. Повторите ввод');
  69.     Until (IsCorrect);
  70.     CheckIfContains := Letter;
  71. End;
  72.  
  73. Function ExecuteBonusHelp(PlayersLetters: TPlayerStringArray; NumberOfPlayer: Integer): Boolean;
  74. Var
  75.     IsCorrect: Boolean;
  76.     LetterToChange, DesiredLetter: Char;
  77.     LetterIndexToChange, DesiredLetterIndex, OtherPlayerNumber: Integer;
  78. Begin
  79.     Writeln ('Введите букву из вашего набора, которую хотели бы заменить');
  80.     LetterToChange := CheckIfContains(PlayersLetters[NumberOfPlayer], LetterIndexToChange);
  81.     Writeln ('Введите номер игрока, с которым хотели бы обменяться');
  82.     Repeat
  83.         Readln(OtherPlayerNumber);
  84.         IsCorrect := True;
  85.         If (OtherPlayerNumber = NumberOfPlayer) Then
  86.         Begin
  87.             Writeln ('Вы не можете меняться с самим собой. повторите ввод');
  88.             IsCorrect := False;
  89.         End;
  90.         If (OtherPlayerNumber > High(PlayersLetters)) Then
  91.         Begin
  92.             Writeln ('Такого игрока не существует. Повторите ввод');
  93.             IsCorrect := False;
  94.         End;
  95.     Until (IsCorrect);
  96.     Writeln ('Введите букву из чужого набора, на которую хотели бы заменить');
  97.     DesiredLetter := CheckIfContains(PlayersLetters[OtherPlayerNumber], DesiredLetterIndex);
  98.     PlayersLetters[NumberOfPlayer, LetterIndexToChange] := DesiredLetter;
  99.     PlayersLetters[OtherPlayerNumber, DesiredLetterIndex] := LetterToChange;
  100.     ExecuteBonusHelp := True;
  101. End;
  102. Var
  103.     LetterBank:  TLetterArray;
  104.     PlayersScore: TScoreArray;
  105.     BonusUsageArray: TBonusArray;
  106.     PlayersLetters: TPlayerStringArray;
  107.     NumberOfPlayer, NumberOfPlayers: Integer;
  108. begin
  109.     SetConsoleCP(1251);
  110.     SetConsoleOutputCP(1251);
  111.     SetLength(PlayersLetters, NumberOfPlayers);
  112.     SetLength(PlayersScore, NumberOfPlayers);
  113.     SetLength(BonusUsageArray, NumberOfPlayers);
  114.     LetterBank := StartLetterBank;
  115.                                    //BonusUsageArray[NumberOfPlayer, 0] 0 is for 50/50 1 is for Help
  116.     BonusUsageArray[NumberOfPlayer, 0] := ExecuteBonus50(PlayersLetters[NumberOfPlayer], LetterBank, PlayersScore, NumberOfPlayer);
  117.     BonusUsageArray[NumberOfPlayer, 1] := ExecuteBonusHelp(PlayersLetters, NumberOfPlayer);
  118.     Readln
  119. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement