Играющий выбирает одну из N лошадей - PascalABC.NET
Формулировка задачи:
Играющий выбирает одну из N лошадей, состязающихся в бегах, и выигрывает, если его лошадь приходит первой. Скорость передвижения лошадей на разных этапах выбирается программой с помощью датчика случайных чисел в диапазоне от М1 до М2.
Технические требования
: значения N(3<=N<=7), M1(2<=M1<=2) и M2(6<=M2<=10) хранятся в файлеInput.txt
. Ипподром располагается в центре экрана и показывает движение лошадей. В левой или правой части экрана отображается кол-во сделанных ходов. Управление игрой осуществляется с помощью клавиатуры. Предусмотреть запись кол-ва сделанных ходов и выигранных ставок в файлOutput.txt
.Решение задачи: «Играющий выбирает одну из N лошадей»
textual
Листинг программы
- uses GraphAbc;
- type
- horse=record
- speed:integer;
- x:integer;
- y:integer;
- e:boolean;
- tm:System.DateTime;
- p1,p2:Picture;
- end;
- var
- c:array[1..7] of Color=(clRed,clGreen,clBlue,clViolet,clBrown,clDarkCyan,clGreenYellow);
- p3:Picture;
- i,n,m1,m2,e,j,e1,ww,t:integer;
- h:array[1..7] of horse;
- iend:boolean;
- res:array[,] of integer;
- function GetPlace(r,c:integer):string;
- var
- i,j:integer;
- begin
- j:=1;
- for i:=1 to n do if (res[i,c]>0) and (res[r,c]>res[i,c]) then j:=j+1;
- case j of
- 1:Result:='I ';
- 2:Result:='II ';
- 3:Result:='III ';
- 4:Result:='IV ';
- 5:Result:='V ';
- 6:Result:='VI ';
- 7:Result:='VII ';
- end;
- Result:=Result+': '+res[r,c].ToString;
- end;
- procedure InitPicture(var p1,p2:Picture;c:Color);
- begin
- p1:=Picture.Create(50,60);
- with p1 do begin
- SetBrushColor(c);
- FillRect(0,50,10,60);FillRect(40,50,50,60);
- FillRect(10,40,20,50);FillRect(30,0,40,50);
- FillRect(10,30,40,40);FillRect(40,10,50,20);
- end;
- p2:=Picture.Create(50,60);
- with p2 do begin
- SetBrushColor(c);
- FillRect(20,50,30,60);
- FillRect(10,40,20,50);FillRect(30,0,40,50);
- FillRect(10,30,40,40);FillRect(40,10,50,20);
- end;
- end;
- begin
- randomize;
- writeln('N,M1,M2=');readln(n,m1,m2);ClearWindow;
- writeln('Количество этапов:');readln(e);
- SetLength(res,n+1,e+1);
- for i:=1 to n do for j:=1 to e do res[i,j]:=0;
- p3:=Picture.Create(50,60);
- p3.Clear;
- SetWindowHeight(70*n);
- ww:=ScreenWidth-10;
- SetWindowWidth(ww);
- SetWindowPos(0,ScreenHeight div 2- WindowHeight div 2);
- SetWindowCaption('Скачки');
- ClearWindow;
- SetBrushColor(clWhite);
- SetPenColor(clRed);
- e1:=WindowWidth div e;
- for i:=1 to e do Line(e1*i,0,e1*i,WindowHeight);
- for i:=1 to n do begin
- SetPenColor(clBlack);
- Line(0,70*i,ww,70*i);
- h[i].speed:=(random(m2-m1+1)+m1)*30;
- h[i].x:=0;
- h[i].y:=70*(i-1)+9;
- h[i].e:=true;
- h[i].tm:=System.DateTime.Now;
- InitPicture(h[i].p1,h[i].p2,c[i]);
- SetBrushColor(clwhite);
- FillRect(0,70*i,ww,70*i-60);
- end;
- j:=-1;
- SetPenColor(clRed);
- SetBrushColor(clGreenYellow);
- repeat
- j:=j+1;Sleep(1);
- iend:=true;
- for i:=1 to n do begin
- if h[i].e and (j mod h[i].speed=0) then begin
- LockDrawing;
- p3.Draw(h[i].x,h[i].y);
- h[i].x:=h[i].x+1;
- 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);
- t:=h[i].x div e1;
- if h[i].x mod e1=0 then begin
- h[i].speed:=(random(m2-m1+1)+m1)*30;
- res[i,t]:=(System.DateTime.Now-h[i].tm).TotalSeconds.Round;
- TextOut(h[i].x-60,h[i].y,GetPlace(i,t));
- end;
- if h[i].x=ww-60 then begin
- res[i,e]:=(System.DateTime.Now-h[i].tm).TotalSeconds.Round;
- TextOut(h[i].x-30,h[i].y,GetPlace(i,e));
- h[i].e:=false;
- end;
- UnlockDrawing;
- end;
- if h[i].e then iend:=false;
- end;
- until iend;
- SetWindowCaption('Скачки забег завершен!');
- end.
Объяснение кода листинга программы
- Объявлены переменные:
- 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: функция для вывода текста на экран
- Задачей игрока является выбрать одну из N лошадей, которые бегут по экрану.
- В начале программы игроку предлагается ввести количество этапов (e), а затем количество лошадей (n).
- Создается двумерный массив res размером (n+1) на (e+1) для хранения результатов забега.
- Лошади отображаются на экране в виде картинок, которые создаются с помощью процедуры InitPicture.
- Лошади начинают бег с позиции (0,70*(i-1)+9), где i - номер лошади.
- Каждый ход лошади проверяется, достигла ли она финиша (позиции (ww,70*e)). Если лошадь достигла финиша, ее результат записывается в массив res.
- Игра продолжается до тех пор, пока все лошади не достигнут финиша.
- В конце игры на экране отображается сообщение
Скачки забег завершен!
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д