21.05.2012, 15:23 | #1 (permalink) |
Member
Регистрация: 12.04.2012
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Графическая задача на Паскале
|
21.05.2012, 15:23 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Я думаю, что проблема получила свое решение по этим ссылкам Задача в паскале Задача на Паскале и С++ Задача на Паскале |
21.05.2012, 15:28 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Какой Паскаль - ABC? Free? Turbo? Когда речь о графике, это принципиальнейший момент! Пока подскажу простейший алгоритм. В цикле:
1. Задаем цвет. 2. Рисуем квадрат. 3. Меняем цвет на фоновый. 4. Рисуем тот же квадрат. 5. Переходим к п.1. |
21.05.2012, 19:36 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Даже нарисовал программку - самому интересно стало:
Код:
Uses CRT, Graph; Var A:Word; C:Char; Begin InitGraph(..); {ТУТ САМОСТОЯТЕЛЬНО} Randomize; SetLineStyle(SolidLn,0,ThickWidth); Repeat A:=(Round(GetMaxY*0.1)+Random(Round(GetMaxY*0.9))) div 2; SetColor(1+Random(15)); Rectangle((GetMaxX div 2)-A,(GetMaxY div 2)+A, (GetMaxX div 2)+A,(GetMaxY div 2)-A); Delay(100); SetColor(GetBkColor); Rectangle((GetMaxX div 2)-A,(GetMaxY div 2)+A, (GetMaxX div 2)+A,(GetMaxY div 2)-A); If KeyPressed then C:=ReadKey; Until C=#27; CloseGraph; End. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
22.05.2012, 13:26 | #8 (permalink) |
Member
Регистрация: 12.04.2012
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
честно эти команды впервые вижу, мне бы уровень 10 класса) ну там циклы, условия и т.п)
иии..что такое "GetMахХ"? И для чего вводится переменная "А"? |
22.05.2012, 14:29 | #9 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
GetMaxX - это функция, возвращающая максимальное значение (в пикселах) горизонтальной координаты графического экрана. Поскольку я работаю в DOS VGA моде, то у меня это 640. Соответственно GetMaxY - то же для вертикальной координаты (у меня - 480). При этом не забываем, что отсчет вертикалей ведется сверху вниз, т.е. точка с координатами 0,0 - это левый верхний угол экрана.
A - это половина стороны квадрата. В программе сделано так: если H - полная высота экрана, то полная длина стороны квадрата выбирается случайным образом из диапазона (0.1*Н)..(0.9*Н). |
22.05.2012, 14:54 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
А впрочем, ладно - попробую объяснить смысл каждой из команд.
Код:
Uses CRT, Graph; {Подключаем дополнительные модули} Var {Объявляем переменные} A:Word; C:Char; Begin InitGraph(..); {ТУТ САМОСТОЯТЕЛЬНО} {Конфигурируем процедуру запуска графического режима и запускаем его} Randomize; {Включаем генератор случайных чисел} SetLineStyle(SolidLn,0,ThickWidth); {Устанавливаем стиль рисования линий - сплошная, жирная} Repeat {Открываем цикл рисования квадратов} A:=(Round(GetMaxY*0.1)+Random(Round(GetMaxY*0.9))) div 2; {Случайным образом выбираем значение половины стороны квадрата от 0.05*Н до 0.45*Н, где Н - полная высота экрана в пикселах} SetColor(1+Random(15)); {Случайным образом выбираем цвет квадрата; нумерация цветов на картинке внизу} Rectangle((GetMaxX div 2)-A,(GetMaxY div 2)+A, (GetMaxX div 2)+A,(GetMaxY div 2)-A); {Рисуем квадрат, указывая координаты левого нижнего и правого верхнего углов} Delay(100); {Даем задержку в 0.1 секунды, иначе никаких квадратов разглядеть будет просто невозможно} SetColor(GetBkColor); {Устанавливаем цвет, равный цвету фона} Rectangle((GetMaxX div 2)-A,(GetMaxY div 2)+A, (GetMaxX div 2)+A,(GetMaxY div 2)-A); {Снова рисуем тот же квадрат, но уже фоновым цветом, в результате чего нарисованный квадрат исчезает} If KeyPressed then C:=ReadKey; {Проверяем, не нажата ли какая-нибудь клавиша, а если нажата, то ее мнемокод передаем переменной С} Until C=#27; {Если нажатая клавиша - это клавиша Esc, то завершаем цикл} CloseGraph; {Отменяем графический режим. Команда необязательная, но желательная} End. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|