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.


 

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

23153. Життя і творчий шлях Юрія Клена 66.5 KB
  Вже в 20ті роки розкрилися ті особливості його манери письма які зближували Юрія Клена з неокласиками: досконале володіння мистецькою формою своєрідний панестетизм. 1943 року з'являється в світ збірка поезій Юрія Клена Каравели в якій автор спробував синтезувати творчі принципи київських неокласиків та ідейнохудожні шукання поетів празької школи. Вершинними здобутками Юрія Кленапоета є поеми Прокляті роки 1937 та Попіл імперій 1943 1947.
23154. Я хочу правді бути вічним другом і ворогом одвічним злу... творчість Василя Симоненка 27.5 KB
  Це очі Василя Симоненка поета якому судилося прожити усього 28 років але залишитися в пам'яті народній назавжди. Тому мабуть кожне наступне покоління буде вважати Василя Симоненка своїм однолітком і гортаючи сторінки знаходити в поезіях відгуки власних емоцій і почуттів. Найбільша любов поета це рідна земля Україна саме цій темі присвячена більшість творів Симоненка: Україно ти моя молитва ти моя розпука вікова.
23155. Ліна КОСТЕНКО БЕРЕСТЕЧКО 414 KB
  Кишить Вкраїна кишлами орди І Бог згортає чорними сувоями твоє терпіння виткане з біди НЕ ЖАЛІВ МЕНІ ХАН НІ ВИНА НІ КУМИСУ НІ МЕДУ. І розджохався хан усе причіпеньки шукав: Ти мене одурив проклятий ґяуре Я привів своє військо а ти мене ошукав Що ж ти хочеш козацький ти макогоне щоб у тих болотах мені жаба цицьки дала Ти ж казав що їх мало. Ти ж мені любий брат казав Гірей. Несу свій хрест на свої Голгочі А цар стромляє мені у спину Свої двойлезі каправі очі.
23156. В. Симоненко про історичну місію людини на землі («Ти знаєш, що ти - людина?») 24 KB
  Симоненко про історичну місію людини на землі Ти знаєш що ти людина В історії української літератури шістдесяті роки стали роками творчості письменників які віддали свій голос на захист простої людини. Вони намагалися пробити чиновницькобюрократичну стіну суспільства де людина була лише гвинтиком їхнього апарату а не творцем своєї долі своєї історії. Повага до людини зокрема до її гідності до права жити так як вона хоче в цьому філософська наснаженість і гуманістична спрямованість поезії Ти знаєш що ти людина Лад у...
23157. Головний герой поезій В. Симоненка 23.5 KB
  В його юнацькому серці завжди жили любов віра в людину в її творчі можливості. Такі вірші як Лебеді материнства Україні Земле рідна Україно п'ю твої зіниці вражають читачів великою синівською любов'ю поета до своєї Батьківщини непідробним почуттям патріота. Ліричний герой цих поезій наголошує що без любові до Батьківщини нема справжньої людини. У віршах Любов Вона прийшла Є в коханні і будні і свята розкрито інтимні почуття ліричного героя.
23159. Духовні цінності людини в поезії Ліни Костенко 26 KB
  Поставити свого сучасника обличчям до норм що їх виробляло людство впродовж століть задуматися над сутністю власного життя зосередитися на усвідомленні себе сином української землі взяла на себе обов'язок поетеса Ліна Костенко. Звичайно у зв'язку із своєю позицією поетапатріота Ліна Костенко перебувала в опозиції до офіційних властей тоталітарного радянського суспільства. У своїх поезіях Ліна Костенко бачить конкретних винуватців моральної і духовної деградації людей.
23160. Євген Маланюк (1897-1968) 27 KB
  Як пише сам Євген Маланюк його прізвище фігурувало ще в реєстрах старшини часів Богдана Хмельницького. В колишньому Єлисаветграді Маланюк закінчує реальну гімназію раніше тут навчалися брати Тобілевичі Марко Кропивницький Є. Мобілізація у зв'язку з першою світовою війною Київська військова школа і поручник Євген Маланюк стає командиром сотні 2го Туркестанського стрілецького полку.
23161. Євген Филимонович Маланюк 54.5 KB
  Маланюка. Маланюк емігрував спочатку жив у Каліші в таборі для інтернованих українських частин. Маланюка Стилет і стилос у 1926р.