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

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

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

 
 Ответить  Открыть новую тему 
> Обеспечить движение качелей, качели я нарисовала...а вот движение....
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


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

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

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


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

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

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


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


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


Пионер
**

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

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


а как это сделать? я вообще не понимаю как можно обеспечить движение качелей sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


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

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

Репутация: -  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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


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

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

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


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


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


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


Профи
****

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

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


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


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


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

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

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


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


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


Пионер
**

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

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


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

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


Пионер
**

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

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


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


Профи
****

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

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


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


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


-
****

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

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


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


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


Профи
****

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

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


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


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


Пионер
**

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

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


ну я заменила...всё равно меню не показывается.....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Пионер
**

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

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


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

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

 





- Текстовая версия 13.05.2024 1:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name