Я хочу рассмотреть применение спрайта на примере «Летающей тарелки».
⇐ ПредыдущаяСтр 3 из 3 Эта демонстрация техники перемещения единственного спрайта «Летающей тарелки» на фоне «Звездного неба». Увеличенное изображение «тарелки» нарисовано на миллиметровой бумаге в прямоугольной области размером 43*24 мм и представляет собой эллипс с полуосями 20 и 8 мм, внутри которого проходит эллиптический поясок (дуга эллипса со смещенном центром). Из «корпуса» тарелки под небольшими углами расходятся отрезки прямых – стойки локаторов, на концах которых размещены две круговые «антенны» - кружочки небольшого радиуса (2 мм). Контуры тарелки рисуются белым цветом, а внутренность корпуса заливается красным цветом.
Для создания образа спрайта в оперативной памяти поступаю следующим образом. Сначала воспроизвожу спрайт в любом месте экрана и запоминаю содержимое соответствующего участка видеопамяти в массиве соответствующего размера (процедура get image). Затем повторно вывожу спрайт на то же место экрана в режиме 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
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|