IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Обеспечить движение качелей, качели я нарисовала...а вот движение....
Svetka
сообщение 22.03.2005 13:50
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Код

setfillstyle(9,blue);
bar(0,0,640,75);
setcolor(14);
circle(45,40,30);
setfillstyle(1,14);
floodfill(45,40,14);
setcolor(6);
setlinestyle(0,brown,3);
line(220,100,380,100);
line(220,300,220,100);
line(380,300,380,100);
line(260,250,260,100);
line(340,250,340,100);
setfillstyle(1,darkgray);
bar(250,250,350,260);
setfillstyle(1,green);
Bar(0,300,640,360);

вот сами качели...помогите обеспечить движение качелей!! очень надо smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 22.03.2005 14:02
Сообщение #2


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Для движения, рисуем качели (это у вас реализованно), ждем пока пользователь их увидит (delay) и закрашиваем цветом фона .
Все повторяем.

Для этого удобно запихнуть все что вы написали в процедуру, параметр котрой -цвет рисования.
Тогда в программе пишем так:

Цитата
repeat
draw (color);
delay(time);
draw(0);
run; {передвигаем качели}
until {условиевыхода, напрмиер keypressed}


добавил позже:
я не подумал, качели ведь наклоняются когда двигаются smile.gif....
То есть рисунок еще поворачивать надо ...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 22.03.2005 14:33
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


а как это сделать? я вообще не понимаю как можно обеспечить движение качелей sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 22.03.2005 15:06
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Все просто: смещение качелей по координате X=sin(t), по координате Y=1-cos(sin(t)). Не забыть еще что Y вниз идет при рисовании.
Код

program kach;
uses Crt,Graph;

procedure DrawFon;  {рисуем фон}
begin
setfillstyle(9,blue);
bar(0,0,640,75);
setcolor(14);
circle(45,40,30);
setfillstyle(1,14);
floodfill(45,40,14);
setcolor(6);
setlinestyle(0,0,3);
line(200,100,400,100);
line(200,300,200,100);
line(400,300,400,100);
line(260,250,260,100);
line(340,250,340,100);
setfillstyle(1,darkgray);
bar(250,250,350,260);
setfillstyle(1,green);
Bar(0,300,640,360);
setlinestyle(0,0,3);
end;

procedure DrawKach(x,y:integer); {рисуем качели со смещением по x и y}
begin
setcolor(6);
line(260+x,250-y,260,100);
line(340+x,250-y,340,100);
setfillstyle(1,darkgray);
bar(250+x,250-y,350+x,260-y);
end;

procedure DrawNoKach(x,y:integer); {стираем качели со смещением по x и y}
begin
setcolor(0);
line(260+x,250-y,260,100);
line(340+x,250-y,340,100);
setfillstyle(1,black);
bar(250+x,250-y,350+x,260-y);
end;

var  driver,mode:integer;
    t,h :real;

begin
    h:=2*pi/400;
    t:=0;
    driver:=VGA; mode:=VGAhi;
    InitGraph(driver,mode,'C:\BP\BGI');

    DrawFon;
    repeat
    DrawNoKach(trunc(20*(sin(t))),trunc(20*(1-cos(sin(t)))));
    t:=t+h;
    if t>2*pi then t:=0;
    DrawKach(trunc(20*(sin(t))),trunc(20*(1-cos(sin(t)))));
    delay(1000);
    until keypressed;

    CloseGraph;
end.

:smoke:


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 22.03.2005 15:13
Сообщение #5


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


ДА ну, слишком круто, для подобной задачи, все проще можно сделать:
Код
uses graph,crt;
procedure draw(shag:byte; color:byte);
begin
setcolor(color);
line(260,100,260,100+10*shag); {2}
line(340,100,340,100+10*shag); {1 ступень}
setfillstyle(1,color); {!}
bar(250,100+10*shag,350,100+13*shag+5); {сиденье}
end;
var
gd,gm:integer;
k:byte;
begin
gd:=detect; initgraph(gd,gm,'');
 setfillstyle(9,blue);
bar(0,0,640,75);
setcolor(14);
circle(45,40,30);
setfillstyle(1,14);
floodfill(45,40,14);
setcolor(6);
setlinestyle(0,brown,3);
line(220,100,380,100);
line(220,300,220,100);
line(380,300,380,100);
setfillstyle(1,green);
Bar(0,300,640,360);
k:=1;
repeat
 for k:=1 to 10 do begin draw(k,8); delay(2000); draw(k,0); end;
 for k:=10 downto 1 do begin draw(k,8); delay(2000); draw(k,0); end;
until keypressed;
readkey;
end.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 22.03.2005 15:15
Сообщение #6


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


эээ.... только мы в разные стороны мыслим smile.gif
Я реализовал движение простое - качели качаются именно так smile.gif
(только вчера качался :P :D ) smile.gif


p.s. а скажи, Svetka, кто будет качаться на качелях ночью? smile.gif
а если не нось, то почему экран черный? smile.gif) солнце вроде есть smile.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 22.03.2005 15:22
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Прикольно! :p7:
Хотя это первое, что я сделал... Но потом подумал, что это нужно девушке... и переделал ;)


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 22.03.2005 20:43
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Цитата(Oleg_Z @ 22.03.05 16:15)
эээ.... только мы в разные стороны мыслим smile.gif
Я реализовал движение простое  - качели качаются именно так smile.gif
(только вчера качался :P :D ) smile.gif
p.s. а скажи, Svetka, кто будет качаться на качелях ночью? smile.gif
а если не нось, то  почему экран  черный? smile.gif) солнце вроде есть smile.gif

хехе,Олег......ночью катаца на качелях это классно,правда сама не пробовала;)
пасибо за задачу;) unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 22.03.2005 20:51
Сообщение #9


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


да всегда пожалуйста! smile.gif а ты не из Москвы случайнО? (ответ мне в приват smile.gif )


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 22.03.2005 21:12
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Цитата(hiv @ 22.03.05 16:22)
Прикольно!  :p7:
Хотя это первое, что я сделал... Но потом подумал, что это нужно девушке... и переделал  ;)

пасиба большое за задачу;)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 22.03.2005 22:06
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


вот у меня было меню......из трёх пунктов.........там был пункт(качели) тока пока без движения.........я туда вместо неё вставила исправленную.........запускаю а у мя не появляетца меню....а сразу качели и сразу выходит из проги...почему? не знаешь?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 23.03.2005 9:33
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Если бы весь код опубликовала - тогда проблем не было бы...
Можешь оформить тело прогаммы (там где begin ........ end.), что я тебе давал, в виде процедуры. Вызов процедуры вставь в код своей прогаммы там где меню (или где твои качели рисовались).


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 23.03.2005 11:03
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


вот мой весь код
Код

Program www;
uses crt,graph;
var c:char;
 menu:array[0..2]of string;
 item,i:integer;
procedure Zastavka;
var
GrDriver,grmode:integer;
begin
grdriver:=detect;
initgraph(grdriver,grmode, 'c:\TP\TP\BGI');
setfillstyle(9,blue);
bar(0,0,640,75);
setcolor(14);
circle(45,40,30);
setfillstyle(1,14);
floodfill(45,40,14);
setcolor(6);
setlinestyle(0,brown,3);
line(220,100,380,100);
line(220,300,220,100);
line(380,300,380,100);
line(260,250,260,100);
line(340,250,340,100);
setfillstyle(1,darkgray);
bar(250,250,350,260);
setfillstyle(1,green);
Bar(0,300,640,360);
readkey;
closegraph;
end;
procedure Zadacha;
begin
clrscr;
Writeln('zadacha=)');
readln;
end;
begin
 menu[0]:='1.Zastavka';
 menu[1]:='2.Zadacha';
 menu[2]:='3.Vyhod';
 item:=0;
 while true do begin
   clrscr;
   for i:=0 to 2 do begin
     if i=item
       then begin
         textcolor(15);
         textbackground(5);
       end
       else begin
         textcolor(7);
         textbackground(0);
       end;
     writeln(menu[i]);
   end;
   textbackground(0);
   case readkey of
     #0: case readkey of
       #72: if item>0 then item := item - 1;
       #80: if item<2 then item := item + 1;
     end;
     #13: case item of
       0: Zastavka;
       1: Zadacha;
       2: Halt;
     end;
     '1': Zastavka;
     '2': Zadacha;
     '3': Halt;
   end;
 end;
end.

вот куда надо изменё1нную часть вставить что б сначало меню показывалось?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
FreeMan
сообщение 23.03.2005 11:13
Сообщение #14


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


дык меню итак первым показывается. а чтоб качельки качались, надо процедуру заставки заменить.


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 23.03.2005 11:17
Сообщение #15


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Замени код в процедуре Zastavka на тот код что я написал.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 23.03.2005 11:18
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


ну я заменила...всё равно меню не показывается.....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 23.03.2005 11:30
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


вот получившийся код:
Исходный код

Program www;
uses crt,graph;
var {c:char;}
menu:array[0..2] of string;
item,i:integer;
procedure Zatavka;
var
GrDriver,grmode:integer;
begin
grdriver:=detect;
initgraph(grdriver,grmode, 'c:\TP\TP\BGI');
setfillstyle(9,blue);
bar(0,0,640,75);
setcolor(14);
circle(45,40,30);
setfillstyle(1,14);
floodfill(45,40,14);
setcolor(6);
setlinestyle(0,brown,3);
line(200,100,400,100);
line(200,300,200,100);
line(400,300,400,100);
line(260,250,260,100);
line(340,250,340,100);
setfillstyle(1,darkgray);
bar(250,250,350,260);
setfillstyle(1,green);
Bar(0,300,640,360); {’а ў }
setlinestyle(0,0,3);
end;
procedure DrawKach(x,y:integer);
begin
setcolor(6);
line(260+x,250-y,260,100);
line(340+x,250-y,340,100);
setfillstyle(1,darkgray);
bar(250+x,250-y,350+x,260-y);
end;
procedure DrawNoKach(x,y:integer);
begin
setcolor(0);
line(260+x,250-y,260,100);
line(340+x,250-y,340,100);
setfillstyle(1,black);
bar(250+x,250-y,350+x,260-y);
end;
var driver,mode:integer;
t,h:real;
begin
h:=2*pi/400;
t:=0;
driver:=VGA;mode:=VGAhi;
initGraph(driver,mode,'c:\tp\tp\bin');

Zatavka;
repeat
DrawNoKach(trunc(20*(sin(t))),trunc(20*(1-cos(sin(t)))));
t:=t+h;
if t>2*pi then t:=0;
DrawKach(trunc(20*(sin(t))),trunc(20*(1-cos(sin(t)))));
delay(1000);
until keypressed;
CloseGraph;
end.
procedure Zadacha;
begin
clrscr;
Writeln('zadacha=)');
readln;
end;
begin
menu[0]:='1.Заставка ';
menu[1]:='2.Задача ';
menu[2]:='3.Выход';
item:=0;
while true do begin
clrscr;
for i:=0 to 2 do begin
if i=item
then begin
textcolor(14);
textbackground(4);
end
else begin
textcolor(7);
textbackground(0);
end;
writeln(menu[i]); {ЊҐ­о}
end;
textbackground(0);{–ўҐв д®­ -—са­л©}
case readkey of
#0: case readkey of
#72: if item>0 then item := item - 1;
#80: if item<2 then item := item + 1;
end;
#13: case item of
0: Zastavka;
1: Zadacha;
2: Halt;
end;
'1': Zastavka;
'2': Zadacha;
'3': Halt;
end;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 23.03.2005 11:37
Сообщение #18


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Вот как надо:
Код
Program www;
uses crt,graph;
var c:char;
menu:array[0..2]of string;
item,i:integer;

procedure Zastavka;

procedure DrawFon;  {рисуем фон}
begin
setfillstyle(9,blue);
bar(0,0,640,75);
setcolor(14);
circle(45,40,30);
setfillstyle(1,14);
floodfill(45,40,14);
setcolor(6);
setlinestyle(0,0,3);
line(200,100,400,100);
line(200,300,200,100);
line(400,300,400,100);
line(260,250,260,100);
line(340,250,340,100);
setfillstyle(1,darkgray);
bar(250,250,350,260);
setfillstyle(1,green);
Bar(0,300,640,360);
setlinestyle(0,0,3);
end;

procedure DrawKach(x,y:integer); {рисуем качели со смещением по x и y}
begin
setcolor(6);
line(260+x,250-y,260,100);
line(340+x,250-y,340,100);
setfillstyle(1,darkgray);
bar(250+x,250-y,350+x,260-y);
end;

procedure DrawNoKach(x,y:integer); {стираем качели со смещением по x и y}
begin
setcolor(0);
line(260+x,250-y,260,100);
line(340+x,250-y,340,100);
setfillstyle(1,black);
bar(250+x,250-y,350+x,260-y);
end;

var  driver,mode:integer;
    t,h :real;

begin
    h:=2*pi/400;
    t:=0;
    driver:=VGA; mode:=VGAhi;
    InitGraph(driver,mode,'C:\BP\BGI');

    DrawFon;
    repeat
    DrawNoKach(trunc(20*(sin(t))),trunc(20*(1-cos(sin(t)))));
    t:=t+h;
    if t>2*pi then t:=0;
    DrawKach(trunc(20*(sin(t))),trunc(20*(1-cos(sin(t)))));
    delay(1000);
    until keypressed;

    CloseGraph;
end;

procedure Zadacha;
begin
clrscr;
Writeln('zadacha=)');
readln;
end;

begin
menu[0]:='1.Zastavka';
menu[1]:='2.Zadacha';
menu[2]:='3.Vyhod';
item:=0;
while true do begin
  clrscr;
  for i:=0 to 2 do begin
    if i=item
      then begin
        textcolor(15);
        textbackground(5);
      end
      else begin
        textcolor(7);
        textbackground(0);
      end;
    writeln(menu[i]);
  end;
  textbackground(0);
  case readkey of
    #0: case readkey of
      #72: if item>0 then item := item - 1;
      #80: if item<2 then item := item + 1;
    end;
    #13: case item of
      0: Zastavka;
      1: Zadacha;
      2: Halt;
    end;
    '1': Zastavka;
    '2': Zadacha;
    '3': Halt;
  end;
end;
end.

И учите процедуры... sad.gif


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 23.03.2005 11:55
Сообщение #19


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


пасибо большоеsmile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 0:11
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"