Лабораторная работа №1 (990535), страница 4
Текст из файла (страница 4)
fprintf(input, " 1\n");
Message.Result = true;
return;
break;
}
}
break;
}
//Тертья tabl (движение по курсу)
case 3:
{
fprintf(input, "action - tabl 3");
//Номер действия
switch(Message.LParam)
{
//Выход
case 0:
{
Message.Result = true;
Close();
return;
break;
}
//Шаг
case 1:
{
fprintf(input, " %d Step -", int_ID);
if(ShipMas[int_ID]->GetLoad() == 1)
{
//Пассажирский корабль
if(ShipMas[int_ID]->GetMission() == 0)
{
//Зоны 4 и 8
if(ShipMas[int_ID]->GetY() > 95 && ShipMas[int_ID]->GetY() < 245)
{
if(ShipMas[int_ID]->GetDirection() == 2 || ShipMas[int_ID]->GetDirection() == 3)
ShipMas[int_ID]->SetDirection(1);
}
//Зона 5
else if(ShipMas[int_ID]->GetX() <= 155 && ShipMas[int_ID]->GetY() >= 305)
ShipMas[int_ID]->SetDirection(2);
//Зона 1
else if(ShipMas[int_ID]->GetX() >= 276 && ShipMas[int_ID]->GetY() <= 95)
ShipMas[int_ID]->SetDirection(3);
}
//Грузовой корабль
else if(ShipMas[int_ID]->GetMission() == 1)
{
//Зоны 2 и 6
if(ShipMas[int_ID]->GetX() > 125 && ShipMas[int_ID]->GetX() < 216)
{
if(ShipMas[int_ID]->GetDirection() == 0 || ShipMas[int_ID]->GetDirection() == 1)
ShipMas[int_ID]->SetDirection(2);
}
//Зона 3
else if(ShipMas[int_ID]->GetX() < 125 && ShipMas[int_ID]->GetY() <= 125)
ShipMas[int_ID]->SetDirection(0);
//Зона 7
else if(ShipMas[int_ID]->GetX() > 276 && ShipMas[int_ID]->GetY() >= 305)
ShipMas[int_ID]->SetDirection(1);
}
}
ShipMas[int_ID]->__ShpMove(1,1);
ShipMas[int_ID]->SetFlgStep(false);
Repaint();
fprintf(input, " 1\n");
Message.Result = true;
return;
break;
}
}
break;
}
//Четвертая tabl (швартовка)
case 4:
{
fprintf(input, "action - tabl 4");
//Номер действия
switch(Message.LParam)
{
case 0:
{
Close();
return;
break;
}
//Действие 1
case 1:
{
fprintf(input, " %d Dock -", int_ID);
ShipMas[int_ID]->__ShpDock(1, 1, 185, 155, 31, 90);
ShipMas[int_ID]->SetFlgStep(false);
Repaint();
fprintf(input, " 1\n");
Message.Result = true;
break;
}
//Действие 2
case 2:
{
fprintf(input, " %d SetStatusUnload -", int_ID);
ShipMas[int_ID]->SetStatus(2);
fprintf(input, " 1\n");
Message.Result = true;
break;
}
}
break;
}
//Пятая tabl (разгрузка)
case 5:
{
fprintf(input, "action - tabl 5");
//Номер действия
switch(Message.LParam)
{
case 0:
{
Close();
return;
break;
}
//Действие 1
case 1:
{
fprintf(input, " %d Start&CheckTimer -", int_ID);
if(ShipMas[int_ID]->GetMission() == 0)
ShipMas[int_ID]->__ShpUnload(tmrPasUnload);
else if(ShipMas[int_ID]->GetMission() == 1)
ShipMas[int_ID]->__ShpUnload(tmrCargoUnload);
fprintf(input, " 1\n");
Message.Result = true;
return;
break;
}
//Действие 2
case 2:
{
fprintf(input, " %d SetStatusMove -", int_ID);
ShipMas[int_ID]->SetStatus(0);
fprintf(input, " 1\n");
Message.Result = true;
return;
break;
}
//Действие 3
case 3:
{
fprintf(input, " %d SetLoad -", int_ID);
ShipMas[int_ID]->SetLoad(0);
fprintf(input, " 1\n");
Message.Result = true;
return;
break;
}
//Действие 4
case 4:
{
fprintf(input, " %d FreeDock -", int_ID);
if(ShipMas[int_ID]->GetMission() == 0)
{
if(ShipMas[int_ID]->GetY() < 200)
{
bl_PasDock1 = 1;
fprintf(input, " PasDock1");
}
else if(ShipMas[int_ID]->GetY() > 200)
{
bl_PasDock2 = 1;
fprintf(input, " PasDock2");
}
}
else if(ShipMas[int_ID]->GetMission() == 1)
{
if(ShipMas[int_ID]->GetX() < 200)
{
bl_CargoDock1 = 1;
fprintf(input, " CargoDock1");
}
else if(ShipMas[int_ID]->GetX() > 200)
{
bl_CargoDock2 = 1;
fprintf(input, " CargoDock2");
}
}
fprintf(input, " 1\n");
Message.Result = true;
return;
break;
}
//Действие 5
case 5:
{
fprintf(input, " %d TimerError -", int_ID);
MessageBox(NULL, "Ошибка таймера", "Ошибка", 0);
fprintf(input, " 1\n");
Message.Result = true;
return;
break;
}
}
break;
}
}
}
else
TCustomForm::WndProc(Message);
}
-
Класс Ship.
//Класс корабль (наследник от TImage)
class Ship : TImage
{
private:
//Состояние действия корабля (0 - движение, 1 - швартовка, 2 - разгрузка,)
int int_Status;
//Состояние груза корабля (0 - нет груза, 1 - есть груз)
int int_Load;
//Назначение корабля (0 - пассажирский, 1 - грузовой)
int int_Mission;
//Направление движения (0 вниз - , 1 - вверх, 2 - вправо, 3 - влево,)
int int_Direction;
//Координата X
int int_X;
//Координата Y
int int_Y;
//Обработчик события таймер
void __fastcall tmr_TimeTimer(TObject *Sender);
//Флаг
bool flgTmr;
//Флаг хода
bool flgStep;
//Флаг дока
bool flgDock;
public:
//Timer
TTimer* tmr_Time;
//Конструктор
Ship(int int_NewStatus, int int_NewLoad, int int_NewMission, int int_NewDirection, int int_NewCordX, int int_NewCordY, TWinControl* AOwner);
//Функция "Шаг"
int __ShpStep(int int_StepX, int int_StepY);
//Функция "Движение по курсу"
int __ShpMove(int int_StepX, int int_StepY);
//Функция "Швартовка"
int __ShpDock(int int_StepX, int int_StepY, int int_DestinationX, int int_DestinationY, int int_DestinationW, int int_DestinationH);
//Функция "Разгрузка"
int __ShpUnload(int int_Time);
//Функция возвращает состояние действия корабля
int GetStatus();
//Принудительное изменение состояния действия корабля
int SetStatus(int int_NewStatus);
//Функция возвращает состояние груза корабля
int GetLoad();
//Принудительное изменение состояния груза корабля
int SetLoad(int int_NewLoad);
//Функция возвращает назначение корабля
int GetMission();
//Функция возвращает направление движения корабля
int GetDirection();
//Принудительное изменение направления движения корабля
int SetDirection(int int_NewDirection);
//Принудительное изменение родительского объекта
int SetOwner(TWinControl* AOwner);
//Функция возвращает координату X
int GetX();
//Функция возвращает координату Y
int GetY();
//Функция устанаваливает координату X
int SetX(int int_NewX);
//Функция устанаваливает координату Y
int SetY(int int_NewY);
//Функция возвращает флаг хода
bool GetFlgStep();
//Принудительное изменение флага хода
bool SetFlgStep(bool NewFlgStep);
//Функция возвращает флаг дока
bool GetFlgDock();
//Принудительное изменение флага хода
bool SetFlgDock(bool NewFlgDock);
//Функция возвращает флаг таймера
bool GetFlgTmr();
//Принудительное изменение флага таймера
bool SetFlgTmr(bool NewFlgTmr);
};
//Конструктор
Ship :: Ship(int int_NewStatus, int int_NewLoad, int int_NewMission, int int_NewDirection, int int_NewCordX, int int_NewCordY, TWinControl* AOwner) : TImage(AOwner)
{
this->int_Status = int_NewStatus;
this->int_Load = int_NewLoad;
this->int_Mission = int_NewMission;
this->int_Direction = int_NewDirection;
this->Left = int_NewCordX;
this->Top = int_NewCordY;
this->Width = 30;
this->Height = 30;
this->Parent = AOwner;
this->Stretch = true;
this->tmr_Time = new TTimer(this);
this->tmr_Time->Enabled = false;
this->tmr_Time->OnTimer = this->tmr_TimeTimer;
this->flgTmr = false;
this->flgStep = false;
this->flgDock = false;
if(this->int_Mission == 0)
{
this->Picture->LoadFromFile("ArPos3.bmp");
}
else if(this->int_Mission == 1)
{
this->Picture->LoadFromFile("ArPosRed3.bmp");
}
}
//---------------------------------------------------------------------------
//Функция "Шаг"
int Ship :: __ShpStep(int int_StepX, int int_StepY)
{
try
{
if(this->int_Mission == 0)
{
if(int_StepX < 0)
{
//Движение влево
if(int_StepY == 0)
{
this->Picture->LoadFromFile("ArPos1.bmp");
}
//Движение влево и вверх
else if(int_StepY < 0)
{
this->Picture->LoadFromFile("ArPos2.bmp");
}
//Движение влево и вниз
else if(int_StepY > 0)
{
this->Picture->LoadFromFile("ArPos8.bmp");
}
}
else if(int_StepX == 0)
{
//Движение вверх
if(int_StepY < 0)
{
this->Picture->LoadFromFile("ArPos3.bmp");
}
//Движение вниз
else if(int_StepY > 0)
{
this->Picture->LoadFromFile("ArPos7.bmp");
}
}
else if(int_StepX > 0)
{
//Движение вправо
if(int_StepY == 0)
{
this->Picture->LoadFromFile("ArPos5.bmp");
}
//Движение вправо и вверх
else if(int_StepY < 0)
{
this->Picture->LoadFromFile("ArPos4.bmp");
}
//Движение вправо и вниз
else if(int_StepY > 0)
{
this->Picture->LoadFromFile("ArPos6.bmp");
}
}
}
else if(this->int_Mission == 1)
{
if(int_StepX < 0)
{
//Движение влево
if(int_StepY == 0)
{
this->Picture->LoadFromFile("ArPosRed1.bmp");
}
//Движение влево и вверх
else if(int_StepY < 0)
{
this->Picture->LoadFromFile("ArPosRed2.bmp");
}
//Движение влево и вниз
else if(int_StepY > 0)
{
this->Picture->LoadFromFile("ArPosRed8.bmp");
}
}
else if(int_StepX == 0)
{
//Движение вверх
if(int_StepY < 0)
{
this->Picture->LoadFromFile("ArPosRed3.bmp");
}
//Движение вниз
else if(int_StepY > 0)
{
this->Picture->LoadFromFile("ArPosRed7.bmp");
}
}
else if(int_StepX > 0)
{
//Движение вправо
if(int_StepY == 0)
{
this->Picture->LoadFromFile("ArPosRed5.bmp");
}
//Движение вправо и вверх
else if(int_StepY < 0)
{
this->Picture->LoadFromFile("ArPosRed4.bmp");
}
//Движение вправо и вниз
else if(int_StepY > 0)
{
this->Picture->LoadFromFile("ArPosRed6.bmp");
}
}
}
this->Left += int_StepX;
this->Top += int_StepY;
}
catch(...)















