Играющий выбирает одну из N лошадей - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Играющий выбирает одну из N лошадей, состязающихся в бегах, и выигрывает, если его лошадь приходит первой. Скорость передвижения лошадей на разных этапах выбирается программой с помощью датчика случайных чисел в диапазоне от М1 до М2.

Технические требования

: значения N(3<=N<=7), M1(2<=M1<=2) и M2(6<=M2<=10) хранятся в файле

Input.txt

. Ипподром располагается в центре экрана и показывает движение лошадей. В левой или правой части экрана отображается кол-во сделанных ходов. Управление игрой осуществляется с помощью клавиатуры. Предусмотреть запись кол-ва сделанных ходов и выигранных ставок в файл

Output.txt

.

Решение задачи: «Играющий выбирает одну из N лошадей»

textual
Листинг программы
  1. uses GraphAbc;
  2. type
  3.   horse=record
  4.     speed:integer;
  5.     x:integer;
  6.     y:integer;
  7.     e:boolean;
  8.     tm:System.DateTime;
  9.     p1,p2:Picture;
  10.   end;  
  11. var
  12.   c:array[1..7] of Color=(clRed,clGreen,clBlue,clViolet,clBrown,clDarkCyan,clGreenYellow);
  13.   p3:Picture;
  14.   i,n,m1,m2,e,j,e1,ww,t:integer;
  15.   h:array[1..7] of horse;
  16.   iend:boolean;
  17.   res:array[,] of integer;
  18.  
  19. function GetPlace(r,c:integer):string;
  20. var
  21.   i,j:integer;  
  22. begin
  23.   j:=1;
  24.   for i:=1 to n do if (res[i,c]>0) and (res[r,c]>res[i,c]) then j:=j+1;
  25.   case j of
  26.     1:Result:='I   ';
  27.     2:Result:='II  ';
  28.     3:Result:='III ';
  29.     4:Result:='IV  ';
  30.     5:Result:='V   ';
  31.     6:Result:='VI  ';
  32.     7:Result:='VII ';
  33.   end;
  34.   Result:=Result+': '+res[r,c].ToString;
  35. end;  
  36.  
  37. procedure InitPicture(var p1,p2:Picture;c:Color);  
  38. begin
  39.   p1:=Picture.Create(50,60);
  40.   with p1 do begin
  41.     SetBrushColor(c);
  42.     FillRect(0,50,10,60);FillRect(40,50,50,60);
  43.     FillRect(10,40,20,50);FillRect(30,0,40,50);
  44.     FillRect(10,30,40,40);FillRect(40,10,50,20);
  45.   end;
  46.   p2:=Picture.Create(50,60);
  47.   with p2 do begin
  48.     SetBrushColor(c);
  49.     FillRect(20,50,30,60);  
  50.     FillRect(10,40,20,50);FillRect(30,0,40,50);
  51.     FillRect(10,30,40,40);FillRect(40,10,50,20);
  52.   end;
  53. end;
  54. begin
  55.   randomize;
  56.   writeln('N,M1,M2=');readln(n,m1,m2);ClearWindow;
  57.   writeln('Количество этапов:');readln(e);
  58.   SetLength(res,n+1,e+1);
  59.   for i:=1 to n do for j:=1 to e do res[i,j]:=0;
  60.   p3:=Picture.Create(50,60);
  61.   p3.Clear;
  62.   SetWindowHeight(70*n);
  63.   ww:=ScreenWidth-10;
  64.   SetWindowWidth(ww);
  65.   SetWindowPos(0,ScreenHeight div 2- WindowHeight div 2);
  66.   SetWindowCaption('Скачки');
  67.   ClearWindow;
  68.   SetBrushColor(clWhite);
  69.   SetPenColor(clRed);  
  70.   e1:=WindowWidth div e;  
  71.   for i:=1 to e do Line(e1*i,0,e1*i,WindowHeight);
  72.   for i:=1 to n do  begin
  73.     SetPenColor(clBlack);  
  74.     Line(0,70*i,ww,70*i);
  75.     h[i].speed:=(random(m2-m1+1)+m1)*30;
  76.     h[i].x:=0;
  77.     h[i].y:=70*(i-1)+9;
  78.     h[i].e:=true;
  79.     h[i].tm:=System.DateTime.Now;
  80.     InitPicture(h[i].p1,h[i].p2,c[i]);
  81.     SetBrushColor(clwhite);
  82.     FillRect(0,70*i,ww,70*i-60);
  83.   end;  
  84.   j:=-1;
  85.   SetPenColor(clRed);
  86.   SetBrushColor(clGreenYellow);
  87.   repeat
  88.     j:=j+1;Sleep(1);
  89.     iend:=true;
  90.     for i:=1 to n do begin
  91.       if h[i].e and (j mod h[i].speed=0) then begin
  92.         LockDrawing;
  93.         p3.Draw(h[i].x,h[i].y);
  94.         h[i].x:=h[i].x+1;
  95.         if odd(h[i].x) then h[i].p2.draw(h[i].x,h[i].y) else h[i].p1.draw(h[i].x,h[i].y);
  96.         t:=h[i].x div e1;
  97.         if h[i].x mod e1=0 then begin
  98.           h[i].speed:=(random(m2-m1+1)+m1)*30;
  99.           res[i,t]:=(System.DateTime.Now-h[i].tm).TotalSeconds.Round;          
  100.           TextOut(h[i].x-60,h[i].y,GetPlace(i,t));
  101.         end;  
  102.         if h[i].x=ww-60 then begin
  103.           res[i,e]:=(System.DateTime.Now-h[i].tm).TotalSeconds.Round;
  104.           TextOut(h[i].x-30,h[i].y,GetPlace(i,e));
  105.           h[i].e:=false;
  106.         end;
  107.         UnlockDrawing;
  108.       end;
  109.       if h[i].e then iend:=false;
  110.     end;  
  111.   until iend;
  112.   SetWindowCaption('Скачки забег завершен!');
  113. end.

Объяснение кода листинга программы

  1. Объявлены переменные:
    • c: массив из 7 цветов
    • p3: объект Picture для отображения результатов
    • i, n, m1, m2, e, j, e1, ww, t: целочисленные переменные для проведения игры
    • h: массив из 7 объектов horse для хранения информации о лошадях
    • iend: булевая переменная для контроля окончания игры
    • res: двумерный массив для хранения результатов забега
    • GetPlace: функция для определения места, которое заняла лошадь в забеге
    • InitPicture: процедура для создания и оформления изображений лошадей
    • Picture: объект GraphABC.Net для работы с графикой
    • System.DateTime: объект для работы с датой и временем
    • Random: объект для генерации случайных чисел
    • LockDrawing, UnlockDrawing: функции для блокировки и разблокировки рисования на экране
    • TextOut: функция для вывода текста на экран
  2. Задачей игрока является выбрать одну из N лошадей, которые бегут по экрану.
  3. В начале программы игроку предлагается ввести количество этапов (e), а затем количество лошадей (n).
  4. Создается двумерный массив res размером (n+1) на (e+1) для хранения результатов забега.
  5. Лошади отображаются на экране в виде картинок, которые создаются с помощью процедуры InitPicture.
  6. Лошади начинают бег с позиции (0,70*(i-1)+9), где i - номер лошади.
  7. Каждый ход лошади проверяется, достигла ли она финиша (позиции (ww,70*e)). Если лошадь достигла финиша, ее результат записывается в массив res.
  8. Игра продолжается до тех пор, пока все лошади не достигнут финиша.
  9. В конце игры на экране отображается сообщение Скачки забег завершен!

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы