Создание игрового приложения «Samolet» в среде разработки Lazarus

Автор: Пользователь скрыл имя, 31 Мая 2015 в 23:10, курсовая работа

Краткое описание

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 }

 

procedure TEnemy.move;

begin

  y := y + speed;

  if shoot1 < 200 then shoot1 := shoot1 + 1

Информация о работе Создание игрового приложения «Samolet» в среде разработки Lazarus