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

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

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

> Немного графики, Прыгающий шарик
qwerty
сообщение 19.12.2004 20:23
Сообщение #1


Новичок
*

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

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


НАРОД !!!! Тут такая задачка: Необходимо разработать приложение, в котором шарик падает сверху экрана со случайной горизонтальной скоростью (V=4..10). Отскок от стенок происходит с потерей энергии - не вполне упругий удар k=0,6..0,9.
Спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
volvo
сообщение 19.12.2004 20:51
Сообщение #2


Гость






qwerty
От нижней поверхности тоже нужен отскок? Или шарик "пролетает" экран?
 К началу страницы 
+ Ответить 
qwerty
сообщение 19.12.2004 21:03
Сообщение #3


Новичок
*

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

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


Отскок нужен от ВСЕХ поверхностей, как будто шарик "в коробке".

Сообщение отредактировано: qwerty - 19.12.2004 21:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.12.2004 21:55
Сообщение #4


Гость






qwerty
Вот кое-что из моих старых программ (можешь поиграться с k и divider)
Код

uses crt, graph;

type
 TVector =
   record
     X, Y: real;
   end;

const
 divider = 1;
 k = 0.7;
 ball_size = 5;

var
 pos, v: TVector;

procedure ShowBall(color: byte);
 begin
   setcolor(color);
   circle(trunc(pos.X), trunc(pos.Y), ball_size);
 end;

procedure RecalcBall;

 procedure ChangeDirectionX;
   begin
     pos.X := pos.X - v.X * divider;
     v.X := - v.X * k
   end;
 procedure ChangeDirectionY;
   begin
     pos.Y := pos.Y - v.Y * divider;
     v.Y := - v.Y * k
   end;

 begin
   ShowBall(black);

   pos.X := pos.X + v.X * divider;
   if pos.X >= getmaxx - ball_size then
     ChangeDirectionX
   else
     if pos.X <= ball_size then
       ChangeDirectionX;
     {
     else inc(pos.X, v.X * divider);
     }

   pos.Y := pos.Y + v.Y * divider;
   if pos.Y >= getmaxy - ball_size then
     ChangeDirectionY
   else
     if pos.Y <= ball_size then
       ChangeDirectionY;
     {
     else inc(pos.Y, v.Y * divider);
     }

   ShowBall(white)
 end;

var
 grDriver, grMode, errCode: Integer;
 to_exit: boolean;
begin
 grDriver := Detect;
 initgraph(grDriver, grMode,'');
 errCode := graphresult;
 if errCode <> grOk then
   begin
     writeln('Graphics error:', grapherrormsg(errCode));
     halt
   end;

 v.X := random(7) + 4; v.Y := 10;
 pos.X := getmaxx div 2; pos.y := 0;

 to_exit := false;
 ShowBall(white);
 repeat
   RecalcBall;
   delay(10000);
   if keypressed then
     begin
       to_exit := (readkey = #27);
       while keypressed do readkey
     end
 until to_exit;

 setcolor(white);
end.
 К началу страницы 
+ Ответить 
qwerty
сообщение 19.12.2004 22:49
Сообщение #5


Новичок
*

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

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


volvo
Огромное спасибо !!!!!! Выручил !!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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