Разработка алгоритма решения




 

В программе решается одна независимая подзадача: Мультипликация.

Алгоритм мультипликации самолета представлен на рисунке 1:

 

Рис.1. Схема алгоритма мультипликации

 

После запуска программы на экран выводиться окно (Приложение 6) Программа выполняется следующим образом: Сначала на форму выводятся объекты - летящие самолеты (приложение 3), и пушка (приложение 4). Игрок запускает ракету (приложение 5), которая может сбить или не сбить самолет. За один раз можно пустить только одну ракету. Если ракета попадает в самолет, то стирается самолет и ракета, увеличивается счетчик сбитых самолетов, счетчик ракет не изменяется, самолет начинает "полет" снова, а игрок получает право пустить следующую ракету. Если игрок не попал в самолет, ракета долетает до верхней границы окна, счетчик ракет уменьшается на 1, и игрок получает право пустить следующую ракету. Окно во время работы программы (Приложение 7). Если счетчик ракет достигает (0) то программа выводит сообщение о том сколько самолетов сбито. После нажатия на кнопку "Ок" программа завершает свое выполнение. Также во время игры игрок может поставить игру на паузу нажав кнопку "р.". После нажатия все таймеры прекращают свое выполнение. Для восстановления игры потребуется нажать на кнопку "о". После нажатия этой кнопки самолеты продолжают свое выполнение. Возможно также запустить игру с начала, если нажать кнопку "I". Все счетчики сбрасываются, а таймеры начинают снова свое выполнение.

После завершения игры на экран выводиться окно результатов (Приложение 8).

 

Описание логической структуры

 

В программе главную роль выполняет мультипликация. Она позволяет реализовать движение самолетов.

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

Так с каждым сигналом таймера положение изображения будет меняться и у наблюдателя возникнет ощущение непрерывного движения. Пример:

.left: =sam1.left+(n);

 


 

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

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

Пример:

 

raketa.top: =raketa.top-20;

if raketa.top<0 then: =j-1;.Enabled:=false;.left: =tank.left+50;

raketa.top: =tank.top+70;

 

Что бы завершить программу, кол-во оставшихся ракет должно достигнуть своего предела (0).

Пример:

raketa.top<0 then: =j-1;

 

Где j-это кол-во оставшихся ракет.

 


 

Выводы

 

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

В процессе кодирования была изучена RAD Delphi в части пользовательского интерфейса и технологий отображения графики.

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

В процессе тестирования приложения ошибок не обнаружено.

программирование игра таймер интерфейс


 

Список исспользуемой литературы

 

1. Фаронов В. В. Delphi 4: Учебный курс. - М.: Издательство "Нолидж", 1998.

2. Дарахвелидзе П., Марков Е. Программирование в Delphi 4. - СПб.: БХВ - Санкт-Петербург, 1999.

. Культин Н.Б. Основы программирования в Turbo Delphi. - СПб.: БХВ - Петербург, 2007.

. Культин Н.Б. Delphi в задачах и примерах. - СПб.: БХВ - Петербург, 2003.

. Вирт. Н. Алгоритмы и структуры данных: Пер. с англ. - М.: Мир, 1989.

. Фокс Дж. Программное обеспечение и его разработка: Пер. с англ. - М.: Мир, 1985.

. Роб Баас, Майк Фервай, Хайдемария Гюнтер. Delphi 4. Полное руководство. - К.: Издательская группа BHV, 1999.

. Архангельский А. Я. Delphi5. - М., ЗАО "Издательство "Бином", 2001.

. Электронная энциклопедия.

 


 

Приложение 1

 

Текст программы

Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, ExtCtrls, jpeg;= class(TForm): TTimer;: TImage;: TImage;: TImage;: TTimer;: TLabel;: TImage;: TTimer;: TImage;: TTimer;: TImage;: TLabel;: TImage;: TTimer;: TImage;: TImage;: TImage;: TImage;: TLabel;FormKeyDown(Sender: TObject; var Key: Word;: TShiftState);samolet1Timer(Sender: TObject);timer2Timer(Sender: TObject);Timer3Timer(Sender: TObject);Timer4Timer(Sender: TObject);FormCreate(Sender: TObject);Timer5Timer(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;,j,n:integer;

{$R *.dfm}TForm1.FormKeyDown(Sender: TObject; var Key: Word; //движение танка: TShiftState);:= True;(key=VK_left) and (tank.left>=0) then.left:=tank.left-20;(key=VK_right) and (tank.left + tank.width <= Form1.Clientwidth)then.left:=tank.left+20;key=vk_space then.enabled:=true;key=$49 then:=0;:=10;.Left:=-1000;.Left:=-1000;.left:=+1000;.Left:=+700;

label1.caption:='Самолетов уничтожено:'+inttostr(i); //вывод сбитых самолетов.Caption:='Ракет осталось:'+inttostr(j); //вывод оставшихся ракет

end;key=$50 then //пауза кнопкой "p".Enabled:=false;.Enabled:=false;.Enabled:=false;.Enabled:=false;.Enabled:=false;;key=$4F then //возобновить игру кнопкой "о".Enabled:=true;.Enabled:=true;.Enabled:=true;.Enabled:=true;;timer2.enabled=false then //ракета движется вместе с танком(key=vk_left) then raketa.top:=tank.top+70;(key=vk_left) then raketa.left:=tank.left+50;(key=vk_right) then raketa.top:=tank.top+70;(key=vk_right) then raketa.left:=tank.left+50;;;TForm1.samolet1Timer(Sender: TObject); //самолет 1.left:=sam1.left+(n);sam1.Left > Form1.Clientwidth then.Left:=form1.Width-1000;sam1.left>(-500) then.visible:=false;;TForm1.Timer3Timer(Sender: TObject); //самолет 2.left:=sam2.left+(n);sam2.Left > Form1.Clientwidth then.Left:=form1.Width-1500;sam2.left >(-500) then.visible:=false;;TForm1.Timer4Timer(Sender: TObject); //самолет 3.left:=sam3.left-(n);sam3.Left < (-100) thensam3.Left:=sam3.Left+1000;sam3.left<700 then.visible:=false;;TForm1.Timer5Timer(Sender: TObject); //самолет 4.left:=sam4.left-(n);sam4.Left < (-100) thensam4.Left:=sam4.Left+700;sam4.left<500 then.visible:=false;;TForm1.timer2Timer(Sender: TObject); //ракета.top:=raketa.top-20;

if raketa.top<0 then //если ракета достигает края формы то возвращается

begin:=j-1;.Enabled:=false;.left:=tank.left+50;.top:=tank.top+70;;((raketa.Top > sam1.Top) and //если координаты 1 самолета и ракеты равны

(raketa.Top < sam1.Top+ sam1.height)

(raketa.left > sam1.left) and

(raketa.left < sam1.left+sam1.Width)).Enabled:=false; ////////////////////////.left:=tank.left+50;.top:=tank.top+70;.Left:=sam1.Left;.Visible:=true;.Left:=sam1.left-1000;:=i+1;;((raketa.Top > sam2.Top) and //если координаты 2 самолета и ракеты равны

(raketa.Top < sam2.Top+ sam2.height)

(raketa.left > sam2.left) and

(raketa.left < sam2.left+sam2.Width)).Enabled:=false;.left:=tank.left+50;.top:=tank.top+70;.Left:=sam2.Left;.Visible:=true;.left:=-1000;:=i+1;; ((raketa.Top > sam3.Top) and //если координаты 3 самолета и ракеты равны

(raketa.Top < sam3.Top+ sam3.height)

(raketa.left > sam3.left) and

(raketa.left < sam3.left+sam3.Width)).Enabled:=false;.left:=tank.left+50;.top:=tank.top+70;.Left:=sam3.Left;.Visible:=true;.left:=+1000;:=i+1;;

((raketa.Top > sam4.Top) and //если координаты 4 самолета и ракеты равны

(raketa.Top < sam4.Top+ sam4.height)

(raketa.left > sam4.left) and

(raketa.left < sam4.left+sam4.Width)).Enabled:=false;.left:=tank.left+50;.top:=tank.top+70;.Left:=sam4.Left;.Visible:=true;.left:=+700;:=i+1;;i=20 then begin:=10;

label3.Caption:='Уровень сложности:2';

end;i=40 then begin:=14;

label3.Caption:='Уровень сложности:3';

end;i=60 then begin:=20;

label3.Caption:='Уровень сложности:4';;.caption:='Самолетов уничтожено:'+inttostr(i); //вывод сбитых самолетов.Caption:='Ракет осталось:'+inttostr(j); //вывод оставшихся ракетj<1 then //если ракеты закончились//игра останавливается и выводиться сообщение('Cамолетов врага уничтожено:'+inttostr(i));//вывод сбитых самолетов

close;;;TForm1.FormCreate(Sender: TObject); //при запуске игры выводиться сообщение('p-пауза,о-возобновить игру,i-навая игра,space-огонь, <-,-> -управление танком');

j:=10;.Visible:=false; //стартовое кол-во ракет

boom2.Visible:=false;.Visible:=false;.Visible:=false;:=8;.caption:='Самолетов уничтожено:'+inttostr(i); //вывод сбитых самолетов

label2.Caption:='Ракет осталось:'+inttostr(j); //вывод оставшихся ракет.Caption:='Уровень сложности:1';;.

 


 

Приложение 2

 

Основное окно программы (Form1)

 


 

Приложение 3

 

Изображение самолета

 


 

Приложение 4

 

Изображение ракетной установки

 


 

Приложение 5

 

Изображение ракеты

 


 

Приложение 6

 

Окно во время работы программы

 


 

Приложение 7

 

Окно во время работы программы

 


 

Приложение 8

 

Окно после завершения работы программы



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: