package laba1Loco; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; public class TrainsGenericCollection{ /// /// Ширина окна прорисовки /// private int _pictureWidth; /// /// Высота окна прорисовки /// private int _pictureHeight; /// /// Размер занимаемого объектом места (ширина) /// private int _placeSizeWidth = 210; /// /// Размер занимаемого объектом места (высота) /// private int _placeSizeHeight = 90; /// /// Набор объектов /// private SetGeneric _collection; /// /// Конструктор /// /// /// public TrainsGenericCollection(int picWidth, int picHeight) { int width = picWidth / _placeSizeWidth; int height = picHeight / _placeSizeHeight; _pictureWidth = picWidth; _pictureHeight = picHeight; _collection = new SetGeneric(width * height); } /// /// Перегрузка оператора сложения /// /// /// /// public int Add(T obj) { if (obj == null) { return -1; } return _collection.Insert(obj); } /// /// Перегрузка оператора вычитания /// /// /// /// public T remove(int pos) { T obj = _collection.Get(pos); if (obj != null) { _collection.Remove(pos); } return obj; } /// /// Получение объекта IMoveableObject /// /// /// public U GetU(int pos) { return (U)_collection.Get(pos).GetMoveableObject(); } /// /// Вывод всего набора объектов /// /// public BufferedImage ShowTrains() { BufferedImage bmp = new BufferedImage(_pictureWidth, _pictureHeight, BufferedImage.TYPE_INT_ARGB); Graphics2D g = bmp.createGraphics(); DrawBackground(g); DrawObjects(g); g.dispose(); return bmp; } /// /// Метод отрисовки фона /// /// private void DrawBackground(Graphics2D g) { g.setColor(Color.BLACK); for (int i = 0; i < _pictureWidth / _placeSizeWidth; i++) { for (int j = 0; j < _pictureHeight / _placeSizeHeight + 1; ++j) {//линия рамзетки места g.drawLine( i * _placeSizeWidth, j * _placeSizeHeight, i * _placeSizeWidth + _placeSizeWidth / 2, j * _placeSizeHeight); } g.drawLine( i * _placeSizeWidth, 0, i * _placeSizeWidth, _pictureHeight / _placeSizeHeight * _placeSizeHeight); } } /// /// Метод прорисовки объектов /// /// private void DrawObjects(Graphics2D g) { for (int i = 0; i < _collection.Count(); i++) { T t = _collection.Get(i); if (t != null) { t.SetPosition((i % (_pictureWidth / _placeSizeWidth)) * _placeSizeWidth, (i / (_pictureWidth / _placeSizeWidth)) * _placeSizeHeight); if (t instanceof DrawingLoco) ((DrawingLoco) t).DrawTransport(g); else t.DrawTransport(g); } } } }