diff --git a/Direction.java b/Direction.java new file mode 100644 index 0000000..4146335 --- /dev/null +++ b/Direction.java @@ -0,0 +1,3 @@ +public enum Direction { + Up, Down, Left, Right; +} diff --git a/DrawingContainerShip.java b/DrawingContainerShip.java new file mode 100644 index 0000000..129c290 --- /dev/null +++ b/DrawingContainerShip.java @@ -0,0 +1,130 @@ +import java.awt.*; + +public class DrawingContainerShip { + public EntityContainerShip EntityContainerShip; + private int _pictureWidth; + private int _pictureHeight; + private int _startPosX; + private int _startPosY; + private int _shipWidth = 110; + private int _shipHeight = 65; + private DrawingDecks drawingDecks; + public boolean Init(int speed, double weight, Color bodyColor, Color + additionalColor, boolean crane, boolean container, int deck, int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + if (_pictureWidth < _shipWidth || _pictureHeight < _shipHeight) + { + return false; + } + EntityContainerShip = new EntityContainerShip(); + EntityContainerShip.Init(speed, weight, bodyColor, additionalColor, + crane, container, deck); + drawingDecks = new DrawingDecks(); + drawingDecks.setNumDecks(deck); + return true; + } + public void SetPosition(int x, int y) + { + _startPosX = Math.min(x, _pictureWidth - _shipWidth); + _startPosY = Math.min(y, _pictureHeight - _shipHeight); + } + public void MoveTransport(Direction direction) + { + if (EntityContainerShip == null) + { + return; + } + switch (direction) + { + case Left: + if (_startPosX - EntityContainerShip.Step > 0) + { + _startPosX -= (int)EntityContainerShip.Step; + } + break; + + case Up: + if (_startPosY - EntityContainerShip.Step > 0) + { + _startPosY -= (int)EntityContainerShip.Step; + } + break; + + case Right: + + if (_startPosX + EntityContainerShip.Step + _shipWidth < _pictureWidth) + { + _startPosX += (int)EntityContainerShip.Step; + } + break; + + case Down: + + if (_startPosY + EntityContainerShip.Step + _shipHeight< _pictureHeight) + { + _startPosY += (int)EntityContainerShip.Step; + } + break; + } + } + public void DrawShip(Graphics2D g) + { + if (EntityContainerShip == null) + { + return; + } + //Pen pen = new Pen(Color.Black); + //Brush adbrush = new SolidBrush(EntityContainerShip.AdditionalColor); + //Brush brBlue = new SolidBrush(Color.Blue); + g.setPaint(Color.BLUE); + // заполнение борта + int x[] = {_startPosX+ 20, _startPosX+40, _startPosX+110, _startPosX+130, _startPosX+ 20}; + int y[] = {_startPosY+65,_startPosY+85, _startPosY+85, _startPosY+65, _startPosY+65}; + g.fillPolygon(x, y, 5); + + //борт корабля контур + g.setPaint(Color.BLACK); + int _x[] = {_startPosX+ 20, _startPosX+40, _startPosX+110, _startPosX+130, _startPosX+ 20}; + int _y[] = {_startPosY+65,_startPosY+85, _startPosY+85, _startPosY+65, _startPosY+65}; + g.drawPolyline(_x, _y, 5); + //рисунок на борту + g.drawLine(_startPosX + 43, _startPosY + 80, _startPosX + 47, _startPosY + 80); + g.drawLine(_startPosX + 45, _startPosY + 70, _startPosX + 45, _startPosY + 80); + g.drawLine(_startPosX + 40, _startPosY + 75, _startPosX + 50, _startPosY + 75); + + //контейнеры + if (EntityContainerShip.Conteiners) + { + g.setPaint(EntityContainerShip.AdditionalColor); + g.fillRect(_startPosX + 50, _startPosY + 55, 35, 10); + g.fillRect(_startPosX + 85, _startPosY + 55, 20, 10); + g.fillRect(_startPosX + 105, _startPosY + 50, 15, 15); + g.fillRect(_startPosX + 50, _startPosY + 45, 15, 10); + g.fillRect(_startPosX + 65, _startPosY + 45, 55, 5); + g.fillRect(_startPosX + 65, _startPosY + 50, 40, 5); + g.setPaint(Color.BLACK); + g.drawRect(_startPosX + 50, _startPosY + 55, 35, 10); + g.drawRect(_startPosX + 85, _startPosY + 55, 20, 10); + g.drawRect(_startPosX + 105, _startPosY + 50, 15, 15); + g.drawRect(_startPosX + 50, _startPosY + 45, 15, 10); + g.drawRect(_startPosX + 65, _startPosY + 45, 55, 5); + g.drawRect(_startPosX + 65, _startPosY + 50, 40, 5); + } + //кран + if (EntityContainerShip.Crane) + { + g.setPaint(EntityContainerShip.AdditionalColor); + g.fillRect(_startPosX + 43, _startPosY+20, 5, 45); + g.fillRect(_startPosX + 47, _startPosY + 30, 20, 3); + g.setPaint(Color.BLACK); + g.drawRect(_startPosX + 43, _startPosY+20, 5, 45); + g.drawRect(_startPosX + 47, _startPosY + 30, 20, 3); + g.drawLine(_startPosX + 47, _startPosY+20, _startPosX + 67, _startPosY + 30); + g.drawLine(_startPosX + 67, _startPosY + 33, _startPosX + 67, _startPosY + 45); + } + drawingDecks.DrawDeck(_startPosX, _startPosY, g); + } + +} diff --git a/DrawingDecks.java b/DrawingDecks.java new file mode 100644 index 0000000..7d33080 --- /dev/null +++ b/DrawingDecks.java @@ -0,0 +1,39 @@ +import java.awt.*; + +public class DrawingDecks { + private NumberOfDecks numDecks; + public NumberOfDecks getProperty(){ + return numDecks; + } + public void setNumDecks(int nDecks){ + switch(nDecks){ + case 1: + numDecks = NumberOfDecks.Deck_1; + break; + case 2: + numDecks = NumberOfDecks.Deck_2; + break; + case 3: + numDecks = NumberOfDecks.Deck_3; + break; + default: + numDecks = NumberOfDecks.Deck_1; + System.out.println("Что-то пошло не так, количество палуб неверное" + Integer.toString(nDecks) + "сделаем вид, будто она одна"); + break; + } + } + public void DrawDeck(int _startPosX, int _startPosY, Graphics2D g){ + if(numDecks == NumberOfDecks.Deck_1){ + + } + if(numDecks == NumberOfDecks.Deck_2){ + g.setPaint(Color.BLACK); + g.drawLine(_startPosX + 120, _startPosY + 75, _startPosX+ 55, _startPosY + 75); + } + if(numDecks == NumberOfDecks.Deck_3){ + g.setPaint(Color.BLACK); + g.drawLine(_startPosX + 120, _startPosY + 75, _startPosX+ 55, _startPosY + 75); + g.drawLine(_startPosX + 125, _startPosY + 70, _startPosX+ 50, _startPosY + 70); + } + } +} diff --git a/EntityContainerShip.java b/EntityContainerShip.java new file mode 100644 index 0000000..fb2d513 --- /dev/null +++ b/EntityContainerShip.java @@ -0,0 +1,25 @@ +import java.awt.*; + + +public class EntityContainerShip { + public int Speed; + public double Weight; + public Color BodyColor; + public Color AdditionalColor; + public boolean Crane; + public boolean Conteiners; + public int Deck; + public double Step; + public void Init(int speed, double weight, Color bodyColor, Color +additionalColor, boolean crane, boolean containers, int deck) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + Crane = crane; + Conteiners = containers; + Deck = deck; + Step = (double)Speed * 100 / Weight; + } +} diff --git a/Form1.java b/Form1.java new file mode 100644 index 0000000..86ee3e8 --- /dev/null +++ b/Form1.java @@ -0,0 +1,121 @@ +import java.awt.*; +import java.util.*; +import javax.swing.*; +import java.awt.event.*; +public class Form1 { + private DrawingContainerShip _drawingShip; + Canvas canv; + + public void Draw(){ + canv.repaint(); + } + public Form1(){ + JFrame w=new JFrame ("ContainerShip"); + JButton buttonCreate = new JButton("создать"); + JButton up = new JButton(); + up.setBorderPainted(false); + up.setFocusPainted(false); + up.setContentAreaFilled(false); + up.setName("up"); + up.setIcon(new ImageIcon("photo11.png")); + JButton down = new JButton(); + down.setBorderPainted(false); + down.setFocusPainted(false); + down.setContentAreaFilled(false); + down.setName("down"); + down.setIcon(new ImageIcon("photo33.png")); + JButton left = new JButton(); + left.setBorderPainted(false); + left.setFocusPainted(false); + left.setContentAreaFilled(false); + left.setName("left"); + left.setIcon(new ImageIcon("photo44.png")); + JButton right = new JButton(); + right.setBorderPainted(false); + right.setFocusPainted(false); + right.setContentAreaFilled(false); + right.setName("right"); + right.setIcon(new ImageIcon("photo22.png")); + buttonCreate.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e){ + System.out.println(e.getActionCommand()); + Random random = new Random(); + _drawingShip = new DrawingContainerShip(); + /*_drawingShip.Init(random.nextInt(100, 300), + random.nextInt(1000, 3000), + new Color(random.nextInt(0, 256), random.nextInt(0, 256),random.nextInt(0, 256)), + new Color(random.nextInt(0, 256), random.nextInt(0, 256),random.nextInt(0, 256)), + random.nextBoolean(0, 2),random.nextBoolean(0, 2),1000, 560);*/ + _drawingShip.Init(random.nextInt(100,300), + random.nextInt(1000,3000), + new Color(random.nextInt(0,256), random.nextInt(0,256), random.nextInt(0,256)), + new Color(random.nextInt(0,256), random.nextInt(0,256), random.nextInt(0,256)), + random.nextBoolean(), random.nextBoolean(), random.nextInt(1,4), 960, 560); + _drawingShip.SetPosition(random.nextInt(10, 100),random.nextInt(10, 100)); + canv._drawingShip = _drawingShip; + Draw(); + } + } + ); + ActionListener actioListener = new ActionListener() { + public void actionPerformed(ActionEvent e){ + System.out.println(((JButton)(e.getSource())).getName()); + if (_drawingShip == null) + { + return; + } + switch(((JButton)(e.getSource())).getName()){ + case "up": + _drawingShip.MoveTransport(Direction.Up); + break; + case "down": + _drawingShip.MoveTransport(Direction.Down); + break; + case "left": + _drawingShip.MoveTransport(Direction.Left); + break; + case "right": + _drawingShip.MoveTransport(Direction.Right); + break; + } + Draw(); + } + }; + up.addActionListener(actioListener); + down.addActionListener(actioListener); + left.addActionListener(actioListener); + right.addActionListener(actioListener); + w.setSize (1000, 600); + w.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); + w.setLayout(null); + canv = new Canvas(); + canv.setBounds(0, 0, 1000, 600); + buttonCreate.setBounds(2, 540, 100, 20); + up.setBounds(900, 480, 45, 45); + down.setBounds(900, 520, 45, 45); + left.setBounds(860, 520, 45, 45); + right.setBounds(940, 520, 45, 45); + w.add(canv); + w.add(buttonCreate); + w.add(up); + w.add(down); + w.add(left); + w.add(right); + w.setVisible (true); + } +} +class Canvas extends JComponent{ + public DrawingContainerShip _drawingShip; + public Canvas(){ + } + public void paintComponent (Graphics g){ + if (_drawingShip == null){ + return; + } + super.paintComponents (g) ; + Graphics2D g2d = (Graphics2D)g; + _drawingShip.DrawShip(g2d); + super.repaint(); + } +} diff --git a/Main.java b/Main.java new file mode 100644 index 0000000..6402b78 --- /dev/null +++ b/Main.java @@ -0,0 +1,5 @@ +public class Main { + public static void main(String[] args){ + Form1 form1 = new Form1(); + } +} diff --git a/NumberOfDecks.java b/NumberOfDecks.java new file mode 100644 index 0000000..04cd0f3 --- /dev/null +++ b/NumberOfDecks.java @@ -0,0 +1,3 @@ +public enum NumberOfDecks { + Deck_1, Deck_2, Deck_3; +} diff --git a/photo11.png b/photo11.png new file mode 100644 index 0000000..823c1fc Binary files /dev/null and b/photo11.png differ diff --git a/photo22.png b/photo22.png new file mode 100644 index 0000000..c57351a Binary files /dev/null and b/photo22.png differ diff --git a/photo33.png b/photo33.png new file mode 100644 index 0000000..0de2bde Binary files /dev/null and b/photo33.png differ diff --git a/photo44.png b/photo44.png new file mode 100644 index 0000000..80f70c6 Binary files /dev/null and b/photo44.png differ