diff --git a/src/Direction.java b/src/Direction.java new file mode 100644 index 0000000..a641b80 --- /dev/null +++ b/src/Direction.java @@ -0,0 +1,6 @@ +public enum Direction { + Up, + Down, + Left, + Right +} diff --git a/src/DrawingOar.java b/src/DrawingOar.java new file mode 100644 index 0000000..5cee1ff --- /dev/null +++ b/src/DrawingOar.java @@ -0,0 +1,71 @@ +import java.awt.*; +import java.util.*; +import javax.swing.*; +import java.awt.event.*; +public class DrawingOar { + private NumOars numOars; + + public NumOars getSomeProperty() { + return numOars; + } + + public void setNumOars(int oars){ + switch(oars){ + case 1: + numOars = NumOars.OneOar; + break; + case 2: + numOars = NumOars.TwoOars; + break; + case 3: + numOars = NumOars.ThreeOars; + break; + default: + numOars = NumOars.OneOar; + System.out.println("Неверное значение"); + break; + } + } + + void Draw(int _startPosX, int _startPosY, Color color, Graphics2D g){ + g.setColor(Color.BLACK); + g.drawLine(_startPosX + 110, _startPosY + 145, _startPosX + 95, _startPosY + 165); + g.setColor(color); + g.fillPolygon(new int[]{_startPosX + 95, _startPosX + 95, _startPosX + 80, _startPosX + 65, _startPosX + 80}, + new int[]{_startPosY + 165, _startPosY + 180, _startPosY + 195, _startPosY + 180, _startPosY + 165}, 5); + g.setColor(Color.BLACK); + g.drawPolygon(new int[]{_startPosX + 95, _startPosX + 95, _startPosX + 80, _startPosX + 65, _startPosX + 80}, + new int[]{_startPosY + 165, _startPosY + 180, _startPosY + 195, _startPosY + 180, _startPosY + 165}, 5); + + if (numOars == NumOars.TwoOars){ + g.setColor(Color.BLACK); + g.drawLine(_startPosX + 78, _startPosY + 145, _startPosX + 63, _startPosY + 165); + g.setColor(color); + g.fillPolygon(new int[]{_startPosX + 63, _startPosX + 63, _startPosX + 48, _startPosX + 33, _startPosX + 48}, + new int[]{_startPosY + 165, _startPosY + 180, _startPosY + 195, _startPosY + 180, _startPosY + 165}, 5); + g.setColor(Color.BLACK); + g.drawPolygon(new int[]{_startPosX + 63, _startPosX + 63, _startPosX + 48, _startPosX + 33, _startPosX + 48}, + new int[]{_startPosY + 165, _startPosY + 180, _startPosY + 195, _startPosY + 180, _startPosY + 165}, 5); + } + + if (numOars == NumOars.ThreeOars){ + g.setColor(Color.BLACK); + g.drawLine(_startPosX + 78, _startPosY + 145, _startPosX + 63, _startPosY + 165); + g.setColor(color); + g.fillPolygon(new int[]{_startPosX + 63, _startPosX + 63, _startPosX + 48, _startPosX + 33, _startPosX + 48}, + new int[]{_startPosY + 165, _startPosY + 180, _startPosY + 195, _startPosY + 180, _startPosY + 165}, 5); + g.setColor(Color.BLACK); + g.drawPolygon(new int[]{_startPosX + 63, _startPosX + 63, _startPosX + 48, _startPosX + 33, _startPosX + 48}, + new int[]{_startPosY + 165, _startPosY + 180, _startPosY + 195, _startPosY + 180, _startPosY + 165}, 5); + + g.setColor(Color.BLACK); + g.drawLine(_startPosX + 46, _startPosY + 145, _startPosX + 31, _startPosY + 165); + g.setColor(color); + g.fillPolygon(new int[]{_startPosX + 31, _startPosX + 31, _startPosX + 16, _startPosX + 1, _startPosX + 16}, + new int[]{_startPosY + 165, _startPosY + 180, _startPosY + 195, _startPosY + 180, _startPosY + 165}, 5); + g.setColor(Color.BLACK); + g.drawPolygon(new int[]{_startPosX + 31, _startPosX + 31, _startPosX + 16, _startPosX + 1, _startPosX + 16}, + new int[]{_startPosY + 165, _startPosY + 180, _startPosY + 195, _startPosY + 180, _startPosY + 165}, 5); + } + } +} diff --git a/src/DrawingSailboat.java b/src/DrawingSailboat.java new file mode 100644 index 0000000..bb794e6 --- /dev/null +++ b/src/DrawingSailboat.java @@ -0,0 +1,126 @@ +import java.awt.*; +import java.util.*; +import javax.swing.*; +import javax.swing.Timer; +import java.awt.event.*; +public class DrawingSailboat { + private DrawingOar drawingOar; + private EntitySailboat EntitySailboat; + private int _pictureWidth; + private int _pictureHeight; + private int _startPosX; + private int _startPosY; + private int _boatWidth = 160; + private int _boatHeight = 195; + public boolean Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean hull, boolean sail, int oarsNum, int width, int height) + { + if (width < _boatWidth || height < _boatHeight) + { + return false; + } + _pictureWidth = width; + _pictureHeight = height; + EntitySailboat = new EntitySailboat(); + EntitySailboat.Init(speed, weight, bodyColor, additionalColor, hull, sail, oarsNum); + drawingOar = new DrawingOar(); + drawingOar.setNumOars(oarsNum); + return true; + } + + public void SetPosition(int x, int y) + { + if (x < 0 || x + _boatWidth > _pictureWidth) + { + x = 0; + } + if (y < 0 || y + _boatHeight > _pictureHeight) + { + y = 0; + } + _startPosX = x; + _startPosY = y; + } + + public void MoveTransport(Direction direction) + { + if (EntitySailboat == null) + { + return; + } + switch (direction) + { + case Left: + if (_startPosX - EntitySailboat.Step > 0) + { + _startPosX -= (int)EntitySailboat.Step; + } + break; + case Up: + if (_startPosY - EntitySailboat.Step > 0) + { + _startPosY -= (int)EntitySailboat.Step; + } + break; + case Right: + if (_startPosX + EntitySailboat.Step + _boatWidth < _pictureWidth) + { + _startPosX += (int)EntitySailboat.Step; + } + break; + case Down: + if (_startPosY + EntitySailboat.Step + _boatHeight < _pictureHeight) + { + _startPosY += (int)EntitySailboat.Step; + } + break; + } + } + + public void DrawTransport(Graphics2D g) + { + if (EntitySailboat == null) + { + return; + } + + g.setColor(EntitySailboat.AdditionalColor); + //усиленный корпус парусника + if (EntitySailboat.Hull) + { + g.fillPolygon(new int[]{_startPosX, _startPosX + 120, _startPosX + 160, _startPosX + 120, _startPosX}, + new int[]{_startPosY + 80, _startPosY + 80, _startPosY + 120, _startPosY + 160, _startPosY + 160}, 5); + g.setColor(Color.BLACK); + g.drawPolygon(new int[]{_startPosX, _startPosX + 120, _startPosX + 160, _startPosX + 120, _startPosX}, + new int[]{_startPosY + 80, _startPosY + 80, _startPosY + 120, _startPosY + 160, _startPosY + 160}, 5); + } + + + //основной корпус парусника + g.setColor(EntitySailboat.BodyColor); + g.fillPolygon(new int[]{_startPosX + 10, _startPosX + 110, _startPosX + 140, _startPosX + 110, _startPosX + 10}, + new int[]{_startPosY + 90, _startPosY + 90, _startPosY + 120, _startPosY + 150, _startPosY + 150}, 5); + g.setColor(Color.BLACK); + g.drawPolygon(new int[]{_startPosX + 10, _startPosX + 110, _startPosX + 140, _startPosX + 110, _startPosX + 10}, + new int[]{_startPosY + 90, _startPosY + 90, _startPosY + 120, _startPosY + 150, _startPosY + 150}, 5); + + g.setColor(Color.green); + g.fillOval(_startPosX + 20, _startPosY + 100, 90, 40); + g.setColor(Color.BLACK); + g.drawOval(_startPosX + 20, _startPosY + 100, 90, 40); + + //парус + if (EntitySailboat.Sail) + { + g.setColor(EntitySailboat.AdditionalColor); + g.fillPolygon(new int[]{_startPosX + 65, _startPosX + 130, _startPosX + 15}, + new int[]{_startPosY, _startPosY + 120, _startPosY + 120}, 3); + g.setColor(Color.BLACK); + g.drawPolygon(new int[]{_startPosX + 65, _startPosX + 130, _startPosX + 15}, + new int[]{_startPosY, _startPosY + 120, _startPosY + 120}, 3); + g.drawLine(_startPosX + 65, _startPosY + 120, _startPosX + 65, _startPosY); + } + + //весла + drawingOar.Draw(_startPosX, _startPosY, new Color(128, 64, 48), g); + } +} diff --git a/src/EntitySailboat.java b/src/EntitySailboat.java new file mode 100644 index 0000000..2158c62 --- /dev/null +++ b/src/EntitySailboat.java @@ -0,0 +1,25 @@ +import java.awt.*; +import java.util.*; +import javax.swing.*; +import javax.swing.Timer; +import java.awt.event.*; +public class EntitySailboat { + public int Speed; + public double Weight; + public Color BodyColor; + public Color AdditionalColor; + public boolean Hull; + public boolean Sail; + public double Step; + public int OarsNum; + public void Init (int speed, double weight, Color bodyColor, Color additionalColor, boolean hull, boolean sail, int oarsNum){ + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + Hull = hull; + Sail = sail; + Step = (double)Speed * 100 / Weight; + OarsNum = oarsNum; + } +} diff --git a/src/FormSailboat.java b/src/FormSailboat.java new file mode 100644 index 0000000..1b6a28d --- /dev/null +++ b/src/FormSailboat.java @@ -0,0 +1,119 @@ +import java.awt.*; +import java.util.*; +import javax.swing.*; +import java.awt.event.*; +public class FormSailboat{ + private DrawingSailboat _drawingSailboat; + Canvas canv; + + public void Draw(){ + canv.repaint(); + } + + public FormSailboat(){ + JFrame w=new JFrame ("Парусник"); + JButton buttonCreate = new JButton("Создать"); + JButton up = new JButton(); + up.setBorderPainted(true); + up.setFocusPainted(false); + up.setContentAreaFilled(false); + up.setName("up"); + up.setIcon(new ImageIcon(((new ImageIcon("C:\\storage\\university\\2 course\\rpp\\up.png")).getImage()).getScaledInstance(35, 35, java.awt.Image.SCALE_SMOOTH))); + JButton down = new JButton(); + down.setBorderPainted(true); + down.setFocusPainted(false); + down.setContentAreaFilled(false); + down.setName("down"); + down.setIcon(new ImageIcon(((new ImageIcon("C:\\storage\\university\\2 course\\rpp\\down.png")).getImage()).getScaledInstance(35, 35, java.awt.Image.SCALE_SMOOTH))); + JButton left = new JButton(); + left.setBorderPainted(true); + left.setFocusPainted(false); + left.setContentAreaFilled(false); + left.setName("left"); + left.setIcon(new ImageIcon(((new ImageIcon("C:\\storage\\university\\2 course\\rpp\\left.png")).getImage()).getScaledInstance(35, 35, java.awt.Image.SCALE_SMOOTH))); + JButton right = new JButton(); + right.setBorderPainted(true); + right.setFocusPainted(false); + right.setContentAreaFilled(false); + right.setName("right"); + right.setIcon(new ImageIcon(((new ImageIcon("C:\\storage\\university\\2 course\\rpp\\right.png")).getImage()).getScaledInstance(35, 35, java.awt.Image.SCALE_SMOOTH))); + + buttonCreate.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e){ + System.out.println(e.getActionCommand()); + Random random = new Random(); + _drawingSailboat = new DrawingSailboat(); + _drawingSailboat.Init(random.nextInt(200) + 100, random.nextInt(2000) + 1000, + new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)), + new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)), + random.nextInt(2) == 1, random.nextInt(2) == 1, random.nextInt(3) + 1, 1000, 560); + _drawingSailboat.SetPosition(random.nextInt(90) + 10, random.nextInt(90) + 10); + canv._drawingSailboat = _drawingSailboat; + Draw(); + } + } + ); + ActionListener actioListener = new ActionListener() { + public void actionPerformed(ActionEvent e){ + System.out.println(((JButton)(e.getSource())).getName()); + if (_drawingSailboat == null) + { + return; + } + switch(((JButton)(e.getSource())).getName()){ + case "up": + _drawingSailboat.MoveTransport(Direction.Up); + break; + case "down": + _drawingSailboat.MoveTransport(Direction.Down); + break; + case "left": + _drawingSailboat.MoveTransport(Direction.Left); + break; + case "right": + _drawingSailboat.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(5, 500, 100, 40); + up.setBounds(900, 440, 40, 40); + down.setBounds(900, 480, 40, 40); + left.setBounds(860, 480, 40, 40); + right.setBounds(940, 480, 40, 40); + 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 DrawingSailboat _drawingSailboat; + public Canvas(){ + } + public void paintComponent (Graphics g){ + if (_drawingSailboat == null){ + return; + } + super.paintComponents (g) ; + Graphics2D g2d = (Graphics2D)g; + _drawingSailboat.DrawTransport(g2d); + super.repaint(); + } +} \ No newline at end of file diff --git a/src/Main.java b/src/Main.java index aedd9cd..92892ef 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,17 +1,5 @@ -// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`, -// then press Enter. You can now see whitespace characters in your code. public class Main { public static void main(String[] args) { - // Press Alt+Enter with your caret at the highlighted text to see how - // IntelliJ IDEA suggests fixing it. - System.out.printf("Hello and welcome!"); - - // Press Shift+F10 or click the green arrow button in the gutter to run the code. - for (int i = 1; i <= 5; i++) { - - // Press Shift+F9 to start debugging your code. We have set one breakpoint - // for you, but you can always add more by pressing Ctrl+F8. - System.out.println("i = " + i); - } + FormSailboat formSailboat = new FormSailboat(); } } \ No newline at end of file diff --git a/src/NumOars.java b/src/NumOars.java new file mode 100644 index 0000000..00f6926 --- /dev/null +++ b/src/NumOars.java @@ -0,0 +1,5 @@ +public enum NumOars { + OneOar, + TwoOars, + ThreeOars +}