Оглавление
Введение.......................................................................................................... 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, представляющего собой компьютерную игру «Сбей самолет».
Условие задачи:
Разработать программу, моделирующую игру «Сбей самолет». По экрану летят вражеские самолеты. Цель играющего – сбить их. Пусковая установка находится в нижней строке экрана, её можно передвигать по строке вперед и назад.
Задание выдано: _______________________ _____________
(подпись) (число)
Необходимо разработать учебную программу. Область применения: досуг программиста. Поскольку ставится задача разработать приложение для Windows, то использоваться программа может под управлением Windows 9x/2000/XP.
Как указано в условии задачи необходимо, чтобы по экрану летели вражеские самолеты, а в нижней части экрана находилась пусковая установка, с помощью которой необходимо сбить самолеты. В данном примере для реализации такой задачи используется графический вывод на экран всех объектов игры.
Так как почти все объекты игры могут находиться в движении в любой момент игры неизвестный изначально, то необходимо постоянно обновлять изображение в игровом поле. Обновление игрового поля должно происходить через определенные промежутки времени. Для этого нужно использовать таймер, с помощью которого будет вызываться процедура обновления. Также с помощью этого таймера, через такие же промежутки времени, но перед выводом, для того чтобы игра развивалась, будут происходить расчеты для новых положений и состояний объектов игры.
Игровое поле состоит из следующих элементов. В самом верху игрового поля сверху вниз находятся невидимых пять маршрутов, по которым могут лететь самолеты слева направо по горизонтали. То есть эти пути представляют собой ячейки, из которых выпускаются самолеты. Если по одному пути летит самолет, то он закрыт для выпуска второго в этот же путь. Это напоминает движение настоящих самолетов по заданным маршрутам. Таким образом, одновременно на экране может находиться максимум пять самолетов, которые можно сбивать с помощью пусковой установки.
Для наглядности игры и придания большей заинтересованности игроку используются три типа самолетов: дирижабль, вертолет и самолет. У каждого типа своя определенная скорость полета.
Для того чтобы было интересно играть в эту игру, смысл в нее заложен следующий. Примерно за две минуты игроку необходимо сбить максимально возможное количество самолетов. В зависимости от типа самолета сбитого или пропущенного, а также в зависимости от высоты этого самолета игроку начисляются очки. Если игрок пропустил самолет, то чем медленней был самолет, тем больше очков у него отнимется. Также чем ниже был пропущен самолет, т. е. в него проще всего было попасть, тем больше отнимется у игрока очков. Отсюда следует, что чем проще всего было сбить пропущенный самолет, тем больше отнимается очков у игрока. И наоборот, чем выше и скоростней оказывается сбитый самолет, тем больше очков прибавляется игроку.
Пусковую установку с помощью клавиатуры можно передвигать. Пусковая установка может выпустить максимум три пули.
При запуске приложения первым делом из файлов считываются картинки всех объектов игры. Изображения в файлах нарисованы на фоне с таким же цветом, как и цвет фона на игровом поле. Это необходимо, для того чтобы объекты отображались не в рамках отличного цвета от фона игрового поля.
Далее, когда игрок нажмет на кнопку «Поехали» всем переменных задаются начальные значения и начинается игровой процесс, который продлится две минуты.
По ходу игры выводится результаты. При закрытии приложения происходит выгрузка картинок из памяти.
Общая схема алгоритма работы всего приложения, с представлением в ней всех процедур как отдельных блоков, приведена на рисунке 1. Более конкретный алгоритм приложения представлен на рисунке 2.
Рисунок 1 - Обобщенная схема работы всего приложения
Рисунок 2 - Алгоритм работы приложения
Делается вывод о необходимости использования интегральной среды разработки программ Delphi. Среда Delphi позволяет достаточно быстро разрабатывать приложения для Windows. Технические характеристики компьютера: Pentium 100 и выше; объём оперативной памяти 8 Мб; жёсткий диск объёмом не менее 500 Мб. Именно эти параметры создают условия для полноценной работы IDE Delphi[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 мс;
Исполняемый файл программы «Сбей самолет» имеет название 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.
Общие сведения:
программа разработана в среде программирования Delphi 7.
Функциональное назначение программы:
программа предназначена для развлечения.
Используемые технические средства:
при разработке программы были использованы следующие технические и программные средства:
- компьютер на базе процессора Intel Pentium 4 3.00 GHz
- объем оперативной памяти 512 Мб
- операционная система Windows XP Professional
Вызов и загрузка:
для того, чтобы запустить программу, необходимо запустить файл «Project1.exe».
Для тестирования программы были пройдены все этапы игры.
Контрольный пример предполагал проверку следующих требований:
- возможность открытия приложения,
- отображение рисунков,
- работа счетчика «Вы сбили:».
- возможность перехода игры в режим «Пауза».
Программа тщательно проверялась. Ошибок не найдено.
Вид приложения в случайный момент игры приведен на рисунке 4.
Рисунок 4 - Вид окна приложения в случайный момент игры
Условия выполнения программы:
Данное приложение способно работать на персональных компьютерах с минимальными требованиями Pentium 100, оперативной памятью 32 Мб, операционной средой Windows.
Установка программы:
в данном приложении не предусмотрен установочный пакет. Поэтому установка заключается в копировании папки содержащей весь состав проекта (см. приложение) с диска, дискеты или другого носителя на жесткий диск компьютера.
Выполнение программы:
для загрузки программы необходимо запустить файл «Project1.exe», для старта (повтора) игры следует нажать на кнопку «Поехали». Для того чтобы остановить игру нужно нажать на кнопку клавиатуры – «Esc». Для выхода из программы необходимо нажать Alt+F4 или щелкнуть левой кнопкой мыши по крестику в правом верхнем углу экрана.
Приложение представляет собой очень простой вариант игры «сбей самолет».
Здесь используется цикл таймера для прорисовки объектов игры. Несмотря на то, что программист имеет право по-своему определять какие ему нужны компоненты при разработке приложения, так как главное результат, но данный подход, при котором для прорисовки на поле объектов игры используется цикл таймера не является оптимальным. Таймер имеет погрешность при определении интервала времени, поэтому в игре могут быть заметны мелкие скачки при выводе изображения. Но целью приложения является осуществление вывода графических объектов, поэтому такой подход в данном случае можно использовать.
С помощью именно такого подсчета количества набранных очков, который используется в игре, можно получать довольно разнообразные результаты за одинаковый промежуток времени (времени игры). Это вызывает больший интерес к игре, т. к. игроки могут соревноваться в количестве набранных очков.
Для уменьшения размера исполняемого файла картинки игры загружаются при запуске игры, но из-за этого увеличивается количество файлов необходимых для функциональности приложения.
№
|
Новые понятия
|
Содержание
|
1
|
Объектно-ориентированное программирование
|
подход к программированию, рассматривающий программу как совокупность объектов и сообщений
|
2
|
Объект
|
пакет информации, содержащий данные и процедуры их обработки. Сообщение – это спецификация условий выполнения одной из процедур обработки объекта
|
3
|
Язык программирования
|
система обозначений, служащая для точного описания программ или алгоритмов машинных вычислений. Язык программирования – это искусственный язык, в котором алфавит ( набор различных символов языка), синтаксис (правила построения множества текстов или конструкций языка из алфавита языка) и семантика (описание соответствия между текстами и их «смыслами») строго и однозначно определены
|
4
|
Операция
|
действие в языке программирование, которое выполняется над данными
|
5
|
Структура
программы
|
общая схема построения программы, рассматривающая все ее составные компоненты и взаимосвязи между ними
|
6
|
Оператор присваивания
|
оператор языка программирования, предназначенный для вычисления значения заданного выражения и записи в память полученного результата
|
7
|
Файл
|
определенным образом организованная совокупность данных, имеющих общее имя и размещенных на одном из внешних устройств компьютера (например, на жестком или гибком дисках)
|
8
|
Оператор ввода данных
|
специальный оператор, предназначенный для ввода данных в память из файла, закрепленного за одним из внешних устройств компьютера
|
9
|
Оператор вывода данных
|
специальный оператор, предназначенный для вывода данных из памяти в файл, закрепленный за одним из внешних устройств компьютера
|
10
|
программы
|
степень соответствия программы своему функциональному назначению с точки зрения предъявляемых к ней требований
|
1. Александровский А. Д. Delphi 5.0. Разработка корпоративных приложений. – М.: ДМК, 2007. – 512 с.
2. Бобровский С.И. Delphi 7^ Учебный курс, -СПб.: Издательство «Питер» 2004. – 184 с.
3. Бондарёв В. М., Рублинецкий В. И., Качко Е. Г. «Основы программирования». Харьков: Фолио; Ростов н/Д: Феникс, 2003. – 504 с.
4. Власов А.Я. Справочник по программированию на Object Pascal. Киев, 2006. – 401 с.
5. Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов. М., 2003. – 220 с.
6. Дарахвелидзе П., Марков Е. Программирование в Delphi 4.СПб.: БХВ. СПб., 2004.- 209 с.
7. Карпов Б. «Delphi: специальный справочник» -СПб.: Издательство «Питер», 2004. – 236 с.
8. Культин Н. «Delphi в задачах и примерах» -СПб.: Издательство «БХВ-Петербург», 2005. – 436 с.
9. Марков Е. «Программирование в Delphi 4», -СПб, «БХВ-Петербург», 2004. – 306 с.
10. Мейер Б., Бодуэн К. Методы программирования. М., 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
|
Файлы рисунков программы
|
Загружаются во время работы программы
|
[1]
Для программирования игры «Сбей самолет» использовалась среда Delphi 7.
|