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.


 

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

51222. Моделювання BPMN структури підприємства 1.41 MB
  Виділяють чотири основні категорії елементів: Обєкти потоку управління: події дії і логічні оператори Зєднуючі обєкти: потік управління потік повідомлень та асоціації Ролі: пули і доріжки Артефакти: дані групи і текстові анотації. Опис технологічних процесів і функційОбєкти що описують процеси і функції поділяються на три основних типи: Події events Дії ctivities Логічні оператори gtewys. ПодіїПодії зображуються колом. Згідно розташуванню в процесі події можуть бути класифіковані на початкові strt проміжні...
51223. МОДЕЛИРОВАНИЕ БИЗНЕС-ПРОЦЕССА ПРЕДПРИЯТИЯ В НОТАЦИИ BPMN 767 KB
  Графическое представение Наименование None Ничто Conditionl event Условные события Messege event Сообщение события Multiple event Несколько событий Prllel multiple event Параллельные множественные события Signl event Знаковые события Timer event Событие таймера None Никто Compenstion event Компенсация события Conditionl event Условные события Escltion event Расширение наращивание постепенное усиление события Link event Ссылка событий Messege event Сообщение события Multiple event Несколько...
51227. Дослідження процесів теплообміну та порівняння потоків теплоти через різні поверхні термодинамічної системи 470 KB
  Основною метою роботи є визначення коефіцієнта співвідношення теплових потоків що виходять з заданої термодинамічної системи через дві поверхні – відкриту поверхню води та стінки сосуду тобто оцінка ефективності теплоізолюючих параметрів стінок сосуду. Порядок виконання роботи Залити в сосуди визначену кількість гарячої води з температурою t1. Визначити початкові дані температуру води і зовнішнього середовища tзс і занести в таблицю 3. де c – питома теплоємкість рідини теплоємність води с = 4187 Дж кг˚С; m – маса води у сосуді...
51228. ИССЛЕДОВАНИЕ ОСНОВНЫХ МЕТРОЛОГИЧЕСКИХ ХАРАКТЕРИСТИК ЭЛЕКТРОМЕХАНИЧЕСКИХ ИЗМЕРИТЕЛЬНЫХ ПРИБОРОВ 644.81 KB
  Определить основную погрешность и вариацию показаний поверяемого миллиамперметра или вольтметра на постоянном токе. Погрешность и вариация определяются для 6 – 8 точек шкалы с обязательным включением в число поверяемых точек всех числовых отметок. Определить основную погрешность поверяемого прибора длячего: а указатель поверяемого прибора последовательно установить наповеряемые отметки шкалы сначала при плавном увеличении измеряемой величины а затем на те же отметки при плавном уменьшенииизмеряемой величины; б для всех поверяемых отметок...
51229. ИЗМЕРЕНИЕ ПАРАМЕТРОВ СИГНАЛОВ В ЭЛЕКТРОННЫХ СХЕМАХ 305.66 KB
  Поскольку в практике встречаются сигналы различной формы то важно учитывать тип детектора и в каких значениях напряжения проградуирована шкала вольтметра. Прежде чем приступить к измерению напряжения необходимо на основании предварительного анализа сигнала форма частота возможный порядок напряжения и участка цепи к которому будет подключаться вольтметра характер цепи эквивалентное сопротивление цепи а также с учетом требований к точности результата измерений выбрать тип вольтметра. При этом следует использовать сведения о MX...