Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 9
1

Поворот паруса корабля на 180 градусов при приходе за рамки экрана и изменении движения корабля

26.04.2016, 12:01. Показов 1923. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Тема: есть корабль с парусом. При выходе за рамки экрана корабль начинает двигаться в обратную сторону. Нужно сделать так. чтобы и пару так же поворачивал за кораблем
Код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
uses
  GraphABC;
 
var
  x, y, dx: integer;
 
begin
  x := 200; y := 200;
  dx := 1;
  SetPenWidth(2);
  LockDrawing;
  
  repeat
    ClearWindow;
    { Корпус: }
    SetPenColor(clGreen);
    MoveTo(x, y);
    LineTo(x + 80, y + 80);
    LineTo(x + 280, y + 80);
    LineTo(x + 350, y);
    LineTo(x, y);
    { Каюта: }
    MoveTo(x + 60, y);
    LineTo(x + 60, y - 50);
    LineTo(x + 280, y - 50);
    LineTo(x + 280, y);
    { Парус: }
    SetPenColor(clBrown);
    MoveTo(x + 160, y - 50);
    LineTo(x + 150, y - 110);
    LineTo(x + 160, y - 150);
    LineTo(x + 160, y - 50);
    { Окна: }
    SetPenColor(clBlue);
    Circle(x + 100, y - 25, 10);
    Circle(x + 150, y - 25, 10);
    Circle(x + 200, y - 25, 10);
    Circle(x + 250, y - 25, 10);
    reDraw;
    x := x + dx;
    { При выходе за рамки окна меняем направление: }
    if (x + 350 > WindowWidth) or (x < 0) then dx := -dx 
  until false;
end.
Тут всё работает, кроме паруса. Ах да, и еще, если не сложно будет, можно ли сделать так, чтобы корабль двигался по волне?
Огромное спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2016, 12:01
Ответы с готовыми решениями:

В порт в среднем приходит 3 корабля в день. Какова вероятность того, что в порт в день придет 2 корабля; 4 корабля?
помогите решить пожалуйста В порт в среднем приходит 3 корабля в день. Какова вероятность...

Поворот экрана stm32f429i-disso 180 градусов
Привет. В общем вопрос как повернуть экран на 180 градусов ? Использую библиотеки hal bsp.

Настройка управления и движения корабля
Всем добрый день! Возникла не большая проблема с управлением кораблем и его наклонами. Делаю 3d...

Построить модель движения корабля
Построить модель движения корабля

6
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 9
28.04.2016, 19:11  [ТС] 2
Может все-таки есть тот человек, который сможет помочь с этим заданием?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.04.2016, 19:54 3
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Поворот паруса
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
uses
  GraphABC;
 
var
  x, y, dx, k: integer;
 
begin
  x := 200; y := 200;
  dx := 1;
  k:=1;
  SetPenWidth(2);
  LockDrawing;
 
  repeat
    ClearWindow;
    { Корпус: }
    SetPenColor(clGreen);
    MoveTo(x, y);
    LineTo(x + 80, y + 80);
    LineTo(x + 280, y + 80);
    LineTo(x + 350, y);
    LineTo(x, y);
    { Каюта: }
    MoveTo(x + 60, y);
    LineTo(x + 60, y - 50);
    LineTo(x + 280, y - 50);
    LineTo(x + 280, y);
    { Парус: }
    SetPenColor(clBrown);
    MoveTo(x + 160, y - 50);
    LineTo(x + 160+k*10, y - 110);
    LineTo(x + 160, y - 150);
    LineTo(x + 160, y - 50);
    { Окна: }
    SetPenColor(clBlue);
    Circle(x + 100, y - 25, 10);
    Circle(x + 150, y - 25, 10);
    Circle(x + 200, y - 25, 10);
    Circle(x + 250, y - 25, 10);
    sleep(50);
    x := x + dx;
      { При выходе за рамки окна меняем направление: }
    if (x + 350 > WindowWidth) or (x < 0) then
     begin
      dx := -dx;
      k:=-k;
     end;
    reDraw;
 
 
  until false;
end.
1
318 / 208 / 162
Регистрация: 08.12.2015
Сообщений: 863
28.04.2016, 20:16 4
Подобие волны
Pascal
13
14
15
16
17
....
repeat
  y:=round(y+sin(x*100));
    ClearWindow;
....
0
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 9
28.04.2016, 20:24  [ТС] 5
А, если текстом, то, как я понял, нужно саму ось x, по которой двигается кораблик представить как синусоиду? Или я что-то не до конца понял?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.04.2016, 21:13 6
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
uses
  GraphABC;
procedure more;
var x,y:integer;
begin
setpencolor(clBlue);
x:=0;
while x<=windowwidth+1 do
 begin
  y:=270-round(sin(x/20)*10);
  if x=0 then moveto(x,y)
  else lineto(x,y);
  x:=x+1;
 end;
line(1,250,1,windowheight);
line(windowwidth,250,windowwidth,windowheight);
line(0,windowheight,windowwidth,windowheight);
floodfill(350,350,clBlue);
end;
procedure korabl(x,y,k:integer);
begin
SetPenWidth(2);
SetBrushStyle(bsClear);
// Корпус:
SetPenColor(clGreen);
MoveTo(x, y);
LineTo(x + 80, y + 80);
LineTo(x + 280, y + 80);
LineTo(x + 350, y);
LineTo(x, y);
floodfill(x+5,y+5,clGreen);
// Каюта:
MoveTo(x + 60, y);
LineTo(x + 60, y - 50);
LineTo(x + 280, y - 50);
LineTo(x + 280, y);
// Парус:
SetPenColor(clBrown);
MoveTo(x + 160, y - 50);
LineTo(x + 160+k*10, y - 110);
LineTo(x + 160, y - 150);
LineTo(x + 160, y - 50);
// Окна:
SetPenColor(clBlue);
Circle(x + 100, y - 25, 10);
Circle(x + 150, y - 25, 10);
Circle(x + 200, y - 25, 10);
Circle(x + 250, y - 25, 10);
end;
var
  x, y, dx, k: integer;
 
begin
  x := 200; y := 200;
  dx := 1;
  k:=1;
  LockDrawing;
  repeat
    ClearWindow;
    more;
    korabl(x,y,k);
    sleep(20);
    x := x + dx;
      { При выходе за рамки окна меняем направление: }
    if (x + 350 > WindowWidth) or (x < 0) then
     begin
      dx := -dx;
      k:=-k;
     end;
    reDraw;
  until false;
end.
0
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 9
29.04.2016, 18:17  [ТС] 7
Либо компилятор у меня до конца не работает с кодом, либо отрисовка замирает на начальном значении?
0
29.04.2016, 18:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2016, 18:17
Помогаю со студенческими работами здесь

Вывести на экран новое направление движения корабля
С клавиатуры вводится направление движения корабля: ...

Canvas вектор и скорость движения корабля. (игра)
Добрый день господа. Требуется ваша подсказка. Хочу понять как правильно рассчитывать вектор...

Поворот матрицы на 180 градусов.
Создайте квадратный массив из N строк и N столбцов,состоящую из натуральных чисел.Поверните его на...

Поворот картинки на форме на 90.180 градусов
Поворот картинки на форме! как эт сделать!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru