![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Palux |
![]()
Сообщение
#1
|
Гость ![]() |
Пишу на Паскале лабу с использованием Graph.
Суть задачи: Рисуется рандомная картинка (линиями и кружочками) потом она проподает и появляется луч фанарика, который двигается и ее освещает. Для это я использау 2 страници. Проблема в том, что они накладываются одна на другую (где то пополам) при смене страниц. Подскажите под. че делать .... Лабу надо быстро сдавать ![]() |
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
а какой графический режим используешь? не все режимы имеют видеостраницы...
тогда в них происходят просто разделения экрана при попытке их использования.. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Palux |
![]()
Сообщение
#3
|
Гость ![]() |
блин .... а как узнать какой?
На глаз 640х480х16 ![]() |
Archon |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
detect'ом наверно определился не тот режим который ты хотел. Исходник кинь, поправим.
-------------------- Close the World...txeN eht nepO
|
Altair |
![]()
Сообщение
#5
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата Многостраничный вывод возможен только на EGA (256Кб), (S)VGA и Hercules. А вот так выглядит проверка поддерживает ли выбранные детектом драйвер страницы:
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата(Archon @ 15.06.05 13:54) detect'ом наверно определился не тот режим который ты хотел. Detect-ом может и тот определился, но Detect дает лучший из доступных режимов, поэтому устанавливать придется вручную:Gd:=Ega; |
Palux |
![]()
Сообщение
#7
|
Гость ![]() |
Режим 640x480 VGA
исходник Код Gd := Detect; InitGraph(Gd, Gm, 'f:\bp\bgi'); If GraphResult <> grOk Then Halt(1); mode:=GetModeName(GetGraphMode); SetActivePage (1); SetVisualPage (1); Repeat Begin SetColor (Random(15)); Line (Random(GetMaxX-2)+1,Random(GetMaxY-2)+1, Random(GetMaxX-2)+1,Random(GetMaxY-2)+1); End Until KeyPressed; SetActivePage (0); SetVisualPage (0); |
Palux |
![]()
Сообщение
#8
|
Гость ![]() |
заработало с EGA, EGAHi ,но разрешение какоето неприкольное....
Мне бы с VGA, но с ним не работает |
Altair |
![]()
Сообщение
#9
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
А чего ты хочешь добиться в программе? ты же все равно на 1 страницу выводишь... зачем тебе они тогда вообще?
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Palux |
![]()
Сообщение
#10
|
Гость ![]() |
ну скажите еще ченить, мне эту лабу уже здать надо
|
Palux |
![]()
Сообщение
#11
|
Гость ![]() |
Oleg_Z,
я хочу добиться эффекта освещения в темноте рисунка фанариком (световое пятно). А как по другому сделать то? Если начальный экран загнать в массив каконить (GetImage), то как из него потом доставать кусочки, которые надо засветить? А тут удобно (я тык думаю): Перевлючил актив страницу, взял кусок, опять переключил, обрезал по кругу, положил ..... |
Palux |
![]()
Сообщение
#12
|
Гость ![]() |
может у меня изначально неправельный подход?
Тады как сделать по правельному? |
Archon |
![]()
Сообщение
#13
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Да нормалёк... Делай по своему. А разрешением придётся пожертвовать, я сам от чего-то выше 320x200x256 давно отказался(муторно слишком, а чужие модули использовать не хочу).
Цитата Если начальный экран загнать в массив каконить (GetImage), то как из него потом доставать кусочки, которые надо засветить? Достать-то можно, только весь экран в большом разрешении загнать будет сложно(640*480*4=153600 байт ...да нет если указатель на массив тады можно...мысли в слух... ![]() -------------------- Close the World...txeN eht nepO
|
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Palux, держи исходник для начала... Учти, при больших значениях радиуса будет притормаживать. И попробуй (если это не устроит) переделать, как тебе нужно... ;)
Код uses crt, graph; var buffer: array[1 .. 10000] of byte; curr: integer; procedure get_square(x, y, r: integer); var ix, iy: integer; begin setactivepage(0); curr := 0; for iy := y - r to y + r do for ix := x - r to x + r do begin inc(curr); buffer[curr] := getpixel(ix, iy); end; setactivepage(1); end; procedure put_circle(x, y, r: longint); var ix, iy: integer; begin curr := 0; for iy := y - r to y + r do for ix := x - r to x + r do begin inc(curr); if (sqr(x - ix) + sqr(y - iy) <= sqr(r) then putpixel(ix, iy, buffer[curr]); end; end; procedure darkcircle(x, y, r: integer); begin setfillstyle(solidfill, black); bar(x - r, y - r, x + r, y + r); end; var gd, gm: integer; x, y, i: integer; const r = 20; begin Gd := ega; Gm := egahi; InitGraph(Gd, Gm, ''); If GraphResult <> grOk Then Halt(1); SetActivePage(0); SetVisualPage(0); Repeat SetColor (Random(15)); Line (Random(GetMaxX-2)+1,Random(GetMaxY-2)+1, Random(GetMaxX-2)+1,Random(GetMaxY-2)+1); Until KeyPressed; while keypressed do readkey; SetActivePage(1); SetVisualPage(1); x := getmaxx div 2; y := getmaxy div 2; repeat get_square(x, y, r); put_circle(x, y, r); delay(22000); darkcircle(x, y, r); inc(x, 10); Until KeyPressed; while keypressed do readkey; closegraph; end. |
![]() ![]() |
![]() |
Текстовая версия | 17.07.2025 18:35 |