package ProjectElectricLocomotive; import java.awt.*; public class LocomotiveGenericCollection<T extends DrawingLocomotive,U extends IMoveableObject> { //ширина/высота окна private final int _pictureWidth; private final int _pictureHeight; //ширина/высота занимаемого места private final int _placeSizeWidth = 150; private final int _placeSizeHeight = 50; /// Набор объектов private final SetGeneric<T> _collection; public LocomotiveGenericCollection(int picWidth, int picHeight) { int width = picWidth / _placeSizeWidth; int height = picHeight / _placeSizeHeight; _pictureWidth = picWidth; _pictureHeight = picHeight; _collection = new SetGeneric<T>(width*height); } public Iterable<T> GetLocomotives(){ return _collection.GetEnumerator(); } /// Перегрузка оператора сложения //да емае, почему в яве все по-другому?... public int AddOverload(T obj){ if(obj == null){ return -1; } return _collection.Insert(obj); } public T SubOverload(int pos) { T loco = _collection.Get(pos); if (loco != null) { _collection.Remove(pos); } else{ throw new LocoNotFoundException(pos); } return loco; } // получение объекта imoveableObj public U GetU(int pos) { return (U)_collection.Get(pos).GetMoveableObject(); } /// Вывод всего набора объектов public void ShowLocomotives(Graphics gr) { DrawBackground(gr); DrawObjects(gr); } private void DrawBackground(Graphics g) { Color blackColor = Color.BLACK; g.setColor(blackColor); 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(Graphics g) { int HeightObjCount = _pictureHeight / _placeSizeHeight; int i = 0; for (var obj : _collection.GetEnumerator()) { if (obj != null) { obj.SetPosition( (int)(i / HeightObjCount * _placeSizeWidth), (HeightObjCount - 1) * _placeSizeHeight - (int)(i % HeightObjCount * _placeSizeHeight) ); obj.DrawTransport(g); } i++; } } public void clear() { _collection.clear(); } }