Изобразить двигающиеся горизонтально несколько НЛО - Turbo Pascal
Формулировка задачи:
1)Разлетающиеся из центра шарики. Летают с отражением, каждый со своим шагом и разным цветом.
2)Двигающиеся горизонтально несколько НЛО.
2) - не обязательно.
Решение задачи: «Изобразить двигающиеся горизонтально несколько НЛО»
textual
Листинг программы
uses graph,crt; const n=6; type shar=record x,y,c,dx,dy:integer; end; procedure draw(x,y,c:integer); begin setcolor(c); setfillstyle(1,c); fillellipse(x,y,10,10); end; var s:array[1..n] of shar; xc,yc:integer; a:real; i:integer; begin randomize; initgraph(xc,yc,''); xc:=getmaxX div 2; yc:=getmaxY div 2; {Начальные значения координат, цвета, шага по X и Y} a:=pi/10; for i:=1 to n do begin s[i].x:=xc+round(10*cos(a)); s[i].y:=yc-round(10*sin(a)); s[i].c:=i+8; draw(s[i].x,s[i].y,s[i].c); s[i].dx:=round((3+random(10))*cos(a)); s[i].dy:=round((3+random(10))*sin(a)); a:=a+pi/3; end; outtextXY(xc-50,10,'Press Enter'); readln; cleardevice; repeat outtextXY(xc-50,30,'Exit any key'); delay(30); for i:=1 to n do begin draw(s[i].x,s[i].y,0); s[i].x:=s[i].x+s[i].dx; s[i].y:=s[i].y-s[i].dy; if (s[i].x<10)or(s[i].x>getmaxX-10)then s[i].dx:=-s[i].dx; if (s[i].y<10)or(s[i].y>getmaxY-10)then s[i].dy:=-s[i].dy; draw(s[i].x,s[i].y,s[i].c); end; until keypressed; end.
Объяснение кода листинга программы
- Используется библиотека graph и функция initgraph для настройки графического интерфейса.
- Переменная n определяет количество объектов НЛО, которые будут нарисованы.
- Тип shar представляет объект НЛО с шестью переменными: x, y, c, dx, dy и dx - изменение координаты по оси X, а dy - изменение координаты по оси Y.
- Функция draw рисует эллипс на текущей позиции объекта НЛО с заданным цветом.
- Переменные xc, yc и a используются для начальной установки координат, цвета и угла поворота для первого объекта НЛО.
- Цикл for повторяется n раз, где n - количество объектов НЛО. Внутри цикла каждая переменная s[i] инициализируется значением, полученным из функции randomize, чтобы обеспечить разные начальные позиции для каждого объекта НЛО.
- После завершения цикла, функция outtextXY используется для вывода сообщения
Press Enter
в центр экрана, а затем чтение с клавиатуры до тех пор, пока пользователь не нажмет клавишу. - Последний цикл повторяется до тех пор, пока пользователь не нажмет клавишу, и используется для обновления позиций каждого объекта НЛО. Если позиция объекта выходит за пределы экрана, то значение dx или dy изменяется на противоположное.
- Когда все объекты НЛО были нарисованы, функция draw вызывается для каждого объекта, чтобы обновить его позицию.
- В конце программы выводится сообщение
Exit any key
и ожидается ввод пользователя.