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

3.2 Описание реализации основных классов и их методов

На данном этапе ООА происходит анализ проектируемой системы в терминах объектов и атрибутов.

В игре имеется базовый класс Unit.

public class Unit:IUnit

{

protected int unitOwner;

protected int price;

protected int hitpoint;

protected int cellID;

protected Texture2D texture;

public Unit(Texture2D texture,int owner,int price, int hitpoint,int cellID);

public int GetUnitOwner();

public int GetPrice();

public int GetHitpoint();

public void SetUnitCellID(int id);

public int GetUnitCellID();

public int GetTypeUnit();

public void ReduceHitpoint(int hp);

public void DrawUnit(SpriteBatch spriteBatch);

public Texture2D GetTexture();

}

В данном классе у нас есть метод DrawUnit, который производит отрисовку юнита. Имеется поле типа Texture2D для хранения текстуры юнита, имеется переменная для хранения текущего положения (ID клетки). В основном классе так же хранятся количество жизней, и цена юнита.

Далее рассмотрим следующий уровень иерархии — класс Moving.

public class Moving : Unit, IMove

{

protected int moveDistance;

protected int balanceDistance;

protected bool moveFlag;

// Constructor

public Moving(Texture2D texture, int owner, int price, int hitpoint, int cellID, int moveDistance)

:base(texture,owner,price,hitpoint,cellID)

public int GetMoveDistance()

protected void Changes(int number,int index)

protected int MoveStep(int IDCell1, int IDCell2, int balanceDistance,int distance)

public void DrawMoveStep()

public int GetBalanceDistance()

public void SetBalanceDistance(int v)

public bool Move(int IDCell, int number)

}

Класс наследуется от класса Unit . Здесь добавляется методы, которые нужны нам для движения техники. Метод MoveStep определяет возможность перемещения на заданную клетку, и возвращает минимальное количество шагов, за которые необходимо добраться до цели. Метод Move выполняет перемещение юнита на заданную клетку, предварительно выполняя проверку на возможность этого события.

Следующий уровень иерархии – класс Attacker.

public class Attacker:Moving,DefensiveGun,Invader {

private int damageRadius;

private bool recharge;

private int firepower;

public Attacker(Texture2D texture,int owner,

int price, int hitpoint, int damageRadius,

int moveDistance, int firepower, int cellID)

: base(texture, owner, price,

hitpoint, cellID, moveDistance)

public int GetDamageRadius();

public int GetFirepower();

public void ToRecharge(bool recharge) ;

public bool GetRecharge() ;

public void Atack(int IDCell) ;

public bool EnemyDetection(int number) ;

}

В данном классе описываются атакующие способности, которыми будет владеть данный тип юнита (атака, перезарядка, обнаружение врага)

Далее рассмотрим класс Сarrier

public class Carrier:Moving

public Unit[] carrierUnit = new Unit[2];

public Carrier(Texture2D texture,

int owner, int price, int hitpoint,

int cellID, int moveDistance)

: base(texture, owner,

price, hitpoint,

cellID, moveDistance);

public void ToLand(int cellID, int number);

public void ToLoad(int cellID);

}

В этом классе юнит становится способным транспортировать других юнитов класса Attacker. Поэтому он имеет такие методы, которые отвечают за погрузку, выгрузку юнита.

Также имеется класс Player в котором собраны, основные фазы игры.

class Player

{

//поля

//constructor

public Player();

private int PlacementForces(int number, int resources); //Расстановка юнитов

private void CreateUnit(int UnitID, int index, int number); // Создание юнита

public void Disclosure(int number); //Раскрытие сектора

public void Partizan(int number); //Раскрытие партизан

public void Mobilization(int number); //Расстановка дополнительных юнитов

public void DrawDisclosure(int number);

public void DrawMobilization(int number);

public void Battle(int number); //Боевые действия

public bool CheckPartizan(int number); //Проверка на вторжение

public bool CheckPartizan(int number, int i)// Проверка сектора на вторжение

public void DrawBattle(int number);

public void DrawPartizan(int number)

public bool ChechWinner(int number); //Определение победителей

}

В этом классе имеется два метода с одинаковым названием CheckPartizan и с разными параметрами. В данном примере продемонстрирован полиморфизм.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]