3.Програмна частина
3.1 Розробка інтерфейсу
Інтерфейс користувача промальовується слідуючим чином: спочатку в вікні програми з’являється кнопка «Розпочати». По команді початку динамічно розміщуються об’єкти. Для розрахунку положення об’єктів використовувались наступні формули:
- по вертикалі:y=i*Height
- по горизонталі, якщо і<5то х=0, інакше х=200.
Де Height – висота одного об’єкту.
Потім динамічно промальовується об’єкт їжа. По закінченню їжі програма завершує свою роботу.
Рисунок 3.1 - Інтерфейс працюючої програми
3.2 Лістинг коду:
*.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TTimer *Timer1;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Timer1Timer(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
class Donkey //клас опису осла
{TPoint cp; //змінна координат
int eattacts; //змінна тактів їжі
public:
void eat();//функція поїдання
int check(){return eattacts;} //функція перевірки голоду
void set_cp(int a,int b){cp=Point(a,b);} //встановлення координат
TPoint ret_cp(){return cp;} //повернення координат
Graphics::TBitmap *dnky; //одне з зображень
Graphics::TBitmap *dnky2; //інше зображення
};
class Hey//клас опису сіна
{TPoint cp; //координати
public:
void draw();//функція промальовки
void set_cp(int a,int b){cp=Point(a,b);} //встановлення координат
TPoint ret_cp(){return cp;} //повернення координат
Graphics::TBitmap *hey; //зображення сіна
};
class field//клас опису поля
{Donkey D[10] ; //змінна об’єктів-ослів
Hey H[5]; //сіно
public:
void init();//функція ініціалізації
void tact();//функція одного такту
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
*.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int k=0;
int c=100;
field *F;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{F=new field;
}
//---------------------------------------------------------------------------
void Donkey::eat()
{ eattacts=4;}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void Hey::draw()
{Form1->Canvas->Draw(cp.x,cp.y,hey);
}
//---------------------------------------------------------------------------
void field::init()
{for(int i=0;i<10;++i)
{ D[i].dnky=new Graphics::TBitmap();
D[i].dnky2=new Graphics::TBitmap();
D[i].dnky2->LoadFromFile("4.bmp");
int a,b;
if(i<5)
{a=0;
b=100*i;
D[i].dnky->LoadFromFile("1.bmp");}
else
{a=246;
b=(i-5)*100;
D[i].dnky->LoadFromFile("3.bmp");}
D[i].set_cp(a,b);
Form1->Canvas->Draw(D[i].ret_cp().x,D[i].ret_cp().y,F->D[i].dnky);
D[i].eat();
}
for(int i=0;i<5;++i)
{ H[i].hey=new Graphics::TBitmap();
H[i].hey->LoadFromFile("2.bmp");
}
}
//---------------------------------------------------------------------------
void field::tact()
{Form1->Canvas->Pen->Color=clWhite;
Form1->Canvas->Brush->Color=clWhite;
Form1->Canvas->Brush->Style=bsSolid;
Form1->Canvas->Rectangle(115,0,245,500);
switch(k)
{case 1:{H[0].set_cp(115,50);H[0].draw();
H[1].set_cp(115,150);H[1].draw();
H[2].set_cp(115,250);H[2].draw();c-=3;} break;
case 3:{H[0].set_cp(115,350);H[0].draw();
H[1].set_cp(115,450);H[1].draw(); Form1->Label2->Caption="2.5";c-=2;} break;
case 2: {H[0].set_cp(195,50);H[0].draw();
H[1].set_cp(195,150);H[1].draw();
H[2].set_cp(195,250);H[2].draw();c-=3;} break;
case 0: {H[0].set_cp(195,350);H[0].draw();
H[1].set_cp(195,450);H[1].draw();Form1->Label2->Caption="3";c-=2;}break;
}
Form1->Label4->Caption=IntToStr(c);
if(!c)
{Form1->Timer1->Enabled=false;
ShowMessage("Еда закончилась!");
}
k++;
if(k==4)
k=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ Button1->Visible=false;
Timer1->Enabled=true;
Label2->Visible=true;
Label4->Visible=true;
F->init();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
F->tact();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int k=0;
int c=100;
field *F;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{F=new field; //створення нового екземпляру поля
}
//---------------------------------------------------------------------------
void Donkey::eat()//кормління осла
{ eattacts=4;}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void Hey::draw()//промальовка сіна
{Form1->Canvas->Draw(cp.x,cp.y,hey);
}
//---------------------------------------------------------------------------
void field::init()//ініціалізація
{for(int i=0;i<10;++i)
{ D[i].dnky=new Graphics::TBitmap();
D[i].dnky2=new Graphics::TBitmap();
D[i].dnky2->LoadFromFile("4.bmp");
int a,b;
if(i<5)
{a=0;
b=100*i;
D[i].dnky->LoadFromFile("1.bmp");}
else
{a=246;
b=(i-5)*100;
D[i].dnky->LoadFromFile("3.bmp");}
D[i].set_cp(a,b);
Form1->Canvas->Draw(D[i].ret_cp().x,D[i].ret_cp().y,F->D[i].dnky);
D[i].eat();
}
for(int i=0;i<5;++i)
{ H[i].hey=new Graphics::TBitmap();
H[i].hey->LoadFromFile("2.bmp");
}
}
//---------------------------------------------------------------------------
void field::tact()// дії за один такт
{Form1->Canvas->Pen->Color=clWhite;
Form1->Canvas->Brush->Color=clWhite;
Form1->Canvas->Brush->Style=bsSolid;
Form1->Canvas->Rectangle(115,0,245,500);
switch(k)
{case 1:{H[0].set_cp(115,50);H[0].draw();
H[1].set_cp(115,150);H[1].draw();
H[2].set_cp(115,250);H[2].draw();c-=3;} break;
case 3:{H[0].set_cp(115,350);H[0].draw();
H[1].set_cp(115,450);H[1].draw(); Form1->Label2->Caption="2.5";c-=2;} break;
case 2: {H[0].set_cp(195,50);H[0].draw();
H[1].set_cp(195,150);H[1].draw();
H[2].set_cp(195,250);H[2].draw();c-=3;} break;
case 0: {H[0].set_cp(195,350);H[0].draw();
H[1].set_cp(195,450);H[1].draw();Form1->Label2->Caption="3";c-=2;}break;
}
Form1->Label4->Caption=IntToStr(c);
if(!c)
{Form1->Timer1->Enabled=false;
ShowMessage("Еда закончилась!");
}
k++;
if(k==4)
k=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
// функція при натиснені на кнопку
{ Button1->Visible=false;
Timer1->Enabled=true;
Label2->Visible=true;
Label4->Visible=true;
F->init();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
F->tact();// таут по таймеру
}
//---------------------------------------------------------------------------