Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт з практики констр_пезе.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
9.98 Mб
Скачать

6.2. Детальне проектування даних

Ніяких структур даних, окрім згаданих при описі класів в розділі 6.1, немає.

  1. Розробка коду програми.

Код був розроблений з урахуванням всіх вимог і стандартів приведених вище в документах. Були розроблені всі заплановані функції а саме, рух персонажів, взаємодію між ними, підрахунок зібраних артефактів, взаємодію з артефактами, підрахунок життів та взаєможію з додатковими життями, розпочинання нової гри а також вихід з неї.

Лістинг програми:

Finction.h

//клас героя

class Hero{

int x,y,nlife;

public:

int get_x(){return x;};

int get_y(){return y;};

int get_nlife(){return nlife;};

void set_x(int c){x=x+c;};

void set_y(int d){y=y+d;};

void set_hero(int o,int f){x=o;y=f;};

void set_nlife(int l){nlife=nlife+l;};

Hero(){

x=100;

y=100;

}

};

//Клас монстра

class Monster{

int a,b;

public:

int get_a(){return a;};

int get_b(){return b;};

void set_a(int c){a=a+c;};

void set_b(int d){b=b+d;};

Monster(){

srand(time(0));

a=300+rand()%400; ;

b=rand()%350; ;

}

};

//--------------------------------------------------------------------------

//клас артефакту

class Art{

int xart,yart,flag;

public:

int get_xart(){return xart;};

int get_yart(){return yart;};

int get_flag(){return flag;};

void set_flag(int fl){flag=fl;};

Art(){

xart=rand()%750; ;

yart=rand()%500+10;

flag=1;

}

};

class Life{ // жизні

int xl,yl,flagl;

public:

int get_xl(){return xl;};

int get_yl(){return yl;};

int get_flagl(){return flagl;};

void set_ko(int xn,int xm){xl=xn; xl=xm;};

void set_flagl(int fl1){flagl=fl1;};

Life(){

xl=rand()%750; ;

yl=rand()%500+10; ;

flagl=1;

}

};

Location_1.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Location_1.h"

#include "Function.h"

#include <stdlib.h>

#include <time.h>

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int wp,hp; //розмір поля

//int x=100,y=100; // координати героя,

int const nmonster=4,nart=10,

nliferand=2; // к-ть рендомних життів;

//int nlife=3; // початкове значення жизнів

int kilkart=0;

Monster mas[nmonster];

Art masart[nart];

Life maslife[nliferand];

Hero Hero1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

wp=800;

hp=520;

Timer1->Interval=50; // частота руху монстрів

Timer1->Enabled = true;

Timer2->Interval=25; //Частота оновлення форми

Timer2->Enabled = true;

Form1->DoubleBuffered=true;

monster= new Graphics::TBitmap(); //завантаження зображення монстра

monster->LoadFromFile("monster.bmp");

monster->Transparent = true;

hero = new Graphics::TBitmap(); //завантаження зображення героя

hero->LoadFromFile("hero1.bmp");

hero->Transparent = true;

fon = new Graphics::TBitmap(); //завантаження зображення фону

fon->LoadFromFile("fon.bmp");

imgart = new Graphics::TBitmap(); //завантаження зображення фону

imgart->LoadFromFile("art.bmp");

imgart->Transparent = true;

imglife=new Graphics::TBitmap(); //завантаження зображення фону

imglife->LoadFromFile("life.bmp");

imglife->Transparent = true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Hero(int x, int y) // Зображення героя

{

Canvas->Draw(x,y,hero);

hero->FreeImage();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Fon() //завантаження фону

{

// Canvas->StretchDraw(Form1->Canvas->ClipRect,fon);

Canvas->Draw(0,0,fon);

fon->FreeImage();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::MStatic(int a,int b) //вивід монстра

{

Canvas->Draw(a,b,monster);

monster->FreeImage();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Artf(int xart,int yart) //вивід артефакту на форму

{

Canvas->Draw(xart,yart,imgart);

imgart->FreeImage();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Life(int xl,int yl) //малювання жизнєй рендомних

{

Canvas->Draw(xl,yl,imglife);

imglife->FreeImage();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{

switch(Key) //визначення натискання клавіші та перемальовка зображення

{

case VK_DOWN: if(Hero1.get_y()<=480)

Hero1.set_y(10);

break;

case VK_UP: if(0<Hero1.get_y())

Hero1.set_y(-10);

break;

case VK_LEFT: if(0<Hero1.get_x())

Hero1.set_x(-10);

break;

case VK_RIGHT: if(Hero1.get_x()<=760)

Hero1.set_x(10);

break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

int w;

/*time_t t; // используется ГВЧ

srand((unsigned) time(&t)); // ініціалізація ГВЧ */

srand(time(0));

for(int i=0;i<nmonster;i++)

{

w=rand()%5;

switch(w) //визначення напрямку руху монстра

{

case 1:

for(int k=0;k<1;k++){

if(mas[i].get_b()<=460)

{

mas[i].set_b(10);

}

else break;

}

break;

case 2:

for(int k=0;k<1;k++){

if(0<mas[i].get_b())

{

mas[i].set_b(-10);

}

else break;

}

break;

case 3:

for(int k=0;k<1;k++){

if(0<mas[i].get_a())

{

mas[i].set_a(-10);

}

else break;

}

break;

case 4:

for(int k=0;k<1;k++){

if(mas[i].get_a()<=730)

{

mas[i].set_a(10);

}

else break;

}

break;

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer2Timer(TObject *Sender)

{

//Form1->Repaint();

Fon();

for(int i=0;i<nart;i++)

{

if(masart[i].get_flag()==1)

Artf(masart[i].get_xart(),masart[i].get_yart());

}

for(int i=0;i<nart;i++)

{

if(maslife[i].get_flagl()==1)

Life(maslife[i].get_xl(),maslife[i].get_yl());

}

Hero(Hero1.get_x(),Hero1.get_y());

for(int i=0;i<nmonster;i++)

{

MStatic(mas[i].get_a(),mas[i].get_b());

}

bool f; //визначення колізії героя і монстрів

for(int i=0;i<nmonster;i++){

f=(((mas[i].get_a()>=Hero1.get_x())&&(mas[i].get_a()<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=mas[i].get_b())&&(mas[i].get_b()<=(Hero1.get_y()+30))));

f=f||((((mas[i].get_a()+60)>=Hero1.get_x())&&((mas[i].get_a()+60)<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=(mas[i].get_b()+50))&&((mas[i].get_b()+50)<=(Hero1.get_y()+30))));

f=f||((((mas[i].get_a()+60)>=Hero1.get_x())&&((mas[i].get_a()+60)<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=mas[i].get_b())&&(mas[i].get_b()<=(Hero1.get_y()+30))));

f=f||(((mas[i].get_a()>=Hero1.get_x())&&(mas[i].get_a()<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=(mas[i].get_b()+50))&&((mas[i].get_b()+50)<=(Hero1.get_y()+30))));

if(f)

{

Sleep(1000);

Hero1.set_hero(100,100);

Hero1.set_nlife(-1);

if(Hero1.get_nlife()==-1){

Timer1->Enabled=false;

Timer2->Enabled=false;

ShowMessage("Ви програли!");

Hero1.set_nlife(1);}

}

}

bool l; //визначення колізії героя і артефактів

for(int i=0;i<nart;i++){

l=(((masart[i].get_xart()>=Hero1.get_x())&&(masart[i].get_xart()<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=masart[i].get_yart())&&(masart[i].get_yart()<=(Hero1.get_y()+30))));

l=l||((((masart[i].get_xart()+30)>=Hero1.get_x())&&((masart[i].get_xart()+30)<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=(masart[i].get_yart()+22))&&((masart[i].get_yart()+22)<=(Hero1.get_y()+30))));

l=l||((((masart[i].get_xart()+30)>=Hero1.get_x())&&((masart[i].get_xart()+30)<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=masart[i].get_yart())&&(masart[i].get_yart()<=(Hero1.get_y()+30))));

l=l||(((masart[i].get_xart()>=Hero1.get_x())&&(masart[i].get_xart()<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=(masart[i].get_yart()+22))&&((masart[i].get_yart()+22)<=(Hero1.get_y()+30))));

if(l)

{

masart[i].set_flag(0);

}

}

bool u=0;

for(int i=0;i<nart;i++)

u=u||masart[i].get_flag();

if(u==0)

{

Timer1->Enabled=false;

Timer2->Enabled=false;

ShowMessage("Ви виграли!");

}

bool g; //визначення колізії героя і життів

for(int i=0;i<nliferand;i++){

g=(((maslife[i].get_xl()>=Hero1.get_x())&&(maslife[i].get_xl()<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=maslife[i].get_yl())&&(maslife[i].get_yl()<=(Hero1.get_y()+30))));

g=g||((((maslife[i].get_xl()+30)>=Hero1.get_x())&&((maslife[i].get_xl()+30)<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=(maslife[i].get_yl()+22))&&((maslife[i].get_yl()+22)<=(Hero1.get_y()+30))));

g=g||((((maslife[i].get_xl()+30)>=Hero1.get_x())&&((maslife[i].get_xl()+30)<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=maslife[i].get_yl())&&(maslife[i].get_yl()<=(Hero1.get_y()+30))));

g=g||(((maslife[i].get_xl()>=Hero1.get_x())&&(maslife[i].get_xl()<=(Hero1.get_x()+25)))&&((Hero1.get_y()<=(maslife[i].get_yl()+22))&&((maslife[i].get_yl()+22)<=(Hero1.get_y()+30))));

if(g)

{

Hero1.set_nlife(1);

maslife[i].set_flagl(0);

maslife[i].set_ko(570,830);

}

}

kilkart=0;

for(int i=0;i<nart;i++)

{

if(masart[i].get_flag()==0)

kilkart++;

}

StatusBar1->Panels->Items[0]->Text="Зібрано: "+IntToStr(kilkart);

StatusBar1->Panels->Items[1]->Text="Кількість життів:"+IntToStr(Hero1.get_nlife());

}

//--------------------------------------------------------------------------

void __fastcall TForm1::N1Click(TObject *Sender)

{

ShellExecute(0,0,"FinalFantasy.exe",0,0,0);

Close();

//Form1->FormActivate(Sender) ;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)

{

Close();

}