Разработка приложений для Windows, представляющего собой компьютерную игру Сбей самолет

Оглавление



Введение	3

1 Разработка эскизного и технического проекта программы	4

1.1 Назначение и область применения	4

1.2 Постановка задачи	4

1.3 Описание алгоритма	5

1.4 Выбор состава технических и программных средств	7

1.5 Организация входных и выходных данных	7

2 Разработка рабочего проекта	8

2.1 Разработка программы	8

2.2 Спецификация программы	10

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

2.4 Описание программы	18

2.5 Тестирование программы	18

2.6 Внедрение	19

Заключение	21

Глоссарий	22

Качество	22

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

Приложение	24



	







Введение



Задание на курсовую работу по дисциплине 

«Программирование на языке высокого уровня»



Студент группы: 

Направление:  «Информатика и ВТ»

№ контракта:   

Тема: Разработка приложений для Windows, представляющего собой компьютерную игру «Сбей самолет».

Условие задачи:  Разработать программу, моделирующую игру «Сбей самолет». По экрану летят вражеские самолеты. Цель играющего – сбить их. Пусковая установка находится в нижней строке экрана, её можно передвигать по строке вперед и назад.





Задание выдано: _______________________           _____________

                       (подпись)                           (число)                 























1 Разработка эскизного и технического проекта программы



1.1 Назначение и область применения



Необходимо разработать учебную программу. Область применения: досуг программиста. Поскольку ставится задача разработать приложение для Windows, то использоваться программа может под управлением Windows 9x/2000/XP.



1.2 Постановка задачи



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

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

Игровое поле состоит из следующих элементов. В самом верху игрового поля сверху вниз находятся невидимых пять маршрутов, по которым могут лететь самолеты слева направо по горизонтали. То есть эти пути представляют собой ячейки, из которых выпускаются самолеты. Если по одному пути летит самолет, то он закрыт для выпуска второго в этот же путь. Это напоминает движение настоящих самолетов по заданным маршрутам. Таким образом, одновременно на экране может находиться максимум пять самолетов, которые можно сбивать с помощью пусковой установки.

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

Для того чтобы было интересно играть в эту игру, смысл в нее заложен следующий. Примерно за две минуты игроку необходимо сбить максимально возможное количество самолетов. В зависимости от типа самолета сбитого или пропущенного, а также в зависимости от высоты этого самолета игроку начисляются очки. Если игрок пропустил самолет, то чем медленней был самолет, тем больше очков у него отнимется. Также чем ниже был пропущен самолет, т. е. в него проще всего было попасть, тем больше отнимется у игрока очков. Отсюда следует, что чем проще всего было сбить пропущенный самолет, тем больше отнимается очков у игрока. И наоборот, чем выше и скоростней оказывается сбитый самолет, тем больше очков прибавляется игроку.

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



1.3 Описание алгоритма  



При запуске приложения первым делом из файлов считываются картинки всех объектов игры. Изображения в файлах нарисованы на фоне с таким же цветом, как и цвет фона на игровом поле. Это необходимо, для того чтобы объекты отображались не в рамках отличного цвета от фона игрового поля. 

Далее, когда игрок нажмет на кнопку «Поехали» всем переменных задаются начальные значения и начинается игровой процесс, который продлится две минуты.

По ходу игры выводится результаты. При закрытии приложения происходит выгрузка картинок из памяти.

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





начало

Загрузка картинок игры

Задание начальных значений переменных

Игровой процесс

Выгрузка картинок и закрытие приложения

конец



























Рисунок 1 - Обобщенная схема работы всего приложения



Рисунок 2 - Алгоритм работы приложения

1.4 Выбор состава технических и программных средств



Делается вывод о необходимости использования интегральной среды разработки программ Delphi. Среда Delphi позволяет достаточно быстро разрабатывать приложения для Windows. Технические характеристики компьютера: Pentium 100 и выше; объём оперативной памяти 8 Мб; жёсткий диск объёмом не менее 500 Мб. Именно эти параметры создают условия для полноценной работы IDE Delphi  и программ, созданных в этой среде. Дополнительных средств (принтер, сканер и т. д.) не требуется.



1.5 Организация входных и выходных данных



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

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



















2 Разработка рабочего проекта



2.1 Разработка программы



	Для разработки приложения игры «Сбей самолет» используется среда визуального программирования Delphi. Проект программы содержит одно окно. Окно – Form1 представлено на рисунке 3.

	

	Рисунок 3 - Окно приложения

	

	Компонент Form1

	Свойства:

	Caption-Самолетик;

	Border- bssingle;

	

	1-компонент Button1;

	свойства:

	caption-Поехали;

	Событие:

	Onclick- активация ttimer1

	

	2-компонент label2;

	свойства:

	caption- для того чтобы остановить игру нажмите клавишу ESC

	

	3-компонент label1;

	свойства:

	caption-вы сбили

	

	4-компонент label3;

	свойства:

	caption-кол-во сбитых самолетов;

	

	5-компонент image1;

	поле на котором рисуется поле битвы

	

	6-компонент ttimer1;

	свойства:

	enable-false;

	interval-10 мс;

2.2 Спецификация программы



Исполняемый файл программы «Сбей самолет» имеет название Project1.exe. Его работоспособность не зависит от расположения на диске. Необходимо, чтобы файлы, прилагающиеся к программе, находились в указанных каталогах. Наименования файлов входящих в проект и краткая информация об их содержании представлены в приложении.



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



unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls, StdCtrls, ComCtrls;



type

  TForm1 = class(TForm)

    Image1: TImage;

    Timer1: TTimer;

    Button1: TButton;

    Label2: TLabel;

    Label1: TLabel;

    Label3: TLabel;

    procedure Timer1Timer(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure FormKeyDown(Sender: TObject; var Key: Word;

      Shift: TShiftState);

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;





//==============================================================================

procedure FillZap(ind: integer);

//==============================================================================



const

n=10;



type

 TSprite= record

  X,Y : integer;

  vectX, vectY: integer;

  koef_a, koef_b: real;

  speed : integer;

  Gr  : TBitmap;

 end;



 TRocket= record

   X,Y: integer;

   Gr      : TBitmap;

   Destroed: Boolean;

 end;



var

  Form1: TForm1;

   a:integer=0;

  Su25: array [1..n] of TSprite;

  turel: TSprite;

  rocket: TRocket;



  Killed: integer=0;

implementation



{$R *.dfm}

//==============================================================================

procedure Colision;

var I: integer;

begin

   for i:=1 to n do

    begin

   if (rocket.X>Su25[i].X) and (rocket.X<(Su25[i].X+Su25[i].Gr.Width)) and

   (rocket.Y<(Su25[i].Y+Su25[i].Gr.Height)) and (rocket.Y>Su25[i].Y) then

      begin

         rocket.Destroed:=true;

         rocket.Y:=Form1.Image1.Height+10;

         inc(Killed);

         FillZap(i);

      end;

    end;

end;

//==============================================================================

procedure FillZap(ind: integer);

begin

   Su25[ind].X:=random(Form1.Image1.Width-35);

   Su25[ind].Y:=-1;

   Su25[ind].vectX:=random(Form1.Image1.Width div 2);

   Su25[ind].vectY:=Form1.Image1.Height+10;

   Su25[ind].koef_b:=Su25[ind].X;

   Su25[ind].koef_a:=Su25[ind].vectX/Su25[ind].vectY;

end;

//==============================================================================

procedure Calc;

var i: integer;

begin

   For i:=1 to n do

    begin

      if Su25[i].Y>Form1.Image1.Height then FillZap(i);

       Su25[i].X:=round(Su25[i].Y*Su25[i].koef_a+Su25[i].koef_b);

       inc(Su25[i].Y,random(10));

    end;



    if rocket.Destroed<>true then dec(rocket.Y,10);

    if rocket.Y<-10 then

     begin

     rocket.Destroed:=true;

     rocket.Y:=Form1.Image1.Height+10;

     end;

end;

//==============================================================================

procedure ClearScr;

begin

   Form1.Image1.Canvas.Brush.Color:=clBlack;

   Form1.Image1.Canvas.FillRect(Rect(0,0,Form1.Image1.Width,Form1.Image1.Height));

end;

//==============================================================================

procedure LoadImages_;

var i: integer;

begin

  For i:=1 to n do

   begin

     Su25[i].Gr:=TBitmap.Create;

     Su25[i].Gr.LoadFromFile('graph\samolet1.bmp');

     Su25[i].Gr.TransparentColor:=clRed;

     Su25[i].Gr.Transparent:=true;

   end;

   turel.Gr:=TBitmap.Create;

   turel.Gr.LoadFromFile('graph\turel.bmp');

   turel.Gr.TransparentColor:=clRed;

   turel.Gr.Transparent:=true;

   turel.X:=turel.Gr.Width+10;

   turel.Y:=521-turel.Gr.Height;



   Rocket.Gr:=TBitmap.Create;

   Rocket.Gr.LoadFromFile('graph\bullet.bmp');

   Rocket.Gr.TransparentColor:=clWhite;

   Rocket.Gr.Transparent:=true;

   Rocket.Y:=Form1.Image1.Height+10;

   Rocket.Destroed:=true;



end;

//==============================================================================

procedure DrawScene;

var I: integer;

begin

 For i:=1 to n do

  begin

   Form1.Image1.Canvas.Draw(Su25[i].X,Su25[i].Y, Su25[i].Gr);



  end;

  Form1.Image1.Canvas.Draw(turel.X,turel.Y,turel.Gr);

  Form1.Image1.Canvas.Draw(rocket.x,rocket.Y, rocket.Gr);

end;

//==============================================================================

procedure Precache_;

var i: integer;

begin

  For i:=1 to n do FillZap(i);

end;

//==============================================================================

procedure TForm1.Timer1Timer(Sender: TObject);

begin

Calc;

Colision;

ClearScr;

DrawScene;

label3.Caption:=inttostr(Killed)+'  самолетов';

if killed>=100 then

begin

label3.Caption:='Вы выйграли';

Timer1.Enabled:=false;

Button1.Enabled:=true;

killed:=0;

end;

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

Randomize;

LoadImages_;

Precache_;

ClearScr;

end;



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Timer1.Enabled:=false;

end;



procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

 case Key of

   VK_LEFT   : begin

               if turel.X >0 then dec(turel.X,10);

               end;

   VK_RIGHT  : begin

               if turel.X<Image1.Width-turel.Gr.Width then inc(turel.X,10);

               end;

   VK_SPACE  : begin

                 if rocket.Destroed then

                   begin

                      rocket.Destroed:=false;

                      rocket.X:=turel.X + turel.Gr.Width div 2;

                   end;

               end;

   VK_ESCAPE : begin

                 Timer1.Enabled:=false;

                 Button1.Enabled:=true;



               end;

 end;

end;



procedure TForm1.Button1Click(Sender: TObject);

begin



Button1.Enabled:=false;

Timer1.Enabled:=true;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

Showmessage('Игра "Сбей самолет"'#13#13#13'Автор: студент Дин-809-01 Быстрикова Анна')

end;

end.





2.4 Описание программы



Общие сведения: программа  разработана в среде программирования Delphi 7.

Функциональное назначение программы: программа предназначена для развлечения.

Используемые технические средства: при разработке программы были использованы следующие технические и программные средства:

компьютер на базе процессора Intel Pentium 4    3.00 GHz

объем оперативной памяти 512 Мб

операционная система Windows XP Professional

Вызов и загрузка: для того, чтобы запустить программу, необходимо запустить файл «Project1.exe».



2.5 Тестирование программы



Для тестирования программы были пройдены все этапы игры. 

Контрольный пример предполагал проверку следующих требований:

- возможность открытия приложения,

- отображение рисунков, 

- работа счетчика «Вы сбили:».

- возможность перехода игры в режим «Пауза».

Программа тщательно проверялась. Ошибок не найдено. 

Вид приложения в случайный момент игры приведен на рисунке 4.







Рисунок 4 - Вид окна приложения в случайный момент игры



2.6 Внедрение	



Условия выполнения программы: Данное приложение способно работать на персональных компьютерах с минимальными требованиями Pentium 100, оперативной памятью 32 Мб, операционной средой Windows.

Установка программы: в данном приложении не предусмотрен установочный пакет. Поэтому установка заключается в копировании папки содержащей весь состав проекта (см. приложение) с диска, дискеты или другого носителя на жесткий диск компьютера.

		Выполнение программы: для загрузки программы необходимо запустить файл «Project1.exe», для старта (повтора) игры следует нажать на кнопку «Поехали». Для того чтобы остановить игру нужно нажать на кнопку клавиатуры – «Esc». Для выхода из программы необходимо нажать Alt+F4 или щелкнуть левой кнопкой мыши по крестику в правом верхнем углу экрана.

		

		

		

		

		

		

		

		

		

		

		

		

		

		

		

		

		

		

		

		

		

		

Заключение



Приложение представляет собой очень простой вариант игры «сбей самолет».

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

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

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























Глоссарий



№ 

Новые понятия

Содержание

1

Объектно-ориентированное программирование

подход к программированию,  рассматривающий программу  как совокупность объектов и сообщений

2



Объект

пакет информации, содержащий данные и процедуры их обработки. Сообщение – это спецификация условий выполнения одной из процедур обработки объекта

3





Язык программирования

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

4

Операция

действие в языке программирование, которое выполняется над данными

5

Структура

программы

общая схема построения программы, рассматривающая все ее составные компоненты и взаимосвязи между ними

6

Оператор присваивания

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

7



Файл

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

8

Оператор ввода данных

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

9

Оператор вывода данных

специальный оператор, предназначенный для вывода данных из памяти в файл, закрепленный за одним из внешних устройств компьютера

10

Качество

программы

степень соответствия программы своему функциональному назначению с точки зрения предъявляемых к ней требований





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



	Александровский А. Д. Delphi 5.0. Разработка корпоративных приложений. – М.: ДМК, 2007. – 512 с.

	Бобровский С.И. Delphi 7^ Учебный курс, -СПб.: Издательство «Питер» 2004. – 184 с.

	Бондарёв В. М., Рублинецкий В. И., Качко Е. Г. «Основы программирования». Харьков: Фолио; Ростов н/Д: Феникс, 2003. – 504 с.

	Власов А.Я. Справочник по программированию на Object Pascal. Киев, 2006. – 401 с.

	Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов. М., 2003. – 220 с.

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

	Карпов Б. «Delphi: специальный справочник» -СПб.: Издательство «Питер», 2004. – 236 с.

	Культин Н. «Delphi в задачах и примерах» -СПб.: Издательство «БХВ-Петербург», 2005. – 436 с.

	Марков Е. «Программирование в Delphi 4», -СПб, «БХВ-Петербург», 2004. – 306 с.

	Мейер Б., Бодуэн К. Методы программирования. М., 2003. –310 с.





















Приложение



Состав проекта

Наименование

Обозначение

Примечание

Project1.dof

Файл параметров проекта

Содержит текущие установки проекта: настройки компилятора и компоновщика, имена служебных каталогов, условные директивы

Project1.dpr

Файл проекта

Связывает все файлы, из которых состоит приложение

Project1.cfg

Файл, содержащий настройки проекта

Содержит информацию о том, какие окна открыты и в каких позициях они расположены.

Project1.res

Файл ресурсов

Содержит пиктограммы, графические изображения

Unit1.pas

Файл программного модуля для формы Form1

Определяет функциональность формы Form1

Unit1.dfm

Файл формы Form1

Содержит список свойств всех компонентов, включённых в форму Form1

Unit1.dcu

Объектный файл для Unit1.pas

Откомпилированная версия Unit1.pas

bullet.bmp

samolet1.bmp

turel.bmp

Файлы рисунков программы

Загружаются во время работы программы











6