Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 21.05.2012, 15:23   #1 (permalink)
Altana
Member
 
Аватар для Altana
 
Регистрация: 12.04.2012
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation Графическая задача на Паскале

Через процедуру сделать мигающий квадрат.. Т.е в центре экрана появляется квадрат, затем исчезает, затем появляется другой, но уже другого цвета и другого размера, затем исчезает, затем другой и т.д. Это продолжается, пока пользователь не нажмет Esc.
Altana вне форума   Ответить с цитированием

Старый 21.05.2012, 15:23
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Я думаю, что проблема получила свое решение по этим ссылкам

Задача в паскале
Задача на Паскале и С++
Задача на Паскале

Старый 21.05.2012, 15:28   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Какой Паскаль - ABC? Free? Turbo? Когда речь о графике, это принципиальнейший момент! Пока подскажу простейший алгоритм. В цикле:
1. Задаем цвет.
2. Рисуем квадрат.
3. Меняем цвет на фоновый.
4. Рисуем тот же квадрат.
5. Переходим к п.1.
Vladimir_S вне форума   Ответить с цитированием
Старый 21.05.2012, 17:10   #3 (permalink)
Altana
Member
 
Аватар для Altana
 
Регистрация: 12.04.2012
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Turbo Pascal.
п.3 - нельзя ли просто сделать отчистку экрана с помощью ClrScr?
Altana вне форума   Ответить с цитированием
Старый 21.05.2012, 17:23   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Altana Посмотреть сообщение
п.3 - нельзя ли просто сделать отчистку экрана с помощью ClrScr?
Можно и так. Просто дольше.
Фу, прошу прощения - поторопился. Не ClrScr (это текстовая CRT-шная команда), а ее графическим аналогом ClearDevice.
Vladimir_S вне форума   Ответить с цитированием
Старый 21.05.2012, 19:36   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 22.05.2012, 13:13   #6 (permalink)
Altana
Member
 
Аватар для Altana
 
Регистрация: 12.04.2012
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

чорд.. мне тут вообще ничего не понятно, неизвестные команды(
Altana вне форума   Ответить с цитированием
Старый 22.05.2012, 13:18   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Altana Посмотреть сообщение
чорд.. мне тут вообще ничего не понятно, неизвестные команды(
Конкретнее? А вообще-то это самые обычные команды Borland-графики (модуль Graph). Установить толщину линии, выбрать цвет, нарисовать квадрат... да и всё вроде.
Vladimir_S вне форума   Ответить с цитированием
Старый 22.05.2012, 13:26   #8 (permalink)
Altana
Member
 
Аватар для Altana
 
Регистрация: 12.04.2012
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

честно эти команды впервые вижу, мне бы уровень 10 класса) ну там циклы, условия и т.п)
иии..что такое "GetMахХ"? И для чего вводится переменная "А"?
Altana вне форума   Ответить с цитированием
Старый 22.05.2012, 14:29   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Altana Посмотреть сообщение
что такое "GetMахХ"? И для чего вводится переменная "А"?
GetMaxX - это функция, возвращающая максимальное значение (в пикселах) горизонтальной координаты графического экрана. Поскольку я работаю в DOS VGA моде, то у меня это 640. Соответственно GetMaxY - то же для вертикальной координаты (у меня - 480). При этом не забываем, что отсчет вертикалей ведется сверху вниз, т.е. точка с координатами 0,0 - это левый верхний угол экрана.
A - это половина стороны квадрата. В программе сделано так: если H - полная высота экрана, то полная длина стороны квадрата выбирается случайным образом из диапазона (0.1*Н)..(0.9*Н).
Vladimir_S вне форума   Ответить с цитированием
Старый 22.05.2012, 14:54   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 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.
Миниатюры
bgidemo.jpg  
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 08:22.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.