- •«Московский технический университет связи и информатики»
- •Курсовая работа
- •1. Постановка задачи 2
- •Постановка задачи
- •Логическая структура программы
- •2.1 Класс рыбы Fish
- •2.3 Класс птицы Bird
- •2.2 Класс рыбака на пирсе Fisher
- •2.4 Класс рыбака на лодке Fisherboat
- •2.5 Класс дождя Rain
- •2.6 Класс внешнего мира GameEnvironment
- •2.7 Главная часть приложения - класс «MyForm»
- •3.7 Класс MyForm
- •Текст программы
- •4.1 Класс Fisher
- •4.2 Класс Fisherboat
- •4.3 Класс Fish
- •4.4 Класс Bird
- •4.5 Класс Rain
- •4.6 Класс GameEnvironment
- •4.7 Класс MyForm
- •Результаты тестирования программы
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;
};