p align="left">procedure FormKeyPress (Sender: TObject; var Key: Char); procedure FormKeyDown (Sender: TObject; var Key: Word; Shift: TShiftState); Private back: TBitmap; // фон plane, plane2: TBitmap; // Самолеты rocket: TBitmap;// Пушка bomb : Tbitmap; // Ракета x,y, x1, y1, x2,y2, x3, y3: integer; // координаты объектов n, m: integer; //Количество выстрелов и попаданий Public {Public declarations} end; var Form1: TForm1; implementation {$R *.dfm} // конструктор procedure TForm1.FormCreate(Sender: TObject); begin try back := TBitmap.Create; back.LoadFromFile('graphics\sky.bmp'); // установить размер формы в соответствии с размером фонового рисунка Form1.ClientWidth := back.Width; Form1.ClientHeight := back.Height + 50; plane := TBitmap.Create; plane.LoadFromFile('graphics\plane.bmp'); plane.Transparent := True; plane2 := TBitmap.Create; plane2.LoadFromFile('graphics\plane2.bmp'); plane2.Transparent := True; rocket := TBitmap.Create; rocket.LoadFromFile('graphics\turel.bmp'); rocket.Transparent := true; bomb := TBitmap.Create; bomb.LoadFromFile ('graphics\bomb.bmp'); bomb.Transparent := true; StatusBar1.Panels[0].Text := 'Количество выстрелов: ' + inttostr(n) ; StatusBar1.Panels[1].Text := 'Количество попаданий: ' + inttostr(m) ; // исходное положение объектов x := -30; y := 50; x1 := 150; y1 := 190; x2 := x1; y2 := -15; x3 := -40; y3 := 40 ; Timer1.Interval := 25; finally end; end; //Нажатие клавиш procedure TForm1.FormKeyPress (Sender: TObject; var Key: Char); begin if (key = ' ') and (y2 = -15) then begin x2 := x1 + 8; y2 := clientheight - 80; n := n + 1; StatusBar1.Panels[0].Text := 'Количество выстрелов: ' + inttostr(n) ; ProgressBar1.StepIt; end; end; procedure Tform1.FormKeyDown(sender: Tobject; var Key: Word; shift: TshiftState); begin case key of VK_LEFT : x1 := x1 - 3; VK_RIGHT : x1 := x1 + 3; end; end; // сигнал от таймера procedure TForm1.Timer1Timer(Sender: TObject); var r, r1, r2, r3: TRect; // области, в которых находятся объекты begin randomize; r := Rect(x, y, x+plane.Width, y+plane.Height); Canvas.CopyRect(r, back.Canvas, r); // стереть объект (восстановить фон) r1 := Rect (x1,y1,x1+rocket.Width,y1+rocket.Height); Canvas.CopyRect(r1,back.Canvas,r1); r3 := Rect(x3,y3,x3+plane2.Width,y3+plane2.Height); Canvas.CopyRect(r3,back.Canvas,r3); If y2 > -15 then begin y2 := y2 - 2; r2 := Rect (x2,y2, x2+bomb.Width,y2+bomb.Height); Canvas.CopyRect(r2,back.Canvas,r2); end else y2 := - 15; //Снаряд долетел до верхней границы окна x := x + 2; x3 := x3 + 3; //Сравнить координаты ракеты и самолетов if (x > x2 -10) and (x < x2 +10) and (y < y2 + 10) and (y > y2 - 10) then begin x := -30; y2 := -15; m := m + 1; StatusBar1.Panels[1].Text := 'Количество попаданий: ' + inttostr(m) ; y := 50 + random(80); ProgressBar2.StepIt; exit; end; if (x3 > x2 -10) and (x3 < x2 +10) and (y3 < y2 + 10) and (y3 > y2 - 10) then begin x3 := -30; y2 := -15; m := m + 1; StatusBar1.Panels[1].Text := 'Количество попаданий: ' + inttostr(m) ; y3 := 60 + random(80); ProgressBar2.StepIt; exit; end; //Сравнить количество выстрелов и попаданий с необходимой нормой для завершения игры if m > 15 then begin timer1.Enabled := false; ShowMessage ('Вы Выиграли!!!!'); n := 0; m := 0; y2 := -15; progressbar1.Position := 20; progressbar2.Position := 0; StatusBar1.Panels[1].Text := 'Количество попаданий: ' + inttostr(m) ; StatusBar1.Panels[0].Text := 'Количество выстрелов: ' + inttostr(n) ; timer1.Enabled := true; end; if n > 20 then begin timer1.Enabled := false; ShowMessage ('Вы проиграли!!!'); n := 0; m := 0; y2 := -15; progressbar1.Position := 20; progressbar2.Position := 0; StatusBar1.Panels[1].Text := 'Количество попаданий: ' + inttostr(m) ; StatusBar1.Panels[0].Text := 'Количество выстрелов: ' + inttostr(n) ; timer1.Enabled := true; end; //не пустить пушку за границы формы if x1 < 0 then x1 := 0; if x1 > form1.width - rocket.Width then x1 := form1.Width - rocket.Width; Canvas.Draw(x,y,plane); Canvas.Draw(x1,y1,rocket); Canvas.Draw(x2,y2,bomb); Canvas.Draw(x3,y3,plane2); if x > Form1.Width + plane.Width + 10 then x := -20; if x3 > Form1.Width + plane2.Width + 10 then x3 := -20; end; procedure TForm1.FormPaint(Sender: TObject); begin Canvas.Draw(0,0,back); Canvas.Draw(x,y,plane); Canvas.Draw(x3,y3,plane2); Canvas.Draw(x1,y1,rocket); Canvas.Draw(x2,y2,bomb); end; end. 4 Описание программы 4.1 Общие сведения Программа «Сбей самолет» имеет наименование flight.exe, и представляет собой компьютерную игру. Пользователю предоставляется возможность сбить самолеты, появляющиеся на экране, и летящие с разной скоростью. Приложение, созданное в Delphi, будет работать на другом компьютере только в том случае, если на этом компьютере есть необходимые для его работы динамические библиотеки. Таким образом, помимо EXE-файла на компьютер пользователя надо перенести динамические библиотеки, необходимые программе, как минимум, так называемую библиотеку времени выполнения (Runtime Library, файл rtl100.bpl) и библиотеку визуальных компонентов (Visual Components Library, файл vcl100.bpl). Библиотеки, используемые программой, должны находиться в том же каталоге, что и EXE-файл. Однако весь необходимый для работы программы код можно включить непосредственно в EXE-файл (в этом случае динамические библиотеки можно не устанавливать на компьютер пользователя), что и сделано в данной программе. Программа «Сбей самолет» написана на языке высокого уровня Delphi. Среда Borland Delphi является одним из популярнейших средств разработки прикладных программ (приложений). Она ориентирована на так называемую «Быструю» разработку, в основе которой лежит технология визуального проектирования и событийного программирования. Суть этой технологии, которую иногда называют «компонентной», в том, что среда разработки берет на себя большую часть рутины, оставляя программисту работу по конструированию окон и созданию функций обработки событий. 4.2 Функциональное назначение Программа «Сбей самолет» представляет собой игру, и предназначена для проведения досуга, развлечения играющего. Для правильного функционирования программы необходимо, чтобы компьютер имел процессор с тактовой частотой не менее 600 МГц. Оперативной памяти не менее 512 Мб. Свободного места на жестком диске не менее 600 Мб. Управление игрой производится с клавиатуры, путем нажатия клавиш перемещения курсора для сдвига пушки, и пробел для выстрела. А так же мышь, для ответа на диалоговые сообщения, которые появляются при окончании игрового процесса. 4.3. Описание логической структуры В программе главную задачу выполняет мультипликация. Она позволяет реализовать движение всех объектов, используемых в программе. Чтобы воспроизвести движение объекта, необходимо сначала вывести объект на фоне, затем через некоторое время стереть этот объект, вывести фон, чтобы восстановить «испорченную» область, и снова вывести объект, но уже с небольшим отклонением от первоначального положения. После загрузки битового образа из файла он находится в программе в определенной области памяти. Чтобы определить положение объекта на форме, необходимо переменной объекта присвоить значение типа TRect, а затем вывести объект с нужными координатами на форму. Например: r: TRect; r := Rect (x, y, x+plane.Width, y+plane.Height); После чего можно вывести объект, стереть его, и снова вывести: Canvas.CopyRect(r, back.Canvas, r); Так как с каждым сигналом от таймера значение переменных меняется, то изображение каждый раз будет выводиться с определенным смещением. У наблюдателя возникнет ощущение непрерывного движения. Для реализации движения самолетов и ракеты движение происходит в строго определенную сторону, путем прибавления к координате Х для самолетов и к координате У для ракеты определенного им числа. Для реализации движения пушки в обе возможные стороны, ее координата Х должна меняться в соответствии с нажатиями клавиш. Для этого нужно в обработке события при нажатии клавиш перемещения курсора влево или вправо прибавить к координате Х пушки или отнять от нее определенное число соответственно. Например: procedure Тform1.FormKeyDown(sender: Тobject; var Key: Word; shift: tshiftstate); begin case key of VK_LEFT : x1 := x1 - 3; VK_RIGHT : x1 := x1 + 3; end; end; Таким образом, координата Х пушки меняется, и процедура мультипликации рисует ее со смещением. Для того чтобы произвести пуск ракеты строго из центра пушки, необходимо координате Х ракеты присвоить значение координаты центра пушки (Координате Х пушки, прибавить 8). А координате У ракеты установить значение чуть меньше ширины формы, и затем с каждым сигналом от таймера прибавлять к этой координате определенное ей число. Таким образом, ракета будет смещаться вверх. Например: procedure TForm1.FormKeyPress (Sender: TObject; var Key: Char); begin if (key = ' ') and (y2 = -15) then begin x2 := x1 + 8; y2 := clientheight - 80; n := n + 1; StatusBar1.Panels[0].Text := 'Количество выстрелов: ' + inttostr(n) ; ProgressBar1.StepIt; end; end; Чтобы определить попадание ракеты в самолет, необходимо сравнить координаты ракеты, и координаты самолета. Если они совпадают, стереть самолет и ракету, присвоить координате У ракеты значение минус 15, таким образом, программа будет знать, что можно пустить следующую ракету, присвоить переменной счетчика попаданий +1, и пустить самолет сначала. Например: if (x > x2 -10) and (x < x2 +10) and (y < y2 + 10) and (y > y2 - 10) then begin x := -30; y2 := -15; m := m + 1; StatusBar1.Panels[1].Text := 'Количество попаданий: ' + inttostr(m) ; y := 50 + random(80); ProgressBar2.StepIt; exit; end; Здесь Х это координата самолета, а Х2 - ракеты. Чтобы завершить программу, координаты попаданий или выстрелов должны достигнуть своего максимально-допустимого значения. Чтобы проверить это, нужно сравнить текущие значения переменных с номиналом. И если они будут равны, выдать сообщение о выигрыше или проигрыше соответственно, и затем обнулить в программе все счетчики. Например: if m = 16 then begin timer1.Enabled := false; ShowMessage ('Вы Выиграли!!!!'); n := 0; m := 0; y2 := -15; progressbar1.Position := 20; progressbar2.Position := 0; StatusBar1.Panels[1].Text := 'Количество попаданий: ' + inttostr(m) ; StatusBar1.Panels[0].Text := 'Количество выстрелов: ' + inttostr(n) ; timer1.Enabled := true; end. 4.4 Используемые технические средства Программа, созданная на Delphi, будет правильно функционировать с теми системными требованиями, с которыми может функционировать и сам язык программирования. Поэтому в качестве системных требований для программы будем иметь минимальные системные требования для самого Delphi. Для правильного функционирования программы необходимо иметь процессор Pentium III или аналогичный AMD c тактовой частотой не менее 600 МГц; оперативную память не менее 512 Мб; свободного пространства на жестком диске не менее 600 Мб; операционную систему Windows 9x, 2000, XP или Vista; клавиатура, мышь. 4.5 Вызов и загрузка Для того чтобы запустить программу, необходимо найти, и запустить файл “flight.exe” на диске A в каталоге «Курсовая». После загрузки программы в оперативную память, на экране отобразится окно программы (см. Приложение1). 4.6 Входные данные Программа, для своей работы осуществляет загрузку битовых образов из графических файлов формата bmp. Данные файлы находятся на диске А в каталоге «graphics». 4.7. Выходные данные Пользователь наблюдает на экране монитора летящие самолеты, пытается их сбить. В итоге получает информационное сообщение о выигрыше или проигрыше. 5 Тестирование программы Среда Delphi ориентирована на так называемую «быструю» разработку, в основе которой лежит технология визуального проектирования и событийного программирования. Суть этой технологии, которую иногда называют «компонентной», в том, что среда разработки берет на себя большую часть рутины, оставляя программисту работу по конструированию (проектированию) окон и созданию функций обработки событий. Тестирование является основным методом отладки, измерения качества и определения реальных характеристик программ и информации баз данных на любых этапах их жизненного цикла. Цель тестирования и отладки - обнаружение, локализация и устранение дефектов в программах и данных. Тестирование программы проходило на компьютере, с установленной на него ОС Windows XP. Было проведено 5 запусков игры, с конечными результатами как в пользу игрока, так и в пользу компьютера. Все правила игры и условия в данной программе выполняются. Действия игрока и компьютера находятся в рамках правил. Вывод: В данном курсовом проекте была разработана программа, полностью удовлетворяющая условиям поставленной задачи. ВНЕДРЕНИЕ 1. Условия выполнения программы Для выполнения программы требуется минимум: Pentium III и выше; Объем оперативной памяти не менее 512 Мб; Жесткий диск не менее 600 Мб; 2. Выполнение программы Запуск «flight.exe»- > по экрану начинают лететь самолетики, до момента, когда количество выстрелов и ли попаданий не будет больше нормы. 3. Сообщение оператору «Вы выиграли» - игра начинается сначала; «Вы проиграли» - игра начинается снова (см. Приложение 3) . ЗАКЛЮЧЕНИЕ В ходе выполнения данной курсовой работы на основе различных источников данных была проанализирована заданная предметная область. В процессе кодирования была изучена RAD Delphi в части пользовательского интерфейса и технологий отображения графики. В результате выполнения проекта была полностью реализована игра «Сбей самолет», однако в приложение можно добавить озвучивание событий игры, уровень сложности игры и разные настройки параметров игры. Это вызвало бы больший интерес к игре. Приложение представляет собой очень простой вариант игры «Сбей самолет». В процессе тестирования приложения ошибок не обнаружено. ГЛОССАРИЙ |
№ п/п | Новое понятие | Содержание | | 1 | 2 | 3 | | 1 | Компонент | Функциональный элемент, имеющий определенные свойства и размещаемый программистом в окне формы | | 2 | Форма | Окно приложения на этапе разработки | | 3 | Проект | Совокупность файлов, обеспечивающих разработку приложения в Delphi | | 4 | Файл проекта | Автоматически создаваемый файл, связывающий вместе все файлы приложения и содержащий код инициализации | | 5 | Файл ресурсов | Двоичный файл, содержащий все необходимые для проекта ресурсы, такие как, например, пиктограммы, графические изображения, курсоры мыши или строки | | 6 | Файл формы | Файл, содержащий список всех свойств компонентов, включенных в форму, значения которых были изменены по сравнению со значениями, заданными по умолчанию | | 7 | Файл программного модуля | Файл, содержащий описание связанной с модулем формы, процедур и функций программной логики функционирования окна приложения в синтаксисе Object Pascal | | 8 | Свойство | Специальный механизм классов, регулирующий доступ к полям | | 9 | Событие | Свойство процедурного типа, предназначенное для создания пользовательской реакции на то или иное входное воздействие | | 10 | Обработчик события | Фрагмент программы, который выполняется в ответ на определенное изменение в программе или Windows | | | | |
ЛИТЕРАТУРА 1. Фаронов В. В. Delphi 4: Учебный курс. - М.: Издательство “Нолидж”, 1998. 2. Дарахвелидзе П., Марков Е. Программирование в Delphi 4. - СПб.: БХВ - Санкт-Петербург, 1999. 3. Культин Н.Б. Основы программирования в Turbo Delphi. - СПб.: БХВ - Петербург, 2007. 4. Культин Н.Б. Delphi в задачах и примерах. - СПб.: БХВ - Петербург, 2003. 5. Вирт. Н. Алгоритмы и структуры данных: Пер. с англ. - М.: Мир, 1989. 6. Фокс Дж. Программное обеспечение и его разработка: Пер. с англ. - М.: Мир, 1985. 7. Роб Баас, Майк Фервай, Хайдемария Гюнтер. Delphi 4. Полное руководство. - К.: Издательская группа BHV, 1999. 8. Архангельский А. Я. Delphi5. - М., ЗАО «Издательство «Бином», 2001. Приложение 1 Приложение 2 Приложение 3
Страницы: 1, 2
|