Создание игрового приложения «Samolet» в среде разработки Lazarus
Курсовая работа, 31 Мая 2015, автор: пользователь скрыл имя
Краткое описание
Lazarus — бесплатная среда разработки программного обеспечения с открытым исходным кодом для компилятора Free Pascal (часто используется сокращение FPC— свободно распространяемый компилятор языка программирования Pascal) на языке Object Pascal. Интегрированная среда разработки предоставляет возможность кроссплатформенной разработки приложений в Delphi-подобном окружении. На данный момент является единственным инструментом быстрой разработки приложений (RAD), позволяющим Delphi-программистам создавать приложения с графическим интерфейсом для Linux (и других не-Windows) систем.
Оглавление
Введение 3
Требования к приложению: 5
Описание 5
Методы и процедуры, использованные в программе 6
Создаем форму, переменные и массивы: 7
Код программы: 9
Примеры работы приложения 22
Графические элементы используемые для создания игры: 24
Заключение 24
Список используемой литературы и источников 25
Файлы: 1 файл
Курсовая52.docx
— 655.77 Кб (Скачать)Государственное бюджетное образовательное учреждение среднего профессионального образования (ССУЗ) «Челябинский колледж информационно-промышленных технологий и художественных промыслов»
ПЦК «Информационных технологий»
КУРСОВАЯ РАБОТА
по междисциплинарному курсу прикладное программирование
Тема: Создание игрового приложения «Samolet» в среде разработки Lazarus
Выполнил:
Студент группы 320
Мирошкин Андрей Сергеевич
«____»_______________2014_г.
Проверил:
Исакова Виктория Викторовна
«____»_______________2014__г.
Работа защищена
«____»_______________2014__г.
с оценкой ___________________
Челябинск 2014г.
Оглавление
Введение
Lazarus — бесплатная среда разработки программного обеспечения с открытым исходным кодом для компилятора Free Pascal (часто используется сокращение FPC— свободно распространяемый компилятор языка программирования Pascal) на языке Object Pascal. Интегрированная среда разработки предоставляет возможность кроссплатформенной разработки приложений в Delphi-подобном окружении. На данный момент является единственным инструментом быстрой разработки приложений (RAD), позволяющим Delphi-программистам создавать приложения с графическим интерфейсом для Linux (и других не-Windows) систем.
Структура проекта Lazarus
Любой проект в Lazarus – это совокупность файлов, из которых создается единый выполняемый файл. В простейшем случае список файлов проекта имеет вид:
- файл описания проекта (.lpi);
- файл проекта (.lpr);
- файл ресурсов (.lrs);
- модуль формы (.lfm);
- программный модуль (.pas);
После компиляции программы из всех файлов проекта создается единый выполняемый файл, имя этого файла совпадает с именем проекта.
Программный модуль, или просто модуль, – это отдельно компилируемая программная единица, которая представляет собой набор типов данных, констант, переменных, процедур и функций. Любой модуль имеет следующую структуру:
unit имя_модуля; //Заголовок модуля
Interface //Раздел описаний
Implementation //Раздел реализаций
end. //Конец модуля
Заголовок модуля – это зарезервированное слово unit, за которым следует имя модуля и точка с запятой.
В разделе описаний, который открывается служебным словом interface, описывают программные элементы – типы, классы, процедуры и функции:
interface
uses список_модулей;
type список_типов;
const список_констант;
var список_переменных;
procedure имя_процедуры;
…
function имя_функции;
…
Раздел implementation содержит программный код, реализующий механизм работы описанных программных элементов (тексты процедур обработки событий, процедуры и функции, созданные программистом). Процедуры и функции в Lazarus также построены по модульному принципу.
Целью данной курсовой работы является разработать в программе Lazarus приложение:
Для реализации приложения необходимо решить следующие задачи:
Составить блок-схему приложения
Разработать приложение
Требования к приложению:
В приложение может играть только 1 пользователь. Приложение требует наличие устройств ввода/вывода.Управление производится стрелками и клавишей пробел, клавиша пробел отвечает за выстрел.
Минимальные системные требования к игре:небольшой размер игры,поддержка почти на всех операционных системах, дополнительное программное обеспечение не требуется.
Описание
Разработка игрового приложения Samoletik для ПК, с удобным пользовательским интерфейсом. В игре выполняются следующие функции: самолет движется по определенной траектории и уничтожает летящих ему навстречу объекты –самолеты , за каждый сбитый самолет даются определенные очки, также если попадают в самолет игрока , то шкала здоровья убавляется,если у игрока заканчивается здоровье, выводится сообщение "ты проиграл ", также существует несколько уровней игры , если игрок набрал определенное количество очков, то он автоматически переходит на 2 уровень(level2).
Методы и процедуры, использованные в программе
TForm1 = class(TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Shape2: TShape;
Timer1: TTimer;
Timer2: TTimer;
Timer3: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormPaint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Draw;
procedure NewGame;
procedure GameOver;
procedure Sound(sound0 : String);
procedure Exploding(x0,y0 : Integer; bitmap0 : array of TBitmap; frames0 : Integer);
procedure Timer2Timer(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
Создаем форму, переменные и массивы:
var
Form1: TForm1;
Player : TPlayer;
Ground : array [1..3] of TGround;
Bullet : array [1..100] of TBullet;
EnBullet : array [1..100] of TEnBullet;
Sky : array [1..2] of TSky;
Explode : array [1..100] of TExplode;
Enemy0 : array [1..100] of TEnemy;
Enemy1 : array [1..100] of TBigEnemy;
Boat : array [1..100] of TBoat;
Level_Up : array [1..4] of TLevel_Up;
PPic, GPic, ExPic, BExPic, EnPic0, EnPic1, EnPic2, EnPic3, BEnPic0 , BEnPic1: array of TBitmap;
BPic, SPic, EnBPic0, EnBPic1, LPic : TBitmap;
MovL, MovR, Firing : Boolean;
Shoot : Boolean;
Interval : Integer;
Health : Integer; // Player's health
Score : Integer;
Level : Integer;
TImage - отображает графическое изображение на форме. Воспринимает форматы BMP, ICO, WMF. Если картинку подключить во время дизайна программы, то она прикомпилируется к EXE файлу.
Этот компонент доступен из модуля EXTCTRLS, и находится на странице Палитры компонентов Additional.
Этот компонент служит надстройкой над классом TPicture и замыкает всю иерархию графических объектов VCL. Он предназначен для показа на форме изображения: битовой карты (TBitmap), метафайла (TMetafile), значка (TIcon).
Свойство (Pb) property Picture: TPicture; служит контейнером для графического объекта одного из перечисленных классов.
В качестве канвы используется канва объекта Picture. Graphic — только если поле Graphic ссылается на объект класса TBitmap:
(Pb) property Canvas: TCanvas;
Если это не так, то попытка обращения к свойству вызовет исключительную ситуацию EInvalidOperation, так как рисовать на метафайле или значке нельзя.
Следующие три свойства определяют, как именно Tpicture располагается в рабочей области компонента:
(Pb) property AutoSize: Boolean;
— означает, что размеры компонента настраиваются по размерам содержащегося в нем графического объекта. Устанавливать его в True нужно перед загрузкой изображения из файла или буфера обмена;
(Pb) property Stretch: Boolean;
— если это свойство установлено в True, то изображение "натягивается" на рабочую область, при необходимости уменьшая или увеличивая свои размеры. Если оно установлено в False, то играет роль следующее свойство;
(Pb) property Center: Boolean;
— если это свойство установлено в True, изображение центрируется в пределах рабочей области. В противном случае — располагается в ее верхнем левом углу.
Код программы:
Модуль формы:
Main.lfm:
object Form1: TForm1
Left = 526
Height = 650
Top = 237
Width = 600
BorderStyle = bsDialog
Caption = 'Form1'
ClientHeight = 650
ClientWidth = 600
Color = clInactiveCaption
OnCreate = FormCreate
OnKeyDown = FormKeyDown
OnKeyUp = FormKeyUp
OnPaint = FormPaint
Position = poDesktopCenter
LCLVersion = '1.0.6.0'
object Image1: TImage
Left = 0
Height = 600
Top = 50
Width = 600
Align = alCustom
end
object Label1: TLabel
Left = 8
Height = 20
Top = 14
Width = 53
Caption = 'Health'
Font.Height = -16
ParentColor = False
ParentFont = False
end
object Shape2: TShape
Left = 64
Height = 19
Top = 16
Width = 100
Brush.Color = clRed
Pen.Style = psClear
end
object Label2: TLabel
Left = 528
Height = 20
Top = 14
Width = 53
Caption = 'Level: '
Font.Height = -16
ParentColor = False
ParentFont = False
end
object Timer1: TTimer
Interval = 25
OnTimer = Timer1Timer
left = 360
top = 16
end
object Timer2: TTimer
Interval = 2000
OnTimer = Timer2Timer
left = 392
top = 16
end
object Timer3: TTimer
Interval = 15000
OnTimer = Timer3Timer
left = 424
top = 16
end
end
Модуль Game:
Game:
unit game;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Graphics;
type
{ TBase }
TBase = class (TObject)
private
x : Integer;
y : Integer;
public
function getX : Integer;
function getY : Integer;
end;
{ TAnimate }
TAnimate = class (TBase)
private
bitmap : array [0..100] of TBitmap;
frame : Integer;
maxframe : Integer;
public
Constructor Create(x0,y0 : Integer; bitmap0 : array of TBitmap;
maxframe0 : Integer);
function getBitmap : TBitmap;
procedure nextFrame;
end;
{ TStatic }
TStatic = class (TBase)
private
bitmap : TBitmap;
public
Constructor Create(x0,y0 : Integer; bitmap0 : TBitmap);
function getBitmap : TBitmap; end;
{ TPlayer }
TPlayer = class (TAnimate)
private
speed : Integer;
public
Constructor Create(x0,y0 : Integer; bitmap0 : array of TBitmap; maxframe0 : Integer);
procedure moveLeft;
procedure moveRight;
procedure move;
end;
{ TGround }
TGround = class (TAnimate)
private
speed : Integer;
public
Constructor Create(x0,y0 : Integer; bitmap0 : array of TBitmap; maxframe0 : Integer);
procedure move;
procedure resp;
end;
{ TBullet }
TBullet = class (TStatic)
private
speed_H : Integer;
public
Constructor Create(x0,y0 : Integer; bitmap0 : TBitmap; speed_H0 : Integer);
procedure move;
//function getBitmap : TBitmap; end;
{ TEnBullet }
TEnBullet = class (TBullet)
private
hor : Integer;
damage : Integer;
public
Constructor Create(x0,y0 : Integer; bitmap0 : TBitmap; hor0, damage0 : Integer);
procedure move;
function getDamage : Integer;
end;
{ TSky }
TSky = class (TStatic)
public
procedure move;
end;
{ TExplode }
TExplode = class (TAnimate)
procedure nextFrame;
function getFrame : Integer;
function getMaxFrame : Integer;
end;
{ TEnemy }
TEnemy = class (TAnimate)
private
speed : Integer;
shoot1 : Integer;
public
procedure move;
procedure setSpeed(speed0 : Integer);
procedure resetShoot;
function getShoot : Integer;
end;
{ TBigEnemy }
TBigEnemy = class (TEnemy)
private
health : Integer;
public
Constructor Create(x0,y0 : Integer; bitmap0 : array of TBitmap; maxframe0 : Integer);
procedure setHealth(health0 : Integer);
function getHealth : Integer; end;
TBoat = class (TBigEnemy)
end;
{ TLevel_Up }
TLevel_Up = class (TStatic)
public
procedure move;
end;
function EnShooting(x1, y1, x2, y2: Integer): Integer;
function RoundEx(r : real) : integer;
implementation
{ TStatic }
constructor TStatic.Create(x0, y0: Integer; bitmap0: TBitmap);
begin
x := x0;
y := y0;
bitmap := bitmap0;
end;
function TStatic.getBitmap: TBitmap;
begin
Result := bitmap;
end;
{ TAnimate }
constructor TAnimate.Create(x0, y0: Integer; bitmap0: array of TBitmap;
maxframe0: Integer);
begin
x := x0;
y := y0;
bitmap := bitmap0;
maxframe := maxframe0;
//SetLength(bitmap,maxframe);
frame := 0;
end;
function TAnimate.getBitmap: TBitmap;
begin
Result := bitmap[frame];
end;
procedure TAnimate.nextFrame;
begin
if frame < maxframe then frame := frame + 1
else frame := 0;
end;
{ TBigEnemy }
constructor TBigEnemy.Create(x0, y0: Integer; bitmap0: array of TBitmap;
maxframe0: Integer);
begin
inherited;
health := 40;
end;
procedure TBigEnemy.setHealth(health0: Integer);
begin
health := health0;
end;
function TBigEnemy.getHealth: Integer;
begin
Result := health;
end;
{ TLevel_Up }
procedure TLevel_Up.move;
begin
y := y + 5; end;
{ TEnBullet }
constructor TEnBullet.Create(x0, y0: Integer; bitmap0: TBitmap; hor0,
damage0: Integer);
begin
x := x0;
y := y0;
bitmap := bitmap0;
hor := hor0;
damage := damage0;
end;
procedure TEnBullet.move;
begin
y := y + 5;
x := x + hor;
end;
function TEnBullet.getDamage: Integer;
begin
Result := damage;
end;
function RoundEx(r : real) : integer;
var f : real;
begin
f := Frac(r);
If f = 0.5 then f := r + 0.1;
If f = -0.5 then f := r - 0.1;
Result := round(f);
end;
function EnShooting(x1, y1, x2, y2: Integer): Integer;
var x0,y0 : Integer;
begin
y0 := y1 + 5;
{
x0 := Round(((x1-x2)*y0 + (x2*y1 - x1*y2))/(y1 - y2));}
x0 := Round((x2*y1-x1*y2+x1*y0-x2*y0)/(y1-y2));
if x0 > x1 then
Result := x0 - x1
else
Result := -(x1 - x0);
end;
{ TEnemy }