Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы - часть 7


Совет 1 (общий)

Для создания образа спрайта в оперативной памяти поступим следующим образом. Сначала воспроизведем спрайт в любом месте экрана и запомним содержимое соответствующего участка видеопамяти в массиве соответствующего размера (в QBasice — оператор GET, на Си или Паскале — процедура getimage). Затем повторно выведем спрайт на то же место экрана в режиме X0R для стирания статичного изображения.

Совет 2 (общий)

Для имитации звездного неба построим 1000 случайных точек на экране, окрашенных в случайные цвета.

Совет 3 (общий)

0рганизуем бесконечный цикл, в котором изображение тарелки на небольшое время (порядка 0,6 с) появляется в некоторой точке с координатами (х,у), а затем стирается. После этого точка (х,у) смещается на случайные перемещения (dx.dy) и цикл повторяется до нажатия какой-либо клавиши пользователем. Для того чтобы перемещения из текущей точки в следующую выглядели случайными, можно менять знаки приращений dx и dy, когда они оказываются четными или нечетными. Кроме того, необходимо организовать проверку очередной точки на принадлежность экрану и запретить ее выход из допустимого интервала.

Совет 4 (QBasic)

В связи с тем, что задержка по оператору SLEEP может быть организована только с точностью до секунды, предлагается воспользоваться оператором S0UND f, dt. 0н организует выдачу звукового сигнала с частотой f Гц, длящегося dt тиков (в 1 с содержится 18,2 тика). А чтобы звук не доставлял неприятностей, можно выбрать частоту, не воспринимаемую человеческим ухом (например, f = 32767 Гц).

Программа 8_17.bas

REM Летающая тарелка

DEFINT A-Z

DIM TARELKA(300)

Х=320: Y=240

SCREEN 12

CIRCLE (100,50),20,15,,,.4

PAINT (100,50),4,15

CIRCLE (100, 46); 20,15, 3.3,0, .3

LINE (107,44)-(110,38) ,15

CIRCLE (110,38),2,15

LINE (93,44)-(90,38),15

CIRCLE (90,38),2,15

' Запомнили образ

GET (79,36)-(121,59),TARELKA

' Стерли

PUT (79,36),TARELKA,X0R

' Построение звездного неба

F0R I=0 T0 1000

PSET (INT(RND*639)+1,INT(RND*473)+1),INT(RND*15) +1




Содержание  Назад  Вперед