import javax.swing.*; import java.awt.*; import java.util.Random; public class DrawingShip extends JPanel { protected EntityShip Ship; public IAdditionalDrawingObject Deck; public void SetEnum() { Random r = new Random(); int numbEnum = r.nextInt(1, 4); Deck.SetAddEnum(numbEnum); } public void SetFormEnum() { Random r = new Random(); int numbEnum = r.nextInt(1, 4); if (numbEnum == 1) { Deck = new DrawingDeck(); } if (numbEnum == 2) { Deck = new DrawingTrapezoidDeck(); } if (numbEnum == 3) { Deck=new DrawingTriangleDeck(); } } public EntityShip GetShip() { return Ship; } protected float _startPosX; protected float _startPosY; private Integer _pictureWidth = null; private Integer _pictureHeight = null; private int _shipWidth = 100; private int _shipHeight = 60; public DrawingShip(int speed, float weight, Color bodycolor) { Ship = new EntityShip(speed, weight, bodycolor); SetFormEnum(); SetEnum(); } public DrawingShip(int speed,float weight,Color bodyColor,int shipWidth,int shipHeight) { this(speed,weight,bodyColor); _shipWidth = shipWidth; _shipHeight = shipHeight; } public void SetPosition(int x, int y, int width, int height) { if (x < 0 || y < 0) { return; } if (x + _shipWidth > width || y + _shipHeight > height) { return; } _startPosX = x; _startPosY = y; _pictureWidth = width; _pictureHeight = height; } public void MoveTransport(Direction direction) { if (_pictureWidth == null || _pictureHeight == null) { return; } switch (direction) { case Right: if (_startPosX + _shipWidth + Ship.GetStep() < _pictureWidth) { _startPosX += Ship.GetStep(); } break; case Left: if (_startPosX - Ship.GetStep() > 0) { _startPosX -= Ship.GetStep(); } break; case Up: if (_startPosY - Ship.GetStep() > 0) { _startPosY -= Ship.GetStep(); } break; case Down: if (_startPosY + _shipHeight + Ship.GetStep() < _pictureHeight) { _startPosY += Ship.GetStep(); } break; } } public void DrawTransport(Graphics g) { if (_startPosX < 0 || _startPosY < 0 || _pictureWidth == null || _pictureHeight == null) { return; } if (GetShip() == null) { return; } Graphics2D g2d = (Graphics2D) g; g2d.setPaint(Ship.GetBodyColor()); int xValues[]={(int) _startPosX,(int) _startPosX + 100,(int) _startPosX + 80,(int) _startPosX + 20}; int yValues[]={(int) _startPosY + 30,(int) _startPosY + 30,(int) _startPosY + 60,(int) _startPosY + 60}; g2d.fillPolygon(xValues,yValues,4); g2d.setPaint(Color.BLACK); g2d.drawPolygon(xValues,yValues,4); Deck.DrawDeck(Ship.GetBodyColor(), g, _startPosX, _startPosY); } public void ChangeBorders(int width, int height) { _pictureWidth = width; _pictureHeight = height; if (_pictureWidth <= _shipWidth || _pictureHeight <= _shipHeight) { _pictureWidth = null; _pictureHeight = null; return; } if (_startPosX + _shipWidth > _pictureWidth) { _startPosX = _pictureWidth - _shipWidth; } if (_startPosY + _shipHeight > _pictureHeight) { _startPosY = _pictureHeight - _shipHeight; } } public float[] GetCurrentPosition() { float[] position = new float[4]; position[0] = _startPosX; position[1] = _startPosY; position[2] = _startPosX + _shipWidth; position[3] = _startPosY + _shipHeight; return position; } }