Uses GraphAbc;
procedure raketa(x:integer);
begin
Line(x,100,x+100,150);
Line(x+100,150,x+300,150);
Line(x+300,150,x+350,200);
Line(x+350,200,x+300,250);
Line(x+300,250,x+100,250);
Line(x+100,250,x,300);
Line(x,300,x,100);
SetPenColor(clBlack);
SetBrushColor(clSkyBlue );
Circle(x+150,200,20);
Circle(x+200,200,20);
Circle(x+250,200,20);
end;
var x:integer;
Begin
x:=5;
lockdrawing;
repeat
clearwindow;
x:=x+5;
raketa(x);
sleep(50);
redraw
until x>windowwidth
End.
Другие языки программирования и технологии
НА данной программе изображена ракета летящая вправо, как сделать что бы она летела влево?? Всё это в PascalABC.
Uses GraphAbc;
var k: integer=-1;
procedure raketa(x:integer);
begin
Line(x,100,x+k*100,150);
Line(x+k*100,150,x+k*300,150);
Line(x+k*300,150,x+k*350,200);
Line(x+k*350,200,x+k*300,250);
Line(x+k*300,250,x+k*100,250);
Line(x+k*100,250,x,300);
Line(x,300,x,100);
SetPenColor(clBlack);
SetBrushColor(clSkyBlue );
Circle(x+k*150,200,20);
Circle(x+k*200,200,20);
Circle(x+k*250,200,20);
end;
var x:integer;
Begin
k:=1;
x:=0;
lockdrawing;
for var i:=0 to 3 do begin
repeat
clearwindow;
x:=x+k*5;
raketa(x);
sleep(50);
redraw
until ((k<0)and(x<0))or((k>0)and(x>windowwidth));
x:=x+k*350;
k:=k*-1;
end;
End.
var k: integer=-1;
procedure raketa(x:integer);
begin
Line(x,100,x+k*100,150);
Line(x+k*100,150,x+k*300,150);
Line(x+k*300,150,x+k*350,200);
Line(x+k*350,200,x+k*300,250);
Line(x+k*300,250,x+k*100,250);
Line(x+k*100,250,x,300);
Line(x,300,x,100);
SetPenColor(clBlack);
SetBrushColor(clSkyBlue );
Circle(x+k*150,200,20);
Circle(x+k*200,200,20);
Circle(x+k*250,200,20);
end;
var x:integer;
Begin
k:=1;
x:=0;
lockdrawing;
for var i:=0 to 3 do begin
repeat
clearwindow;
x:=x+k*5;
raketa(x);
sleep(50);
redraw
until ((k<0)and(x<0))or((k>0)and(x>windowwidth));
x:=x+k*350;
k:=k*-1;
end;
End.
Поменять плюс на минус - будет влево лететь. Задом, правда, но ты об этом же не спрашивал...
Николай Юрьевич Горячих
а можешь написать как сделать что бы нормально летел влево)
Для изменения направления движения нужно изменить приращение координаты, по которой идет движение, на обратное. А также, не забыть про задание других точек старта и финиша.
Для поворота ракеты в другую сторону нужно ввести отрицательный множитель для координаты, по которой идет отражение. Кстати, если этот множитель (в программе под именем d) сделать больше 1/-1, то ракета растянется в d раз.
Рисовать ракету, конечно, нужно относительно ее центра для адекватных преобразований, касающихся отражения, да и для задания старта/финиша, но мне было лень и просто взял твои координаты, так что ладно..
В итоге как-то так:
uses GraphABC;
procedure Rocket(x, y: integer; dir: string);
// p - точки для отрусовки контура
// dir - куда повернута ракета (right/left)
var p: array of Point; d: integer;
begin
case dir of
'right': d := 1;
'left': begin d := -2; x += 350; end; // 350 - длина ракеты (чтоб из-за окна вылетала)
end;
SetLength(p, 7); // 7 - сколько вершин на контуре
// Задание координат точек контура (влияют только числа)
// d - для отражения и растягивания рисунка по оси X, x и y - для перемещения
p[0].X := 0*d + x; p[0].Y := 100 + y;
p[1].X := 100*d + x; p[1].Y := 150 + y;
p[2].X := 300*d + x; p[2].Y := 150 + y;
p[3].X := 350*d + x; p[3].Y := 200 + y;
p[4].X := 300*d + x; p[4].Y := 250 + y;
p[5].X := 100*d + x; p[5].Y := 250 + y;
p[6].X := 0*d + x; p[6].Y := 300 + y;
// Отрисовка контура
DrawPolygon(p);
// Иллюминаторы по аналогии
Circle(150*d + x, 200 + y, 20);
Circle(200*d + x, 200 + y, 20);
Circle(250*d + x, 200 + y, 20);
end;
begin
var x, y: integer;
LockDrawing;
// направо
x := 0; y := 200; // откуда старт
repeat
x += 10; y -= 5; // приращение координат
Window.Clear;
Rocket(x, y, 'right');
ReDraw;
Sleep(10);
until x > Window.Width; // где финиш
// налево
x := Window.Width; y := -150; // откуда старт
repeat
x -= 10; y += 5; // приращение координат
Window.Clear;
Rocket(x, y, 'left');
ReDraw;
Sleep(10);
until x < 0-350; // где финиш
end.
Для поворота ракеты в другую сторону нужно ввести отрицательный множитель для координаты, по которой идет отражение. Кстати, если этот множитель (в программе под именем d) сделать больше 1/-1, то ракета растянется в d раз.
Рисовать ракету, конечно, нужно относительно ее центра для адекватных преобразований, касающихся отражения, да и для задания старта/финиша, но мне было лень и просто взял твои координаты, так что ладно..
В итоге как-то так:
uses GraphABC;
procedure Rocket(x, y: integer; dir: string);
// p - точки для отрусовки контура
// dir - куда повернута ракета (right/left)
var p: array of Point; d: integer;
begin
case dir of
'right': d := 1;
'left': begin d := -2; x += 350; end; // 350 - длина ракеты (чтоб из-за окна вылетала)
end;
SetLength(p, 7); // 7 - сколько вершин на контуре
// Задание координат точек контура (влияют только числа)
// d - для отражения и растягивания рисунка по оси X, x и y - для перемещения
p[0].X := 0*d + x; p[0].Y := 100 + y;
p[1].X := 100*d + x; p[1].Y := 150 + y;
p[2].X := 300*d + x; p[2].Y := 150 + y;
p[3].X := 350*d + x; p[3].Y := 200 + y;
p[4].X := 300*d + x; p[4].Y := 250 + y;
p[5].X := 100*d + x; p[5].Y := 250 + y;
p[6].X := 0*d + x; p[6].Y := 300 + y;
// Отрисовка контура
DrawPolygon(p);
// Иллюминаторы по аналогии
Circle(150*d + x, 200 + y, 20);
Circle(200*d + x, 200 + y, 20);
Circle(250*d + x, 200 + y, 20);
end;
begin
var x, y: integer;
LockDrawing;
// направо
x := 0; y := 200; // откуда старт
repeat
x += 10; y -= 5; // приращение координат
Window.Clear;
Rocket(x, y, 'right');
ReDraw;
Sleep(10);
until x > Window.Width; // где финиш
// налево
x := Window.Width; y := -150; // откуда старт
repeat
x -= 10; y += 5; // приращение координат
Window.Clear;
Rocket(x, y, 'left');
ReDraw;
Sleep(10);
until x < 0-350; // где финиш
end.
Вижу правильный ответ, поэтому не стану его передёргивать.
Однако позволю себе ремарку.
Анастасия, просто удивительно! Неужели Вам не преподавали процедуры Polygon и Polyline? Ведь приведённый Вами рисунок ракеты по своей природе является замкнутой ломаной!!!
Однако позволю себе ремарку.
Анастасия, просто удивительно! Неужели Вам не преподавали процедуры Polygon и Polyline? Ведь приведённый Вами рисунок ракеты по своей природе является замкнутой ломаной!!!
Похожие вопросы
- Опасен ли кряк данной программы?
- с помощью какой программы можно разделить лицо пополам и сделать вторую половину в зеркальном отражении?
- Есть ли какая нибудь простая программа что бы расстановку в комнате сделать и поглядеть как будет?
- В какой программе и в каком формате лучше сделать рекламную листовку, чтобы его быстро и без проблем распечатали?
- есть такая программа или такой саит где можно сделать саты как vkантакте, одноклассники и тгд...
- Как сделать программу которая при вводе текста, удаляет из текста все слова, содержащие букву «я». (PascalABC)
- Как сделать программу в pascalABC которая бы считала количество определённых слов в тексте?
- Программа для PascalABC Помогите пожалуйста!
- РЕБЯТ!!! Те кто понимает в PascalABC.Надо на нем написать программу и чтобы обязательно задавалось количество лучей!!! спа
- Где ошибка в программе PascalABC.net