Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Некоторые функции работы с изображением на экране



Для рассматриваемых ниже функций графическая информация на экране представляет прямоугольную область с координатами:

x1, y1    
  x2, y2

1) unsigned imagesize (int x1,int y1,int x2,int y2); - возвращает значение объема буфера для сохранения графической информации в окне экрана заданного размера;

2) void getimage (int x1,int y1,int x2,int y2,void *buf); - получение и сохранение области экрана в буфере (указатель buf) памяти;

3) void putimage (int x,int y,buf,int Код); - вывод изображения из buf на экран начиная с заданной позиции; код определяет способ наложения выводимого изображения:

COPY_PUT (0) – простое перемещение;

XOR_PUT (1) – наложение с операцией “Исключающее ИЛИ”;

OR_PUT (2) – с выполнением операции “ИЛИ”;

AND_PUT (3) – с выполнением операции “И”;

NOT_PUT (4) – перемещение изображения с инверсией (отрицанием).

Рассмотрим некоторые дополнительные функции.

1) void sound (unsigned z); - вызывает звуковой сигнал с частотой (герц);

2) void nosound (void); - прекращает подачу звукового сигнала;

3) void delay (int x); - задерживает выполнение программы на х миллисекунд; прототипы этих функций описаны в библиотеке dos.h.

4) int bioskey (0); - ждет нажатия клавиши (int Код=0) и возвращает ее код; прототип описан в библиотеке bios.h.

Пример программы

В центре экрана нарисовать картинку, например такую, клавишами «стрелки» управлять движением фигуры только до границ экрана. Текст программы может иметь следующий вид:

#include <stdio.h>

#include <graphics.h>

#include <conio.h>

#include <process.h>

#include <dos.h>

#include <bios.h>

#include <alloc.h>

void Move(int,int,int);

void main(void)

{

int g_driver=9,g_mode=2,g_error;

int x,y,key;

initgraph(&g_driver,&g_mode,"c:\\bc31\\bgi");

g_error=graphresult();

if(g_error!=grOk)

{ puts("error");

printf("\n error=%d,reason=%s\n",g_error,grapherrormsg(g_error));

getch();

exit(1);

}

setbkcolor(1); setcolor(12); settextstyle(3,0,4);

x=getmaxx()/2;

y=getmaxy()/2;

int r=50;

circle(x,y,r); circle(x,y,r-5);

outtextxy(x-28,y-17,"YES!");

Move(x,y,r+5);

closegraph();

}

void Move(int x,int y,int d)

{

int Fon,Color_Fon, x1,y1,Key;

void *bufC;

unsigned sizeC;

sizeC=imagesize(x-d,y-d,x+d,y+d);

bufC=malloc(sizeC);

getimage(x-d,y-d,x+d,y+d,bufC);

Color_Fon=getbkcolor();

while(1)

{

Key=bioskey(0);

setfillstyle(0,Color_Fon);

bar(x-d,y-d,x+d,y+d);

switch(Key)

{

case 283: free(bufC);

return; // Нажата клавиша <Esc>

case 19712: x+=20;

if(x+d>getmaxx()) x=d; break; // - >

case 19200: x-=20;

if(x-d<0)x=getmaxx()-d;break; // <-

case 20480: y+=10;

if(y+d>getmaxy())y=d; break; // Down

case 18432: y-=10;

if(y-d<0)y=getmaxy()-d;break; // Up

default: sound(1000); delay(500);

nosound(); break;

}

putimage((x-d),(y-d),bufC,COPY_PUT);

}

return;

}

Варианты индивидуальных заданий

1. Составить программу вывода на экран дисплея схематичного изображения велосипедиста. При запуске программы велосипедист начинает движение, вращая ногами педали велосипеда.

2. Составить программу вывода на экран дисплея схематичного изображения человека. При запуске программы человек начинает идти, размахивая в такт движения руками.

3. Составить программу вывода в верхней части экрана дисплея изображения облака. При запуске программы облако начинает двигаться и из него начинает идти дождь. При этом размер облака постепенно уменьшается.

4. Составить программу вывода в верхнюю часть экрана дисплея изображения тучи, а в нижнюю часть экрана дисплея - емкость для воды. При запуске программы начинает идти дождь. При этом размер тучи уменьшается, a емкость наполняется водой.

5. То же, что и в задании 4, но из тучи идет снег и внизу растут сугробы.

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

7. Составить программу вывода на экран дисплея изображения пушки. В правой части экрана появляется и исчезает (случайным образом) мишень. Нажатием клавиши ВВОД производится выстрел из пушки. Момент попадания фиксируется в виде взрыва.

8. Составить программу вывода в верхней части экрана дисплея движущегося слева направо парусника с постоянной скоростью. Ее значение всякий раз задается генератором случайных чисел. В нижней части экрана дисплея расположена пушка. При нажатии клавиши ВВОД происходит выстрел торпедой с постоянной скоростью. При попадании торпеды в пушку смоделировать взрыв парусника и его исчезновение. При промахе парусник достигает правой границы экрана дисплея и начинает движение сначала с новой постоянной скоростью.

9. Составить программу вывода на экран дисплея схематичного изображения лыжника. При нажатии клавиши ВВОД он начинает движение классическим стилем.

10. Составить программу вывода на экран дисплея схематичного человека в положении готовности осуществить прыжок в длину. При нажатии клавиши ВВОД спортсмен начинает разбег и выполняет прыжок в длину.

11. Составить программу вывода изображения циферблата механических часов с секундной, минутной и часовой стрелками. Запуск часов осуществляется нажатием клавиши ВВОД, при этом перемещение секундной стрелки сопровождается характерным для часов звуком.

12. То же, что в задании 11, но предусмотреть режим будильника.

13. То же, что в задании 11, но в 6 и 12 часов на экране появляется изображение кукушки, затем подается соответствующее число сигналов.

14. То же, что в задании 11, но предусмотреть коррекцию времени путем ускоренного перемещения стрелок при нажатии клавиши курсор вправо и курсор влево.

15. Составить программу вывода на экран дисплея настольных электронных часов и изображения метронома. При нажатии клавиши ВВОД стрелка метронома начинает колебательное движение, синхронно с которым начинает изменяться показание электронных часов.

16. Составить программу вывода на экран дисплея песочных часов. При нажатии клавиши ВВОД моделируется процесс падения песчинок, уменьшение уровня песка в верхней части колбы и увеличение в нижней части колбы.

17. Составить программу вывода на экран дисплея треугольника. При нажатии клавиши курсор вправо треугольник вращается по часовой стрелке, клавиши курсор влево - против часовой стрелки.

18. Составить программу вывода на экран дисплея схематичного изображения бабочки. При нажатии клавиши ВВОД бабочка начинает полет, взмахивая крыльями.

19. Составить программу вывода на экран дисплея трех вложенных друг в друга окружностей, представляющих собой беговые дорожки. На линию старта выходят три спортсмена (произвольные фигуры). При нажатии клавиши ВВОД участники стартуют с одинаковой угловой скоростью. После старта угловые скорости участников забега изменяются по случайному закону. На финише указать место, занятое каждым участником забега.

20. То же, что в задании 19, но беговые дорожки представляют собой три одинаковых рядом расположенных окружностей.

Контрольные вопросы

1. Каким образом производится инициализация графического режима?

2. Назовите основные функции установки параметров изображения.

3. Как задать автоматический режим графики?

4. Какими функциями можно создать эффект движения изображения по экрану дисплея?


ЛИТЕРАТУРА

1. Березин Б.И., Березин С.Б. Начальный курс С и С++. – М.: Диалог-МРТИ,1999. - 288 с.

2. Керниган Б., Ритчи Д. Язык программирования Си. - М.: Финансы и статистика,1992. - 271 с.

3. Касаткин А.И., Вольвачев А.Н. Профессиональное программирование на языке Си: Oт Turbo–C к Borland C++: Справочное пособие – Мн.: Выш.шк.,1992. - 240 с.

4. Страуструп Б. Язык программирования С++. 2-е изд.: В 2 т. Киев: ДиаСофт,1993.

5. Фьюэр А. Задачи по языку СИ. - М.: Финансы и статистика, 1985.

6. Хэнкок Л., Кригер М. Введение в программирование на языке СИ. - М.: Радио и связь,1986.

7. Берри В., Микинз Б. Язык СИ: введение для программистов. - М.: Финансы и статистика,1988.

8. Уэйт М., Прама С., Мартин Д. Язык СИ. Руководство для начинающих. - М.: Мир, 1988.

9. Больски М.Н. Язык программирования СИ. Справочник. - М.: Радио и связь, 1988.

10. Юлин В.А., Булатова И.Р. Приглашение к СИ. - Мн.: Высш.шк., 1990.

11. Уингер Р. Язык Турбо СИ. - М.: Мир, 1991.

12. Романовская Л.М., Русс Т.В., Свитковский С.Г. Программирование в среде СИ для ПЭВМ ЕС. - М.: Финансы и статистика, 1992.

13. Демидович Е.М. Основы алгоритмизации и программирования. Язык СИ. - Мн.: Бест­принт, 2001. – 440 c.

14. Аксенкин М.А., Целобенок О.Н. Язык С. - Мн.: Унiверсiтэцкае, 1995. – 302 c.

15. Котлинская Г.П., Галиновский О.И. Программирование на языке СИ. - Мн.: Выш.шк., 1991. – 155 c.

16. Подбельский В.В. Язык С++. - M.: ФиС, 2001. - 559 c.

17. Климова Л.И. С++. Практическое программирование. - М.: Кудиц-Образ, 2001. – 587 c.

18. Шилд Г. Программирование на Borland С++. - Мн.: ПОПУРРИ, 1999. – 800 c.

19. Тимофеев В.В. Программирование в среде С++ Builder 5. - М.: БИНОМ, 2000.





Дата публикования: 2015-09-17; Прочитано: 994 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...