Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая ТП Францев Артем БСТ1801.docx
Скачиваний:
62
Добавлен:
12.03.2022
Размер:
1.98 Mб
Скачать

4.2 Класс Fisherboat

ref class Fisherboat : public Fisher {

public:

Fisherboat(Rain^ rain) {

worktime = 60 * TICKS_PERMIN * FMAN_WORKHOURS;

state = 4;

lvl = 1;

xPos = 250 + rand() % 300;

yPos = 135;

xPosPtr = PTR_XPOS;

fishCount = 0;

catching = 1;

EventStopWork += gcnew Fisher::Handler(this, &Fisher::OnWorkStop);

rain->EventRainStart += gcnew Rain::Handler(this, &Fisher::OnWorkStop);

};

~Fisherboat() {};

virtual void Move() override {

xPos += rand() % 3 - 1;

yPos += rand() % 3 - 1;

worktime -= 1;

}

property int yPos {

int get() { return _yPos; }

void set(int value) {

_yPos = value;

if (_yPos > 140) _yPos = 140;

else if (_yPos < 130) _yPos = 130;

}

}

property int xPos {

int get() { return _xPos; }

void set(int value) {

_xPos = value;

if (_xPos > 550) _xPos = 550;

else if (_xPos < 250) _xPos = 250;

}

}

};

4.3 Класс Fish

ref class Fish

{

public:

delegate void DeleteHandler(Object^ sender);

event DeleteHandler^ EventDeleteObject;

delegate void Handler();

event Handler^ EventFishCatched;

Fish() {};

Fish(Rain^ rain, System::Collections::Generic::List<Fisher^>^ fishers) {

power = rand() % 100;

if (_power > 0) power -= rand() % _power;

xPos = rand() % 200;

yPos = 180 + (level - 1) * 42 + rand() % 63;

state = 1 + rand() % 2;

_downY = -1;

EventFishCatched += gcnew Fish::Handler(this, &Fish::Catched);

rain->EventRainStart += gcnew Rain::Handler(this, &Fish::OnDownMove);

for (int i = 0; i < fishers->Count; i++)

EventFishCatched += gcnew Fish::Handler(fishers[i], &Fisher::Catch);

};

~Fish() {};

virtual void OnDownMove() {

_downY = 3;

}

void Catched() {

EventDeleteObject(this);

}

void Move() {

xPos += speed;

yPos += rand() % 3 + _downY;

}

virtual void SetPropertiesByPower(int power) {

level = 1 + power / 25;

weight = (power + 1) * 100 + rand() % 500;

speed = 10 - (power / 10);

}

property int xPos {

int get() { return _xPos; }

void set(int value) {

_xPos = value;

if (_xPos >= SCREEN_WIDTH) EventDeleteObject(this);

int cdelt = PTR_XPOS - _xPos;

if ((cdelt > 0) && (cdelt < 10) && ((1 + rand() % 100) >= (100 - CATCH_PROBABILITY)))

EventFishCatched();

}

}

property int yPos {

int get() { return _yPos; }

void set(int value) {

_yPos = value;

if (_yPos >= SCREEN_HEIGHT - 20)

_yPos = SCREEN_HEIGHT - 20 - rand() % _speed;

}

}

property int state {

int get() {

_state += 1;

if (_state > 2) _state = 1;

return _state;

}

void set(int value) {

_state = value;

}

}

property int power {

int get() { return _power; }

void set(int value) {

_power = value;

SetPropertiesByPower(_power);

}

}

property int level {

int get() { return _level; }

void set(int value) { _level = value; }

}

property int weight {

int get() { return _weight; }

void set(int value) { _weight = value; }

}

property int speed {

int get() { return _speed; }

void set(int value) { _speed = value; }

}

protected:

int _xPos;

int _yPos;

int _speed;

int _downY;

int _power;

int _state;

int _level;

int _weight;

};