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.


 

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

70973. БЕЗРАБОТИЦА И МЕХАНИЗМЫ ЕЕ ПРЕОДОЛЕНИЯ В УСЛОВИЯХ КРИЗИСА И ПОСТКРИЗИСНОГО РАЗВИТИЯ ЭКОНОМИКИ РОССИИ 117 KB
  Мировой финансовый кризис отложил значительный отпечаток на экономику России. Помимо значительного спада производства существенно возросла численность безработных, сократилось число вакансий и усилилась напряженность на рынке труда.
70974. ИМИТАЦИОННЫЕ МОДЕЛИ ПРОГНОЗИРОВАНИЯ ВРЕМЕННЫХ РЯДОВ 330.5 KB
  При этом увеличение сложности модели вовсе не означает пропорциональное повышение надежности прогноза. В данной статье в качестве альтернативы предлагаются динамические адаптивные модели для внутрифирменного планирования реализованные в системе...
70976. Оценка воздействия на окружающую среду от строительства и дальнейшей эксплуатации офисного центра («Офис-11райд») и прилегающей автостоянки 568.59 KB
  Площадка строительства расположена в Красногвардейском районе по адресу улица Лазо I, вдоль Индустриального проспекта. Разработка проекта производилась на основании технического задания договора №26/08 от 25.08.2008г, заключенного между ЗАО «Группа 1» и ОАО «Офис-Прайд»...
70977. Разработка программы определения запасов сырья 504.68 KB
  На нескольких предприятиях используется сырье одного вида. Для каждого предприятия заданы верхние и нижние границы норм хранения этого сырья. Определить номера предприятий, имеющих запасы сырья выше нормы, ниже нормы и общие запасы сырья на этих предприятиях.
70978. Рассчет основных технических параметров модуля счетчика 211.41 KB
  Все разнообразные средства цифровой техники: ЭВМ, микропроцессорные системы измерений и автоматизации технологических процессоров, цифровая связь и телевидение и т.д. состоятся на единой элементной базе, в состав которой входят чрезвычайно разные по сложности...
70979. Блинная «Теремок» на 75 посадочных мест 181.5 KB
  Закусочная находится не далеко от центра. На берегу городского пруда, рядом с центральной улицей города. Недалеко от блинной находится гостиница, вблизи находится лесопарк. Блинная «Теремок» рассчитана на 75 посадочных мест. Филиалов не имеет.