1 лабораторная
This commit is contained in:
parent
413e8a919d
commit
c8a89e6c86
BIN
src/Crane/Down.png
Normal file
BIN
src/Crane/Down.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 810 B |
BIN
src/Crane/Left.png
Normal file
BIN
src/Crane/Left.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 802 B |
BIN
src/Crane/Right.png
Normal file
BIN
src/Crane/Right.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 817 B |
BIN
src/Crane/Up.png
Normal file
BIN
src/Crane/Up.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 821 B |
16
src/DirectionType.java
Normal file
16
src/DirectionType.java
Normal file
@ -0,0 +1,16 @@
|
||||
public enum DirectionType
|
||||
{
|
||||
Up("U"),
|
||||
Down("D"),
|
||||
Left("L"),
|
||||
Right("R");
|
||||
private String direct;
|
||||
DirectionType(String d)
|
||||
{
|
||||
direct = d;
|
||||
}
|
||||
public String getDirect()
|
||||
{
|
||||
return direct;
|
||||
}
|
||||
}
|
115
src/DrawingCrane.java
Normal file
115
src/DrawingCrane.java
Normal file
@ -0,0 +1,115 @@
|
||||
import java.awt.*;
|
||||
|
||||
public class DrawingCrane
|
||||
{
|
||||
private EntityCrane entityCrane;
|
||||
private DrawingWheel drawingWheel;
|
||||
private int _pictureWidth;
|
||||
private int _pictureHeight;
|
||||
|
||||
private int _startPositionX;
|
||||
private int _startPositionY;
|
||||
|
||||
private final int _craneWidth = 200;
|
||||
|
||||
private final int _craneHeight = 150;
|
||||
public void Init(int speed, double weight, boolean counterWeight, boolean crane, Color bodyColor, Color additionalColor, int width, int height,int wheelCount)
|
||||
{
|
||||
if ((_craneWidth > width) || (_craneHeight > height)) return;
|
||||
_pictureHeight = height;
|
||||
_pictureWidth = width;
|
||||
entityCrane = new EntityCrane();
|
||||
entityCrane.Init(speed, weight, counterWeight,crane, bodyColor, additionalColor);
|
||||
drawingWheel = new DrawingWheel();
|
||||
drawingWheel.SetWheelCounter(wheelCount);
|
||||
}
|
||||
public void SetPosition(int x, int y)
|
||||
{
|
||||
|
||||
if(x+_craneWidth>_pictureWidth)
|
||||
{
|
||||
while(x + _craneWidth > _pictureWidth)
|
||||
{
|
||||
x -= _pictureWidth;
|
||||
}
|
||||
}
|
||||
_startPositionX = x;
|
||||
|
||||
if(y+_craneHeight>_pictureHeight)
|
||||
{
|
||||
while(y+_craneHeight>_pictureHeight)
|
||||
{
|
||||
y -= _pictureHeight;
|
||||
}
|
||||
}
|
||||
_startPositionY = y;
|
||||
}
|
||||
public void MoveCrane(DirectionType direction)
|
||||
{
|
||||
if (entityCrane == null) return;
|
||||
switch (direction) {
|
||||
case Left -> {
|
||||
|
||||
if (_startPositionX - entityCrane.Step > 0) {
|
||||
_startPositionX -= (int) entityCrane.Step;
|
||||
}
|
||||
}
|
||||
case Right->{
|
||||
|
||||
if (_startPositionX + entityCrane.Step + _craneWidth < _pictureWidth) {
|
||||
_startPositionX += (int) entityCrane.Step;
|
||||
}
|
||||
}
|
||||
case Up-> {
|
||||
|
||||
if (_startPositionY - entityCrane.Step > 0) {
|
||||
_startPositionY -= (int) entityCrane.Step;
|
||||
}
|
||||
}
|
||||
|
||||
case Down ->{
|
||||
if (_startPositionY + entityCrane.Step + _craneHeight < _pictureHeight) {
|
||||
|
||||
_startPositionY += (int) entityCrane.Step;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public void DrawTransport(Graphics g) {
|
||||
var g2d = (Graphics2D)g;
|
||||
if (entityCrane == null) return;
|
||||
// Гусеницы
|
||||
|
||||
g2d.drawLine( _startPositionX + 5, _startPositionY + 110, _startPositionX + 195, _startPositionY + 110);
|
||||
g2d.drawLine( _startPositionX, _startPositionY + 115, _startPositionX, _startPositionY + 145);
|
||||
g2d.drawLine( _startPositionX + 5, _startPositionY + 150, _startPositionX + 195, _startPositionY + 150);
|
||||
g2d.drawLine( _startPositionX + 200, _startPositionY + 115, _startPositionX + 200, _startPositionY + 145);
|
||||
g2d.drawArc( _startPositionX, _startPositionY + 110, _craneWidth / 20, _craneHeight / 15, 45, 135);
|
||||
g2d.drawArc( _startPositionX, _startPositionY + 140, _craneWidth / 20, _craneHeight / 15, 135, 180);
|
||||
g2d.drawArc( _startPositionX + 190, _startPositionY + 110, _craneWidth / 20, _craneHeight / 20, 305, 170);
|
||||
g2d.drawArc( _startPositionX + 190, _startPositionY + 143, _craneWidth / 20, _craneHeight / 20, 230, 180);
|
||||
// основное тело
|
||||
g2d.setColor(entityCrane.getBodyColor());
|
||||
g2d.drawRect( _startPositionX + 10, _startPositionY + 65, 180, 40);
|
||||
g2d.fillRect( _startPositionX + 10, _startPositionY + 65, 180, 40);
|
||||
g2d.setColor(Color.BLACK);
|
||||
|
||||
drawingWheel.DrawWheels(_startPositionX, _startPositionY, g2d);
|
||||
//кабинка и выхлоп
|
||||
g2d.drawRect( _startPositionX + 60, _startPositionY + 10, 20, 55);
|
||||
g2d.drawRect( _startPositionX + 110, _startPositionY, 75, 65);
|
||||
if (entityCrane.getCounterWeight()) {
|
||||
g2d.setColor(entityCrane.getAdditionalColor());
|
||||
g2d.drawRect( _startPositionX + 185, _startPositionY + 20, 15, 45);
|
||||
|
||||
}
|
||||
if (entityCrane.getCrane()) {
|
||||
g2d.drawRect( _startPositionX + 20, _startPositionY, 30, 65);
|
||||
g2d.drawRect( _startPositionX, _startPositionY, 20, 30);
|
||||
g2d.fillRect( _startPositionX + 20, _startPositionY, 30, 65);
|
||||
g2d.fillRect( _startPositionX, _startPositionY, 20, 30);
|
||||
}
|
||||
}
|
||||
}
|
27
src/DrawingWheel.java
Normal file
27
src/DrawingWheel.java
Normal file
@ -0,0 +1,27 @@
|
||||
import java.awt.*;
|
||||
|
||||
public class DrawingWheel {
|
||||
private WheelCounter wheelCounter;
|
||||
public void SetWheelCounter(int count)
|
||||
{
|
||||
if (count % 3 == 0)
|
||||
wheelCounter = WheelCounter.SIX;
|
||||
else if (count % 3 == 1)
|
||||
wheelCounter = WheelCounter.FOUR;
|
||||
else if (count % 3 == 2)
|
||||
wheelCounter = WheelCounter.FIVE;
|
||||
}
|
||||
|
||||
public void DrawWheels(int _startPositionX, int _startPositionY, Graphics2D g2d)
|
||||
{
|
||||
g2d.drawOval( _startPositionX + 2, _startPositionY + 112, 36, 36);
|
||||
g2d.drawOval( _startPositionX + 160, _startPositionY + 112, 36, 36);
|
||||
g2d.drawOval( _startPositionX + 74, _startPositionY + 112, 10, 10);
|
||||
g2d.drawOval( _startPositionX + 111, _startPositionY + 112, 10, 10);
|
||||
switch (wheelCounter)
|
||||
{
|
||||
case FIVE -> {g2d.drawOval( _startPositionX + 133, _startPositionY + 128, 20, 20);}
|
||||
case SIX -> {g2d.drawOval( _startPositionX + 45, _startPositionY + 128, 20, 20); g2d.drawOval( _startPositionX + 133, _startPositionY + 128, 20, 20);}
|
||||
}
|
||||
}
|
||||
}
|
44
src/EntityCrane.java
Normal file
44
src/EntityCrane.java
Normal file
@ -0,0 +1,44 @@
|
||||
import java.awt.*;
|
||||
|
||||
public class EntityCrane
|
||||
{
|
||||
//скорость
|
||||
private int Speed ;
|
||||
public int getSpeed() {return Speed;}
|
||||
private void setSpeed(int value) {Speed = value;}
|
||||
|
||||
|
||||
//вес
|
||||
private double Weight ;
|
||||
public double getWeight() {return Weight;}
|
||||
private void setWeight(double value) {Weight = value;}
|
||||
//основной цвет
|
||||
private Color BodyColor ;
|
||||
public Color getBodyColor() {return BodyColor;}
|
||||
private void setBodyColor(Color value) {BodyColor = value;}
|
||||
//дополнительный
|
||||
private Color AdditionalColor ;
|
||||
public Color getAdditionalColor() {return AdditionalColor;}
|
||||
private void setAdditionalColor(Color value) {AdditionalColor = value;}
|
||||
|
||||
private boolean CounterWeight ;
|
||||
public boolean getCounterWeight() {return CounterWeight;}
|
||||
private void setCounterWeight(boolean value) {CounterWeight = value;}
|
||||
|
||||
private boolean Crane;
|
||||
public boolean getCrane() {return Crane;}
|
||||
private void setCrane(boolean value) {Crane = value;}
|
||||
//шаг перемещения
|
||||
public double Step;
|
||||
|
||||
public void Init(int speed, double weight, boolean counterWeight,boolean crane, Color bodyColor, Color additionalColor)
|
||||
{
|
||||
Speed = speed;
|
||||
Weight = weight;
|
||||
CounterWeight = counterWeight;
|
||||
Crane = crane;
|
||||
BodyColor = bodyColor;
|
||||
AdditionalColor = additionalColor;
|
||||
Step = (double)Speed * 100 / Weight;
|
||||
}
|
||||
}
|
142
src/Frame.java
Normal file
142
src/Frame.java
Normal file
@ -0,0 +1,142 @@
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.image.*;
|
||||
import java.io.IOException;
|
||||
import java.util.Random;
|
||||
|
||||
class DrawCrane extends JComponent {
|
||||
private DrawingCrane _drawingCrane;
|
||||
public void paintComponent(Graphics g)
|
||||
{
|
||||
super.paintComponent(g);
|
||||
if (_drawingCrane == null)
|
||||
return;
|
||||
_drawingCrane.DrawTransport(g);
|
||||
super.repaint();
|
||||
}
|
||||
protected void CreateCraneButton_Click()
|
||||
{
|
||||
Random rnd = new Random();
|
||||
_drawingCrane = new DrawingCrane();
|
||||
Color addColor = new Color(rnd.nextInt( 256), rnd.nextInt( 256), rnd.nextInt( 256));
|
||||
Color bodyColor = new Color(rnd.nextInt( 256), rnd.nextInt( 256), rnd.nextInt(256));
|
||||
_drawingCrane.Init(rnd.nextInt(100)+100, rnd.nextInt(2000)+1000,
|
||||
ConvertToBoolean(rnd.nextInt( 2)), ConvertToBoolean(rnd.nextInt( 2)), bodyColor, addColor,
|
||||
Frame.Width-10, Frame.Height-38, rnd.nextInt( 3)+4);
|
||||
_drawingCrane.SetPosition(rnd.nextInt( 100), rnd.nextInt(90)+10);
|
||||
super.repaint();
|
||||
}
|
||||
protected void ButtonMove_Click(String tag)
|
||||
{
|
||||
if (_drawingCrane == null)
|
||||
return;
|
||||
switch (tag) {
|
||||
case "U" -> _drawingCrane.MoveCrane(DirectionType.Up);
|
||||
case "D" -> _drawingCrane.MoveCrane(DirectionType.Down);
|
||||
case "L" -> _drawingCrane.MoveCrane(DirectionType.Left);
|
||||
case "R" -> _drawingCrane.MoveCrane(DirectionType.Right);
|
||||
}
|
||||
super.repaint();
|
||||
}
|
||||
static boolean ConvertToBoolean(int value)
|
||||
{
|
||||
if(value ==0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
public class Frame extends JFrame {
|
||||
public Frame()
|
||||
{
|
||||
InitUI();
|
||||
}
|
||||
protected static final int Width = 900;
|
||||
protected static final int Height = 500;
|
||||
|
||||
DrawCrane Crane;
|
||||
private void InitUI() {
|
||||
setSize(Width, Height);
|
||||
setTitle("HoistingCrane");
|
||||
setLocationRelativeTo(null);
|
||||
setLayout(null);
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
setResizable(false);
|
||||
Crane = new DrawCrane();
|
||||
Crane.setBounds(0, 0, Width, Height);
|
||||
add(Crane);
|
||||
|
||||
MoveAL moving = new MoveAL();
|
||||
|
||||
JButton left = new JButton();
|
||||
left.setActionCommand("L");
|
||||
left.addActionListener(moving);
|
||||
left.setLayout(null);
|
||||
|
||||
JButton right = new JButton();
|
||||
right.setActionCommand("R");
|
||||
right.setLayout(null);
|
||||
right.addActionListener(moving);
|
||||
|
||||
JButton up = new JButton();
|
||||
up.setActionCommand("U");
|
||||
up.addActionListener(moving);
|
||||
up.setLayout(null);
|
||||
|
||||
JButton down = new JButton();
|
||||
down.setActionCommand("D");
|
||||
down.addActionListener(moving);
|
||||
down.setLayout(null);
|
||||
|
||||
JButton CreateButton = new JButton("Создать");
|
||||
right.setIcon(new ImageIcon("src/crane/right.png"));
|
||||
left.setIcon(new ImageIcon("src/crane/left.png"));
|
||||
down.setIcon(new ImageIcon("src/crane/down.png"));
|
||||
up.setIcon(new ImageIcon("src/crane/up.png"));
|
||||
JPanel panelMoveButtons = new JPanel();
|
||||
|
||||
panelMoveButtons.setLayout(new GridBagLayout());
|
||||
panelMoveButtons.setBounds(774, 395, 98, 66);
|
||||
|
||||
GridBagConstraints constraints = new GridBagConstraints();
|
||||
constraints.fill = GridBagConstraints.BOTH;
|
||||
constraints.gridx = 1;
|
||||
constraints.gridy = 0;
|
||||
constraints.weightx = 4;
|
||||
constraints.weighty = 6;
|
||||
panelMoveButtons.add(up, constraints);
|
||||
constraints.gridy = 1;
|
||||
constraints.gridx = 0;
|
||||
panelMoveButtons.add(left, constraints);
|
||||
constraints.gridx = 1;
|
||||
panelMoveButtons.add(down, constraints);
|
||||
constraints.gridx = 2;
|
||||
panelMoveButtons.add(right, constraints);
|
||||
|
||||
|
||||
JPanel panelCreateButton = new JPanel();
|
||||
panelCreateButton.setLayout(new BorderLayout());
|
||||
panelCreateButton.setBounds(0, 420, 112, 34);
|
||||
panelCreateButton.add(CreateButton);
|
||||
|
||||
add(panelMoveButtons);
|
||||
add(panelCreateButton);
|
||||
|
||||
|
||||
setVisible(true);
|
||||
CreateButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Crane.CreateCraneButton_Click();
|
||||
}
|
||||
});
|
||||
}
|
||||
public class MoveAL implements ActionListener {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Crane.ButtonMove_Click(e.getActionCommand());
|
||||
}
|
||||
}
|
||||
}
|
6
src/Main.java
Normal file
6
src/Main.java
Normal file
@ -0,0 +1,6 @@
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Frame a = new Frame();
|
||||
a.setVisible(true);
|
||||
}
|
||||
}
|
14
src/WheelCounter.java
Normal file
14
src/WheelCounter.java
Normal file
@ -0,0 +1,14 @@
|
||||
public enum WheelCounter {
|
||||
FOUR (4),
|
||||
FIVE (5),
|
||||
SIX (6);
|
||||
private int count;
|
||||
WheelCounter(int c)
|
||||
{
|
||||
count = c;
|
||||
}
|
||||
public int getCount()
|
||||
{
|
||||
return count;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user