Немного графики, Прыгающий шарик |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Немного графики, Прыгающий шарик |
qwerty |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: 0 |
НАРОД !!!! Тут такая задачка: Необходимо разработать приложение, в котором шарик падает сверху экрана со случайной горизонтальной скоростью (V=4..10). Отскок от стенок происходит с потерей энергии - не вполне упругий удар k=0,6..0,9.
Спасибо. |
volvo |
Сообщение
#2
|
Гость |
qwerty
От нижней поверхности тоже нужен отскок? Или шарик "пролетает" экран? |
qwerty |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: 0 |
Отскок нужен от ВСЕХ поверхностей, как будто шарик "в коробке".
Сообщение отредактировано: qwerty - |
volvo |
Сообщение
#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 |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: 0 |
volvo
Огромное спасибо !!!!!! Выручил !!!!! |
Текстовая версия | 6.05.2024 9:46 |