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

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

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

> Движущееся цветное изображение
18192123
сообщение 3.03.2007 21:16
Сообщение #1


Профи
****

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

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


Написать программу, результатом работы которой будет движущееся по экрану монитора цветное изображение настольной лампы.

У меня ооочень глупый вопрос: не представляю, каким способом нарисовать, чтоб было более менее похоже на лампу!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 15)
мисс_граффити
сообщение 3.03.2007 21:20
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


а можешь нарисовать (в пэйнте, на листике - не важно) свое видение лампы?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 3.03.2007 21:42
Сообщение #3


Профи
****

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

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


Что-то такое.....

(см картинку в следующем посте)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 3.03.2007 21:45
Сообщение #4


Гуру
*****

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

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


У кого проблемы с инетом и не в силах качать 1.5 мега вот jpg вариант:
Прикрепленное изображение

PS красиво вышло good.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 3.03.2007 22:12
Сообщение #5


Профи
****

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

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


Цитата(Bokul @ 3.03.2007 21:45) *

У кого проблемы с инетом и не в силах качать 1.5 мега вот jpg вариант:
Прикрепленное изображение

PS красиво вышло good.gif

Спасибо! Теперь осталось мне реализовать что-то подобное...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.03.2007 22:30
Сообщение #6


Гость






18192123, на форуме есть процедура, которая выводит BMP файл в определенное место экрана... Выведи изображение один раз с ее помощью, потом "захвати" изображение с помощью GetImage, и просто в цикле используй PutImage (с предварительной очисткой изображения, выведенного на предыдущем шаге)...

Примеры использования GetImage/PutImage были на форуме, посмотри в поиске...
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 3.03.2007 22:49
Сообщение #7


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


если не bmp-шку двигать, а именно лампочку рисовать....
у меня как-то так получилось (процедура, рисующая лампу в заданном месте):
procedure lamp(const x,y: integer);
begin
setcolor(5);
ellipse(x+200,y+200,0,360,20,10);
setfillstyle(1,5);
floodfill(x+200,y+200,5);
setcolor(13);
ellipse(x+200,y+185,0,360,10,5);
setfillstyle(1,13);
floodfill(x+200,y+185,13);
ellipse(x+180,y+240,0,360,30,15);
floodfill(x+180,y+240,13);
setcolor(15);
ellipse(x+185,y+180,0,180,15,10);
moveto(x+170,y+180);
lineto(x+170,y+240);
ellipse(x+185,y+245,0,360,5,2);
setfillstyle(1,15);
floodfill(x+185,y+245,15);
readkey;
end;


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 4.03.2007 18:12
Сообщение #8


Профи
****

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

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


volvo , спасибо за информацию, буду знать и о таком способе!
Но мне больше подходит вариант мисс_граффити (именно с рисованием)

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

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


Uses Graph, Crt;
procedure lamp( x,y: integer);
begin
setcolor(5);
ellipse(x+200,y+200,0,360,20,10);
setfillstyle(1,5);
floodfill(x+200,y+200,5);
setcolor(13);
ellipse(x+200,y+185,0,360,10,5);
setfillstyle(1,13);
floodfill(x+200,y+185,13);
ellipse(x+180,y+240,0,360,30,15);
floodfill(x+180,y+240,13);
setcolor(15);
ellipse(x+185,y+180,0,180,15,10);
moveto(x+170,y+180);
lineto(x+170,y+240);
ellipse(x+185,y+245,0,360,5,2);
setfillstyle(1,15);
floodfill(x+185,y+245,15);
readkey;
end;
var
DriverVar, ModeVar, ErrCode, x, y: integer;
dx, dt : integer;
begin
clrscr;
DriverVar := Detect; ModeVar := VGAHi;
InitGraph (DriverVar, ModeVar,'');
ErrCode := GraphResult;
if ErrCode = grOk then begin
dx := 15;
dt := 70;
while x < 600 do begin

lamp (x,y);
Delay(dt);
SetColor(0);
lamp(x,y);
x := x+dx;
end;
end else
closegraph;
end.




P.S.
мисс_граффити, твоя лампа - просто супер!


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.03.2007 18:23
Сообщение #9


Гость






Вот так должна выглядеть основная программа:
begin
DriverVar := Detect; ModeVar := VGAHi;
InitGraph (DriverVar, ModeVar,'');
ErrCode := GraphResult;
if ErrCode = grOk then begin
dx := 15; dt := 70;
while x < 600 do begin
lamp (x,y);
Delay(dt);
cleardevice;
x := x+dx;
end;
readln;
closegraph;
end
end.
Только учти, что перерисовывается лампа дольше, чем выводится через PutImage... Запусти программу, узнаешь, к чему это я... Только ReadKey из процедуры отрисовки лампы убери...
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 4.03.2007 18:27
Сообщение #10


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


ой... сорри за readkeу
забыла убрать.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 4.03.2007 18:37
Сообщение #11


Профи
****

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

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


Цитата(volvo @ 4.03.2007 18:23) *

Только учти, что перерисовывается лампа дольше, чем выводится через PutImage... Запусти программу, узнаешь, к чему это я... Только ReadKey из процедуры отрисовки лампы убери...

у меня до сих пор ничего не вырисовалось....(минут 5 ждала...)
об этом шла речь?

а если вырисовать процедурой lamp изображение, потом нельзя использовать GetImage/PutImage для его движения?

Сообщение отредактировано: 18192123 - 4.03.2007 18:41
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.03.2007 18:49
Сообщение #12


Гость






Цитата
а если вырисовать процедурой lamp изображение, потом нельзя использовать GetImage/PutImage для его движения?
Можно... Разницы нет, КАК ты будешь первоначально выводить изображение на экран.
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 4.03.2007 18:54
Сообщение #13


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


поставь dt побольше (несколько тысяч) - ты просто не успеваешь заметить smile.gif


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 4.03.2007 19:02
Сообщение #14


Профи
****

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

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


Цитата(мисс_граффити @ 4.03.2007 18:54) *

поставь dt побольше (несколько тысяч) - ты просто не успеваешь заметить smile.gif

ой! и правда!

Всем огромное спасибо за помощь!

Сообщение отредактировано: 18192123 - 4.03.2007 19:05
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 4.03.2007 19:04
Сообщение #15


Помощник капитана
****

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

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


ClearDevice.


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.03.2007 19:06
Сообщение #16


Гость






Артемий2, а ты в программе ClearDevice не заметил?

Или берешь пример с Time? Тогда не удивляйся, если результат получишь такой же! Устное предупреждение за флуд...
 К началу страницы 
+ Ответить 

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

 



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