1209

Создание движущегося изображения

Курсовая

Информатика, кибернетика и программирование

Фрагменты программы для MS-DOS. Реализация программы в среде Windows. Анализ задания и выбор алгоритма решения. Реализация программы в среде MS-DOS. Фрагменты исходных текстов программ.

Русский

2013-01-06

52.5 KB

9 чел.

Министерство общего и профессионального образования

Российской Федерации

Южно-Уральский государственный университет

Кафедра ЭВМ

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе по курсу

"Компьютерная графика"

на тему:

"Создание движущегося изображения"

                                                   Руководитель:

                                              

                                                    Ярош Е.С.

                                                

                                                     "___" _________ 2011г.

                                              Автор работы:

                                                

студент группы ПС-457

                                                

                                                   Мерзляков Д. В.

                                                

                                                       "___" _________ 2011г.

Челябинск

2000

     

СОДЕРЖАНИЕ

1.   Задание ....................................................…………………..

2.   Анализ задания и выбор алгоритма решения ....................

3.   Реализация программы в среде MS-DOS ........................…

4.   Реализация программы в среде Windows .......................…

5.   Фрагменты исходных текстов программ ........................…

5.1. Фрагменты программы для MS-DOS .............................…

5.2. Фрагмент программы для Windows .............................…..

6. Литература……...................................................……………..

    

1. ЗАДАНИЕ

Разработать  программу,  реализующую цветное движущееся изображение "Мальчик пьет сок".  Программа  должна  быть  сделана  в  двух вариантах: в среде MS-DOS и в среде Windows.

2. АНАЛИЗ ЗАДАНИЯ И ВЫБОР АЛГОРИТМА РЕШЕНИЯ

Изначально рисуется изображение мальчика, стакана и трубочки из эллипсов,

отрезков  и прямоугольников. Затем вся задача сводится к реализации изменения уровня сока в стакане, а также движения сока по трубочке.  

    В  реализации  для  MS-DOS  формирование нового кадра изображения

не имеет смысла, то есть нет смысла  использовать видеостраницы. Дело в том, что изображение фактически меняет свой вид  довольно просто, можно сказать «линейно».

    В среде Windows я решил использовать невидимые страницы роль которых,

здесь играет контекст памяти. После того, как изображение будет сформировано в контексте памяти, оно копируется  в  контекст  рабочей  области  окна.  Это позволяет избежать "мельканий" на экране.

    3. РЕАЛИЗАЦИЯ ПРОГРАММЫ В СРЕДЕ MS-DOS

В функции “boy()” мы создаем само изображение. В начале программы пользователь вводит скорость, в программе это реализуется за счет использования функции  

языка  C  -  delay(pause),  где  pause  - величина задержки в миллисекундах.

Объем  сока в стакане меняется за счет прорисовки на поверхности сока линии, цвета фона и так до дна, а длина линий уменьшается с обоих сторон в соответствии с углом наклона стенок стакана. В данном случае   длина линии уменьшается на пиксель через две линии.

Управление осуществляется следующим образом.

Скорость задается в начале программы в пределах от10 до100 .

Дальше идет бесконечный цикл (мальчик выпивает сок, сок заново наполняется, мальчик опять его выпивает и т.д.)

По нажатию на любую клавишу - выход из программы.

Запуск программы из командной строки: boy1.exe.

    Минимальные   системные  требования:  IBM-совместимый  компьютер,

процессор 8086, видеокарта EGA.

Программа защищена от беспорядочного ввода символов.

 4. РЕАЛИЗАЦИЯ ПРОГРАММЫ В СРЕДЕ WINDOWS

    В   программе   под  Windows,  в  сущности,  используются  те  же

математические функции для рисования изображения.  Отличия в реализации, в основном, связаны с особенностью Windows-приложений  (в частности то, что управляются они событиями). В отличие  от  MS-DOS  в  среде Windows я решил попробовать реализовать программу при помощи  "невидимой страницы" роль которой, здесь  играет контекст  памяти.  После  того,  как  изображение будет сформировано в контексте  памяти, оно копируется в контекст рабочей области окна. Это позволяет избежать "мельканий" на экране.

      При сворачивании или перекрывании окна происходит  перерисовка  изображения   по приходу по сообщению   WM_PAINT.  Изменение  скорости  движения  лыжника  осуществляется при помощи таймера,  посылающего  событие  WM_TIMER через определенные промежутки времени.  Этими промежутками времени и управляет пользователь, изменяя скорость  движения  -  по  сути  мы уничтожаем старый таймер и создаем новый с другим временным параметром. Пауза реализуется путем установки флага “pause”, с дальнейшей проверкой его при обработки сообщения WM_TIMER, то есть таймер не убивается при паузе.

Управление осуществляется следующим образом.

Клавиши  "влево/вправо"  -  соответственно  уменьшение/увеличение

скорости движения человечка.

    F1 и правая кнопка мыши - выдача информации об управлении.

    Левая  кнопка  мыши  -  пауза, прерываемая обратным нажатием левой кнопки.

    Выход - стандартно для Windows-приложений: Alt+F4.

    Запуск программы из командной строки: boywin.exe.

    Минимальные   системные  требования:  IBM-совместимый  компьютер,

на котором установлена операционная система Windows 95 и выше.

    5. ФРАГМЕНТЫ ИСХОДНЫХ ТЕКСТОВ ПРОГРАММ

    5.1. Фрагмент программы для MS-DOS

void boy()

  {int stc1=195,stc2=235;

  //Функция, собственно рисующая мальчика

  cleardevice();

  setbkcolor(9); //Установка атрибутов

  setfillstyle(1,13);

  fillellipse(100,70,30,15);

  circle(110,65,4);

  line(120,75,125,80);

  line(120,75,130,77);

  fillellipse(80,68,5,6);

  setfillstyle(1,3);

  fillellipse(100,120,40,30);

  bar(90,150,190,170);

  bar(170,150,190,199);

  bar(170,195,200,199);

  setfillstyle(1,4);

  for (int i=1; i<10;i++)

  line(100,90+i,200,120);

  line(195,110,210,140);

  line(235,110,220,140);

  line(195,110,235,110);

  line(120,75,200,107);

  line(200,107,215,140);

  bar(70,170,120,173);

  bar(90,173,95,197);

  bar(75,197,115,199);

  bar(200,140,290,143);

  bar(243,143,247,197);

  bar(210,197,280,199);

  outtextxy(20,20,"Для выхода нажмите любую клавишу");

}

 int main(void) //Основная часть программы

{

char *k;

int sp=20;

int i,stc1=195, stc2=235;

  

  int gdriver = 3, gmode=0, errorcode;

   //EGA, 640x200

  do

{

 printf("\nвведите скорость (10-100) > ");

 gets(k);  //Ввод с клавиатуры

 sp=atoi(k); //Преобразует строку в десятичное целое число

 if ((sp>100)|(sp<10)) sp=0;printf("Ошибка ввода !");

}

 while ((sp>100)|(sp<10));

  initgraph(&gdriver, &gmode, ""); //Инициализация графического режима

  /* read result of initialization */

  errorcode = graphresult();

  if (errorcode != grOk)

  //Проверка успеха инициализации

  {

     printf("Graphics error: %s\n", grapherrormsg(errorcode));

     printf("Press any key to halt:");

     getch();

     exit(1);

  

  }

  //////////////////

  boy();

  do

  {

 setcolor(4);

 for (i=1;i<30;i++)//Наливаем сок

  {

  if (i%2==1)

  {stc1= 210-(i%2*(i/2));

  stc2= 220+(i%2*(i/2));}

  delay(1);

  line(stc1,140-i,stc2,140-i);

  }

  //Заполняем трубочку

  setcolor(4);

  for  (i=107;i>75;i=i-2)

  {delay(40);

  setcolor(4);

  line(2.5*i-67.5,i,200,107);

  setcolor(9);

  line(195,111,235,111);

  }

  //¦Пьем сок

  for (i=1;i<30;i++)

  {

  if (i%2==1)

  {stc1= 195+(i%2*(i/2));

  stc2= 235-(i%2*(i/2));}

  delay(2*(110-sp));

  setcolor(4);

  line(200,107,215,140);

  setcolor(15);

  line(195,110,stc1,110+i);

  line(235,110,stc2,110+i);

  setcolor(9);

  line(stc1,110+i,stc2,110+i);

  }

  setcolor(15);

  line(120,75,200,107);

  line(200,107,214,138);

 }

  while(!kbhit());//Делать пока не нажата любая клавиша

  //////////////////

  //printf("Press any key to halt:");

  closegraph();

  return 0;

}

    5.2. Фрагмент программы для Windows

case WM_LBUTTONDOWN:

 pause=!pause ; // Установка паузы

 break;

 case WM_PAINT:

 hdc=BeginPaint(hwnd,&paintstruct);

 BitBlt(hdc,0,0,maxX,maxY,memdc,0,0,SRCCOPY); //Прорисовка изображения

 EndPaint(hwnd,&paintstruct);

 return 0;

 case WM_KEYDOWN:

     {

        int OEMcode = (int)(((unsigned long)lParam) >> 16) & 0x7F;

        switch (OEMcode)

        {

           case 0x4D:    // '->'

           {

             if(SpD<=1000)

             {SpD+=5; /

             KillTimer(hwnd,1);//Убиваем таймер

         SetTimer(hwnd,1,SpD,NULL);}//Устанавливаем новый таймер

             break;

           }

           case 0x4B:    // '<-'

           {

              if(SpD>=5)

               {SpD-=5;

                KillTimer(hwnd,1);//Убиваем таймер

            SetTimer(hwnd,1,SpD,NULL);}//Устанавливаем новый таймер

              break;

           }

           // F1 - HELP

           case 0x3B:

           {

              MessageBox(hwnd,

              "<--/-->: уменьшение/увеличение скорости\n"

       "F1 - Помощь \n"

      "Левая кнопка мыши - пауза, \n",

              "Помощь", MB_OK | MB_ICONINFORMATION);

              break;

           }

         }

      return 0;

    }

 case WM_TIMER: //Обработка сообщения от таймера

    if (!pause)//Проверка паузы

   {

     if(k==30)k=0;

     boy1(k) ;

     k++;

     hdc=GetDC(hwnd);//Получить контекст устройства

     BitBlt(hdc,0,0,maxX,maxY,memdc,0,0,SRCCOPY);

     ReleaseDC(hwnd,hdc);//Освободить контекст устройства

     SendMessage(hwnd,WM_PAINT,0,0);

   }

 return 0;

    

6. ЛИТЕРАТУРА

1. Подбельский В.В. Язык С++. - СПб.: Питер, 1999.

2.  Фролов А.В., Фролов Г.В. Операционная система MS Windows 3.1.

- М.: Диалог-МИФИ, 1994.

3. Фролов А.В.,  Фролов Г.В.  Графический интерфейс GDI в MS Win-

dows. - М.: Диалог-МИФИ, 1994.


 

А также другие работы, которые могут Вас заинтересовать

20756. Определение технологических свойств порошков 1.26 MB
  Универсальная испытательная машина прессформа весы лабораторные волюмометр прибор для определения текучести порошка штангенциркуль секундомер порошки железа меди и нитрида алюминия. Форма частиц порошка: а губчатая б сферическая в осколочная всех частиц порошка взятых в единице объема или массы пик нометрическая плотность фактическая или истинная плотность частиц порошка и микротвердость. Насыпной плотностью ГОСТ 19440 74 порошка унас называется масса единицы объема порошка при свободной насыпке. Насыпная плотность...
20757. Изучение диаграммы состояния сплавов системы железо-углерод 106.72 KB
  Содержание углерода в цементите составляет 667. Графит одна из двух алмаз графит кристаллических модификаций углерода. Ординаты между ними двойным сплавам общее содержание железа и углерода в которых равно 100. В системе FeFe3C возможны жидкая Ж фаза представляющая собой жидкий раствор железа и углерода и четыре твердые: δ феррит γ аустенит α феррит и Fe3C.
20758. Разработка отдельных рекомендаций по технологии изготовления поковки методами горячей объемной штамповки 511.55 KB
  Обработка металлов давлением Практическая работа № 3 Разработка отдельных рекомендаций по технологии изготовления поковки методами горячей объемной штамповки Цель работы: ознакомиться с технологическим процессом горячей объемной штамповки при изготовлении поковки на кривошипном горячештампо вочном прессе и с методикой расчетов заготовки и штампа. Эскиз поковки нанесенный на эскиз детали с указанием плоскости разъема; расчеты припусков допусков штамповочных уклонов и радиусов закругления. Расчеты и эскиз горячей поковки с облоем и...
20759. Определение режима резания лезвийным инструментом 720.87 KB
  Обработка металлов резанием Практическая работа №4 Определение режима резания лезвийным инструментом Цель работы: ознакомиться с методикой определения режима резания для лезвийной обработки точение строгание сверление зенкерование развертывание фрезерование и т. Порядок проведения Необходимым условием для назначения режимов резания является наличие разработанного технологического процесса по операциям и переходам а также паспортных данных станков. Рекомендуется соблюдать определенную последовательность назначения режимов резания....
20760. Определение твердости металлов По Бринеллю и Роквеллу 237.6 KB
  Лабораторная работа № 1 Тема: Определение твердости металлов По Бринеллю и Роквеллу Выполнил: Учащийся гр. Цель работы: ознакомиться с методами и способами испытаний твердости металлов. Методы измерения твердости: статического и ударного вдавливания царапин отскока и другие. Таблица 1 Сравнительные значения твердости...
20761. Определение механических свойств металлов при испытании на растяжение 184.58 KB
  Диаграмма растяжения низкоуглеродистой стали и схемы определения характеристик прочности Для нагрузки Рпц удлинение образца пропорционально усилию растяжения и при его снятии образец восстанавливает свои первоначальные форму и размеры; Рт усилие предела текучести физического соответствует нагрузке когда деформация образца происходит без ее увеличения;т предел текучести физический. Эти показатели определяют когда пластическая деформация образца достигает 02 от его рабочей длины l0. Усилие Pk меньше P max что...
20762. Микроскопический анализ металлов и сплавов 138.25 KB
  Если в задачу изучения микроструктуры входит определение размера зерна то рекомендуется использовать метод визуального сравнения зерен изучаемой микроструктуры при увеличении х100 со стандартной шкалой размеров зерна по ГОСТ 653982 рис. Устанавливается номер балл зерна затем по номеру используя табл.10 определяется поперечный размер зерна мм его площадь мм2 и количество зерен на площади шлифа в 1 мм2.10 Характеристика оценки зерна в зависимости от его номера Продолжение таблицы 1.
20763. Испытание свойств формовочных смесей 146.22 KB
  Литейное производство Лабораторная работа №12 Испытание свойств формовочных смесей Цель работы: изучение методов определения газопроницаемости и прочности формовочных смесей и влияния состава смеси на ее свойства. Лабораторные бегуны; лабораторный копер; технические весы с разновесами; сушильный шкаф с термометром для измерения температуры до 300 С; приборы для определения пределов прочности смеси при растяжении и сжатии; металлическая гильза с поддоном; выталкиватель; стержневой ящик; мензурка; коробка для смесей; сухой песок; формовочная...
20764. Изучение процесса сварки плавлением. Выбор режима ручной дуговой сварки конструкций из стали 267.5 KB
  Сварка металлов Лабораторная работа №14 Изучение процесса сварки плавлением. Выбор режима ручной дуговой сварки конструкций из стали Цель работы: ознакомиться с процессом зажигания и строением электрической сварочной дуги обозначением покрытых электродов устройством и работой сварочного трансформатора и выпрямителя выбором режима и технологии дуговой сварки покрытыми электродами. Классификация и обозначение покрытых электродов для ручной дуговой сварки Покрытые электроды для ручной дуговой сварки классифицируют по назначению виду и толщине...