Рефераты. Моделирование движения объектов в Pascal

Наиболее важным понятием объектно-ориентированного программирования является понятие объекта. Объект представляет собой совокупность данных и подпрограмм, предназначенных для работы с этими данными. Главным достоинством объекта является то, что он позволяет моделировать абстрактные ситуации. Это делает объектный подход к программированию довольно удобным для большинства программистов, хотя очень трудно понять объектный подход тем, кто ранее программировал на структурных языках. Тем более что найти какой-либо справочный материал по объектам очень сложно.









Как появился Паскаль и что это

 

Первая версия языка Паскаль была разработана швейцарским ученым Никлаусом Виртом в 1968 году. Первоначально язык предназначался для целей обучения, поскольку он является достаточно детерминированным, т.е. все подчиняется определенным правилам, исключений из которых не так много. Основные характеристики: относительно небольшое количество базовых понятий, простой синтаксис, быстрый компилятор для перевода исходных текстов в машинный код.

В 1992 году фирма Borland International выпустила два пакета программирования на использовании языка Паскаль, - Borland Pascal 7.0 и Turbo Pascal 7.0.

Пакет Borland Pascal 7.0 учитывает многие новейшие достижения в программировании и практике создания программ и включает в себя три режима работы: в обычном режиме операционной системы MS DOS, в защищенном режиме MS DOS и в среде Windows. Обладая расширенными возможностями, пакет Borland Pascal 7.0, тем не менее, требует для использования всех своих возможностей довольно большую память – примерно 30 Мбайт на жестком диске и не менее 2 Мбайт оперативной памяти.

Пакет Turbo Pascal 7.0 обладает ограниченными возможностями и позволяет работать только в обычном режиме MS DOS. Начинающему программисту, по-видимому,  целесообразно начать изучение языка и среды именно с этого пакета.

Язык характеризуется расширенными возможностями по сравнению со стандартом, хорошо развитой библиотекой модулей, позволяющих использовать возможности операционной системы, создавать оверлейные структуры, организовывать ввод-вывод, формировать графическое изображение и т.д.

Среда программирования позволяет создавать тексты программ, компилировать их, находить ошибки и оперативно их исправлять, компоновать программы из отдельных частей, включая стандартные модули, отлаживать и выполнять отлаженную программу.

В данной работе будут описаны основные возможности языка, работа в интегрированной среде, набор стандартных модулей.

Паскаль - замечательный язык программирования, который относительно прост в изучении, довольно ясен и логичен и, будучи первым изучаемым языком программирования, приучает к хорошему стилю. Паскаль воспитывает дисциплину структурного программирования и программирования вообще лучше, чем другие языки программирования, такие, как, например Бейсик.

Паскаль – гибкий и развитый в отношении типов данных язык. Привлекательны его рекурсивные возможности, а также поддержка технологии объектно-ориентрованного программирования.

 

 
Введение в объектное программирование

Машинная графика


Достижения современных мультимедийных технологий активно проявляются в компьютерных играх, в рекламе на многочисленных Internet-сайтах, в научно-фантастических и приключенческих фильмах, в телевизионных роликах и т.п. И наиболее важной программной компонентой во всем этом разнообразии является компьютерная графика. Рассматриваемая мною система программирования появилась  12 – 15 лет тому назад и ее изобразительные средства весьма ограничены. Но все же объектно-ориентированное программирование на Pascal применяют и в наши дни.

До версии Turbo Pascal 3.0 фирма Borland использовала «черепашью» графику, как в Q Basic, но в последующих реализациях системы отказалась ль нее. Графические средства системы Turbo Pascal построены на базе общего подхода, сокращенно именуемого BGI – Borland Graphics Interface (графический интерфейс фирмы Borland). Они внесены в системные библиотеки, содержащие почти одинаковый набор процедур и функций с полностью совпадающими именами и аналогичным набором аргументов. Состав этих библиотек довольно внушителен – 83 графические программы и более 60 системных констант.


Графические спрайты


Спрайты (от англ. Sprite – «дух, привидение») представляют собой небольшие графические изображения, перемещаемые по экрану для имитации движущихся фигур или предметов. Без спрайтов не обходится ни одна динамическая игра. Для некоторых изображений достаточно единственного спрайта, который просто перемещается по заданной траектории. Таким спрайтом, например, может быть изображение летящего самолета. В других случаях приходится манипулировать цепочкой спрайтов, на которых зафиксированы отдельные кадры, соответствующие разным фазам движения.

Основная идея простейших программ анимации заключается в организации быстрой смены кадров на экране, при котором отображаются последовательные фазы изменения состояния фигур, и производится ее перемещение. При этом крайне нежелательно, чтобы спрайты «затирали» находящийся под ними интерьер. Последнее достигается за счет разумного подбора цветовых оттенков, как спрайта, так и фона, и вывода спрайтов в режиме XOR.


Я хочу рассмотреть применение спрайта на примере «Летающей тарелки».

Эта демонстрация техники перемещения единственного спрайта «Летающей тарелки» на фоне «Звездного неба». Увеличенное изображение «тарелки» нарисовано на миллиметровой бумаге в прямоугольной области размером 43*24 мм и представляет собой эллипс с полуосями 20 и 8 мм, внутри которого проходит эллиптический поясок (дуга эллипса со смещенном центром). Из «корпуса» тарелки под небольшими углами расходятся отрезки прямых – стойки локаторов, на концах которых размещены две круговые «антенны» - кружочки небольшого радиуса (2 мм). Контуры тарелки рисуются белым цветом, а внутренность корпуса заливается красным цветом.


Для создания образа спрайта в оперативной памяти поступаю следующим образом. Сначала воспроизвожу спрайт в любом месте экрана и запоминаю содержимое соответствующего участка видеопамяти в массиве соответствующего размера (процедура getimage). Затем повторно вывожу спрайт на то же место экрана в режиме XOR для стирания статичного изображения.

Для имитации звездного неба построил 1000 случайных точек на экране, окрашенных в случайные цвета.


Организовал бесконечный цикл, в котором изображение тарелки на небольшое время (порядка 0,6 сек) появляется в некоторой точке с координатами (х, у), а затем  стирается. После этого точка (х, у) смещается на случайные перемещения (dх, dу), и цикл повторяется до нажатия какой-нибудь клавиши пользователем. Для того чтобы перемещения из текущей точки в следующую выглядели случайными можно менять знаки приращений dх и dу, когда они оказываются четными или нечетными. Кроме того, необходимо организовать проверку очередной точки на принадлежность экрану и запретить ее выход из допустимого интервала.

В программном отображении «Летающая тарелка» вы можете посмотреть в «приложение 1».

Еще одним неплохим примером моделирования движения может быть программа электронных часов. Программа отображает текущее время (часы, минуты, секунды). Программа проста и элегантна. Каждый желающий может быстро понять алгоритм записи. А саму программу можно посмотреть в «ПРИЛОЖЕНИЕ 2»

 

Заключение:

Тенденции развития программных технологий


Вы прочитали курсовую работу и ознакомились с принципами действия  программы в целом. Кроме того, вы поняли разницу между структурным и объектным подходами к программированию. Что касается структурных языков, о них сказано и написано почти все, но немногие знакомы с объектами. Поэтому я посвящаю заключение этой теме.

В последние несколько лет начал создаваться новый подход к программированию, названный объектным. Объекты стали вводиться и в язык Pascal, который позже был назван Object Pascal. Сам объект построен по принципу, объясняющемуся в главе «Объекты». Их преимущество заключается в принципе наследования, когда один созданный объект способен породить родственный ему объект-потомок. Многие объекты могут использовать друг друга при построении программы. Ввиду большого количества полей и методов, были созданы свойства, использующие методы. В частности, в Delphi свойства выносятся в Инспектор объектов, что делает работу с ними похожей на детскую игру. Теперь, чтобы написать программу, не надо возиться с кучей переменных и операторов. Программист может даже и не видеть текста самой программы, конструируя сразу ее внешний вид на форме. Таким образом, если на создание программы ранее уходили недели, то сейчас она создается за несколько часов.

В связи с переходом на объектные концепции, новые программы возникают на основе уже имеющихся объектов. Некоторые языки программирования написаны на основе объектов. Расширяется и пространство применения объектов, если они возникли в среде MS-DOS, то теперь, используя объекты, можно с легкостью создать текстовый редактор типа WORD или СУБД типа ACCESS. И, естественно, в такой среде можно создать мощный и удобный редактор тестов.

Но я только приступаю к изучению Delphi и не могу написать подобную программу в той среде.














Список использованных источников:




1.     Динамические структуры данных языка Паскаль, М., издательство МАИ, 1988.


2.     Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. - М.: Наука, 1987.


3.     Грогоно П. Программирование на языке Паскаль. - М.: Мир, 1982.



4.     Учебник по Turbo Pascal 7.0 1998г.


5.     Абрамов А.Г.,  Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. М., Наука, 1988.


6.     Епанешников А., Епанешников В. Программирование в среде Turbo Pascal 7.0. М., Диалог-Мифи, 1993.

 

7.     А. Кетков, Ю. Кетков Практика программирования Бейсик Си Паскаль БХВ-Петербург, 2001.








Единственный способ изучать

новый язык программирования – писать на нём программы.

                                                        Брайэн Керниган










приложение 1

{Программа “Летающая тарелка”}

program nlo;

uses Crt, Graph;

var

     x, y, i, dx, dy, gd, gm: integer;

     Tarelka: array [1..600] of byte;

begin

     x:=320;

     y:=240;

     gd:=0;

     initgraph (gd, gm, ‘ ‘);

     randomize;

{Построение летающей тарелки}

     setfillstyle (SolidFill, 4);

     fillellipse (100, 50, 20, 8);

     ellipse (100, 46, 190, 357, 20, 6);

     line (107, 44, 110, 38);

     circle (110, 38, 2);

line (93,44, 90, 38);

circle (90, 38, 2);

{Запомнили изображение тарелки и стерли его}

     getimage (79, 36, 121, 59, Tarelka);

     putimage (79, 36, Tarelka, XORput);

{Построение звездного неба}

     for i:=0 to 1000 do

         putpixel (random(639), random(479), random(15)+1);

     repeat             {Бесконечный цикл до нажатия клавиши}

          putimage (x, y, Tarelka, XORput); {Вывод тарелки}

         delay (6000);                    {Задержка}

                        putimage (x, y, Tarelka, XORput);     {стирание тарелки}

{Перемещение тарелки}

     dx:=random (60);

     if odd (dx) then dx:=-dx;

     x:=x+dx;

     if x>590 then x:=590;

     if x<0 then x:=0;

     dy:=random (40);

     if odd (dy) then dy:=-dy;

     y:=y+dy;

     if y>450 then y:=450;

     if y<0 then y:=0;

     until KeyPressed;

     closegraph;

end.






приложение 2

program time;

uses Crt, Dos, Graph;

var

  gd,gm,k:integer;

  h1,m1,s1,h2,m2,s2,hs2:word;

procedure cifra(x,y,n:integer);

type

  a4=array [0..4] of integer;

  a6=array [1..7] of byte;

const

  a=4; b=20; c=a+a+b;

  d1:a4=(a,b,a,-a,-b);

  d2:a4=(-a,0,a,a,0);

  dx:a6=(0,0,0,0,c,0,c);

  dy:a6=(0,c,2*c,0,0,c,c);

  q:array[0..9]of byte=

    ($5F,$5,$76,$75,$2D,$79,$7B,$45,$7F,$7D);

var

  xy:array [0..5] of PointType;

  j,k,d:byte;

begin

  setfillstyle(0,0);

  bar(x-a,y-a,x+(c+a+a),y+2*(c+2*a));

  d:=q[n];

  for j:=1 to 7 do

    begin

      if ((d) and ($80 shr j))=0 then continue;

      xy[0].x:=x+dx[j];

      xy[0].y:=y+dy[j];

      for k:=1 to 5 do

      if j<4 then begin

        xy[k].x:=xy[k-1].x+d1[k-1];

        xy[k].y:=xy[k-1].y+d2[k-1]; end

      else begin

        xy[k].x:=xy[k-1].x-d2[k-1];

        xy[k].y:=xy[k-1].y+d1[k-1]; end;

      setfillstyle(1,14);

      fillpoly(6,xy);

    end;

end;


begin

  gd:=0;

  initgraph(gd,gm,'');

  settextstyle(0,0,4);

  setcolor(14);

  outtextxy(136,44,':');

  outtextxy(256,44,':');

  setcolor(4);

  h1:=100;

  m1:=100;

  s1:=100;

  repeat

    gettime(h2,m2,s2,hs2);

    if h1<>h2 then begin

       k:=h2 div 10; cifra(50,30,k);

       k:=h2 mod 10; cifra(100,30,k);

       h1:=h2;

    end;

    if m1<>m2 then begin

       k:=m2 div 10; cifra(170,30,k);

       k:=m2 mod 10; cifra(220,30,k);

       m1:=m2;

    end;

    if s1<>s2 then begin

       k:=s2 div 10; cifra(290,30,k);

       k:=s2 mod 10; cifra(340,30,k);

       s1:=s2;

    end;

  until KeyPressed;

  closegraph;

end.































приложение 3

program zvetki;

uses crt,graph;

var i,m,x1,y1,gm,cd,l,c,x0,y0,x2,y2,ii:integer;

    h,x,y,a,b,z,f,r,hp,ll,p:real;

begin

    cd:=detect; gm:=1;

    initgraph(cd,gm,'');

    randomize;

    m:=5;

    a:=0;

    b:=2*pi;

    r:=5;

    x2:=320; y2:=240;

    hp:=2*pi/15;

    ll:=0.5;

    repeat

    for ii:=0 to 14 do

    begin

        p:=ii*hp;

        l:=trunc(random(5)+2);

        x0:=x2+trunc (m*r*cos(p));

        y0:=y2-trunc(m*r*sin(p));

        c:=trunc(random(6)+9);

        h:=(b-a)/1000;

        for i:=1 to 1000 do

        begin

            f:=a+i*h;

            z:=ll*(sin(l*f)-cos(l*f));

            x:=z*cos(f); y:=z*sin(f);

            x1:=trunc(x0+x*m); y1:=trunc(y0-y*m);

            setcolor(c);

           putpixel(x1,y1,c)

        end;

        r:=r+0.5;

        ll:=ll+0.05;

        delay(10000);

    end;

    until keypressed=true;

    closegraph

end.

Отзывы можете писать на oleg-armash@mail.ru


Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.