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.


 

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

63871. Социальная солидарность в эпоху перемен 43 KB
  Социальная солидарность sociаl solidаrity интеграция и ее степень или тип проявляемые обществом либо группой. Французский философ и социолог Эмиль Дюркгейм выделил что социальная солидарность это то что скрепляет и сплачивает индивидов в единое целое.
63872. Проблема толерантности в общеобразовательных учреждениях начального общего образования 59.5 KB
  Проблема толерантности в общеобразовательных учреждениях начального общего образования Развитие толерантности является объективной потребностью современного общества. В педагогических теориях толерантность оценивается как: отсутствие или ослабление реагирования на какой либо неблагоприятный фактор...
63873. Тенденции института семьи в трансформационном аспекте: внебрачная рождаемость 18.73 KB
  Появляются новые тенденции такие как например снижение количества ранних браков; рост числа разводов; увеличение среднего возраста женщины вступления в брак; увеличение среднего возраста матери при рождении первого ребенка; а так же увеличение количества детей которые рождаются вне брака.
63874. Феномен социального отчуждения 43.5 KB
  Доминирующей формой социального отчуждения становится отчуждение техническое обусловленной ростом места техники в жизни современного человека. Отчуждение это процесс в котором от людей отделяются результаты их деятельности сама деятельность а также те силы которые эту деятельность...
63875. Жизненные ориентации горожан 18.56 KB
  Для каждой личности характерен свой уникальный способ жизни способ ее организации оценивания и осмысления. В процессе своей жизни личность выступает в качестве то субъекта общения то субъекта деятельности являясь при этом субъектом своей жизни объединяющим...
63876. Язык заголовка кинотекста 45.5 KB
  Главным инструментом исследователей языка является текст потому что непосредственно текст представляет собой сферу функционирования языковых единиц и в тексте слово получает свое основное значение и осмысление. Гальперин характеризует текст как произведение речетворческого процесса...
63877. Проблемы профилактики игровой компьютерной зависимости среди детей и подростков 17.22 KB
  За последние двадцать лет информационное пространство в нашей стране приобрело новый формат. С появлением такого типа игр резко возросло число подростков и молодых людей проводящих 10 и более часов за игрой в компьютер.
63878. Проблема межпоколенческой преемственности как основы социокультурного единства современного российского общества 43.5 KB
  Актуальность проблемы социокультурного единства российского общества обуславливается прежде всего кардинальными изменениями происходившими и протекающими ныне во всех сферах жизни россиян. Социальные и культурные ценности вместе с социумом претерпевают активную...
63879. К вопросу о возможности всемирной культуры в контексте работы И. Валлерстайна «Анализ мировых систем и ситуация в современном мире» 21.48 KB
  Иммануэль Валлерстайн в своей книге Анализ мировых систем и ситуация в современном мире затрагивает тему всемирной культуры и задается вопросом: возможна ли она При различном употреблении этого термина культура это то что некоторые люди чувствуют или делают в отличие от других которые чувствуют или делают...