Программа
{ Забрасыватель мяча в корзину }
Uses Crt,Graph; { Подключение модулей }
Const PathToDriver=''; { Путь к графическому драйверу }
Type Direction=(FromRight,FromLeft); { Направление }
Func=Function(X:integer):integer;
Var Exit:boolean; { Флаг выхода из программы }
GraphDriver:Integer; { Графический драйвер }
GraphMode:Integer; { Графический режим }
i:byte;
Procedure SwitchingPage; { Переключение отображаемой и активной видеостраниц }
const Page:boolean=FALSE;
Begin
if Page then begin
SetActivePage(1);
SetVisualPage(0)
end
else begin
SetActivePage(0);
SetVisualPage(1)
end;
Page:=not Page { Переустановка флага }
End;
Function Trajectory1(X:integer):integer;far; { Траектория }
Begin
Trajectory1:=Round(GetMaxY*(10*Sqr(X/GetMaxX)-7.5*X/GetMaxX+1.45))
End;
Function Trajectory2(X:integer):integer;far; { Траектория }
Begin
Trajectory2:=Round(GetMaxY*(10*Sqr(X/GetMaxX)-12.5*X/GetMaxX+3.95))
End;
Function Trajectory3(X:integer):integer;far; { Траектория }
Begin
Trajectory3:=Round(GetMaxY*(4.375*Sqr(X/GetMaxX)-4.375*X/GetMaxX+1.19375))
End;
Procedure Artist(X:integer;F:Func;DiferentX:integer);
{ Процедура прорисовки мяча }
const Radius=8; { Радиус мяча }
Begin
SetFillStyle(SolidFill,Black); { Установка цвета и стиля заполнения }
SetColor(Black); { Установка черного цвета }
PieSlice(X+DiferentX,F(X+DiferentX),0,360,Radius);
{ Закрашивание передыдущего изображения мяча }
SetFillStyle(SolidFill,White); { Установка цвета и стиля заполнения }
SetColor(White); { Установка белого цвета }
PieSlice(X,F(X),0,360,Radius); { Прорисовка мяча }
SwitchingPage { Переключение видеостраниц }
End;
Procedure BallDriver(Direct:Direction); { Процедура движения мяча }
var X:integer; { Координата мяча }
Begin
if Random(2)=0 { Случайный выбор траекории }
then
if Direct=FromLeft
then { Движение мяча с левой стороны }
for X:=GetMaxX div 10 to GetMaxX div 2 do
Artist(X,Trajectory1,-2)
else { Движение мяча с правой стороны }
for X:=GetMaxX*9 div 10 downto GetMaxX div 2 do
Artist(X,Trajectory2,2)
else
if Direct=FromLeft
then { Движение мяча с левой стороны }
for X:=GetMaxX div 10 to GetMaxX*9 div 10 do
Artist(X,Trajectory3,-2)
else { Движение мяча с правой стороны }
for X:=GetMaxX*9 div 10 downto GetMaxX div 10 do
Artist(X,Trajectory3,2);
ReadKey { Остановка программы }
End;
Function ReaderKey:char; { Функция чтения клавиатуры }
var Ch:char;
Begin
repeat
Ch:=ReadKey { Чтение клавиатуры }
until Ch in [#71,#55,#73,#57,#27,' '];
{ Выход из цикла при получении корректного ответа }
ReaderKey:=Ch { Определение значения функции }
End;
BEGIN
Randomize; { Инициализация генератора случайных чисел }
Exit:=FALSE; { Сброс флага выхода }
GraphDriver:=Detect; { Автоматическое оперделение драйвера }
GraphMode:=0; { Задание графического режима }
InitGraph(GraphDriver,GraphMode,PathToDriver); { Инициалиэация графики }
repeat
for i:=1 to 2 do { Цикл прорисовки в двух страницах }
Begin
SwitchingPage; { Переключение страниц }
SetColor(White); { Установка белого цвета }
Arc(GetMaxX div 2,GetMaxY div 6,180,360,GetMaxY div 14 );
{ Прорисовка корзины }
Line(0,GetMaxY*9 div 10,GetMaxX,GetMaxY*9 div 10);
OutTextXY(0,GetMaxY*9 div 10+3, { Вывод подсказки }
' Home(7) - From Left PgUp(9) - From Right ' +
' Esc - Exit Space - New')
End;
case ReaderKey of { Выбор действия по прочтенному символу }
#71,#55:BallDriver(FromLeft);
#73,#57:BallDriver(FromRight);
#27:Exit:=TRUE
end;
ClearDevice { Очистка экрана }
until Exit;
CloseGraph { Закрытие графического режима }
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию