Laba1 KozyrevSS GasolineTanker JAVA HARD
This commit is contained in:
parent
bff2a5e34e
commit
c6fc3c0b37
BIN
Arrows/Down.png
Normal file
BIN
Arrows/Down.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 810 B |
BIN
Arrows/Left.png
Normal file
BIN
Arrows/Left.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 802 B |
BIN
Arrows/Right.png
Normal file
BIN
Arrows/Right.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 817 B |
BIN
Arrows/Up.png
Normal file
BIN
Arrows/Up.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 821 B |
79
BaseCar.java
Normal file
79
BaseCar.java
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class BaseCar {
|
||||||
|
private int Speed;
|
||||||
|
public int getSpeed() {
|
||||||
|
return Speed;
|
||||||
|
}
|
||||||
|
private void setSpeed(int speed)
|
||||||
|
{
|
||||||
|
Speed = speed;
|
||||||
|
}
|
||||||
|
private double Weight;
|
||||||
|
public double getWeight()
|
||||||
|
{
|
||||||
|
return Weight;
|
||||||
|
}
|
||||||
|
private void setWeight(double weight)
|
||||||
|
{
|
||||||
|
Weight = weight;
|
||||||
|
}
|
||||||
|
private Color BodyColor;
|
||||||
|
public Color getBodyColor()
|
||||||
|
{
|
||||||
|
return BodyColor;
|
||||||
|
}
|
||||||
|
private void setBodyColor(Color bodyColor)
|
||||||
|
{
|
||||||
|
BodyColor = bodyColor;
|
||||||
|
}
|
||||||
|
private Color AdditionalColor;
|
||||||
|
public Color getAdditionalColor()
|
||||||
|
{
|
||||||
|
return AdditionalColor;
|
||||||
|
}
|
||||||
|
private void setAdditionalColor(Color additionalColor)
|
||||||
|
{
|
||||||
|
AdditionalColor = additionalColor;
|
||||||
|
}
|
||||||
|
private boolean BodyKit;
|
||||||
|
public boolean getBodyKit()
|
||||||
|
{
|
||||||
|
return BodyKit;
|
||||||
|
}
|
||||||
|
private void setBodyKit(boolean bodyKit)
|
||||||
|
{
|
||||||
|
BodyKit = bodyKit;
|
||||||
|
}
|
||||||
|
private boolean Wing;
|
||||||
|
public boolean getWing()
|
||||||
|
{
|
||||||
|
return Wing;
|
||||||
|
}
|
||||||
|
private void setWing(boolean wing)
|
||||||
|
{
|
||||||
|
Wing = wing;
|
||||||
|
}
|
||||||
|
private boolean SportLine;
|
||||||
|
public boolean getSportLine()
|
||||||
|
{
|
||||||
|
return SportLine;
|
||||||
|
}
|
||||||
|
private void setSportLine(boolean sportLine)
|
||||||
|
{
|
||||||
|
SportLine = sportLine;
|
||||||
|
}
|
||||||
|
public double Step;
|
||||||
|
|
||||||
|
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean bodyKit, boolean wing, boolean sportLine)
|
||||||
|
{
|
||||||
|
Speed = speed;
|
||||||
|
Weight = weight;
|
||||||
|
BodyColor = bodyColor;
|
||||||
|
AdditionalColor = additionalColor;
|
||||||
|
BodyKit = bodyKit;
|
||||||
|
Wing = wing;
|
||||||
|
SportLine = sportLine;
|
||||||
|
Step = (double)Speed * 100 / Weight;
|
||||||
|
}
|
||||||
|
}
|
16
Direction.java
Normal file
16
Direction.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
public enum Direction {
|
||||||
|
Up ("U"),
|
||||||
|
Down ("D"),
|
||||||
|
Left ("L"),
|
||||||
|
Right ("R");
|
||||||
|
private String direct;
|
||||||
|
Direction(String d)
|
||||||
|
{
|
||||||
|
direct = d;
|
||||||
|
}
|
||||||
|
public String getDirect()
|
||||||
|
{
|
||||||
|
return direct;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
125
DrawFrame.java
Normal file
125
DrawFrame.java
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
class DrawGasoline extends JComponent {
|
||||||
|
private DrawingTanker _drawingTanker;
|
||||||
|
public void paintComponent(Graphics g)
|
||||||
|
{
|
||||||
|
super.paintComponent(g);
|
||||||
|
if (_drawingTanker == null)
|
||||||
|
return;
|
||||||
|
_drawingTanker.DrawTransport(g);
|
||||||
|
super.repaint();
|
||||||
|
}
|
||||||
|
protected void CreateCarButton_Click()
|
||||||
|
{
|
||||||
|
Random rnd = new Random();
|
||||||
|
_drawingTanker = new DrawingTanker();
|
||||||
|
Color addColor = new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256));
|
||||||
|
Color bodyColor = new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256));
|
||||||
|
_drawingTanker.Init(rnd.nextInt(100, 200), rnd.nextInt(2000, 4000),
|
||||||
|
bodyColor, addColor, IntToBool(rnd.nextInt(0, 2)), IntToBool(rnd.nextInt(0, 2)),
|
||||||
|
IntToBool(rnd.nextInt(0, 2)), Frame.Width, Frame.Height, rnd.nextInt(0, 30));
|
||||||
|
_drawingTanker.SetPosition(rnd.nextInt(10, 100), rnd.nextInt(10, 100));
|
||||||
|
super.repaint();
|
||||||
|
}
|
||||||
|
protected void ButtonMove_Click(String tag)
|
||||||
|
{
|
||||||
|
if (_drawingTanker == null)
|
||||||
|
return;
|
||||||
|
switch (tag) {
|
||||||
|
case "U" -> _drawingTanker.MoveTransport(Direction.Up);
|
||||||
|
case "D" -> _drawingTanker.MoveTransport(Direction.Down);
|
||||||
|
case "L" -> _drawingTanker.MoveTransport(Direction.Left);
|
||||||
|
case "R" -> _drawingTanker.MoveTransport(Direction.Right);
|
||||||
|
}
|
||||||
|
super.repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean IntToBool(int n)
|
||||||
|
{
|
||||||
|
return n > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Frame extends JFrame {
|
||||||
|
public Frame()
|
||||||
|
{
|
||||||
|
initUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static final int Width = 1000;
|
||||||
|
protected static final int Height = 600;
|
||||||
|
DrawGasoline Gasoline;
|
||||||
|
private void initUI()
|
||||||
|
{
|
||||||
|
setSize(Width, Height);
|
||||||
|
setTitle("TankGasoline");
|
||||||
|
setLocationRelativeTo(null);
|
||||||
|
setLayout(null);
|
||||||
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
setResizable(false);
|
||||||
|
Gasoline = new DrawGasoline();
|
||||||
|
Gasoline.setBounds(0, 0, Width, Height);
|
||||||
|
add(Gasoline);
|
||||||
|
|
||||||
|
MoveAL moving = new MoveAL();
|
||||||
|
|
||||||
|
JButton buttonUp = new JButton();
|
||||||
|
buttonUp.setActionCommand("U");
|
||||||
|
buttonUp.setBounds(Width - 90, Height - 120,30,30);
|
||||||
|
buttonUp.setLayout(null);
|
||||||
|
add(buttonUp);
|
||||||
|
buttonUp.addActionListener(moving);
|
||||||
|
|
||||||
|
JButton buttonRight = new JButton();
|
||||||
|
buttonRight.setActionCommand("R");
|
||||||
|
buttonRight.setBounds(Width - 60, Height - 90,30,30);
|
||||||
|
buttonRight.setLayout(null);
|
||||||
|
add(buttonRight);
|
||||||
|
buttonRight.addActionListener(moving);
|
||||||
|
|
||||||
|
JButton buttonLeft = new JButton();
|
||||||
|
buttonLeft.setActionCommand("L");
|
||||||
|
buttonLeft.setBounds(Width - 120, Height - 90,30,30);
|
||||||
|
buttonLeft.setLayout(null);
|
||||||
|
add(buttonLeft);
|
||||||
|
buttonLeft.addActionListener(moving);
|
||||||
|
|
||||||
|
JButton buttonDown = new JButton();
|
||||||
|
buttonDown.setActionCommand("D");
|
||||||
|
buttonDown.setBounds(Width - 90, Height - 90,30,30);
|
||||||
|
buttonDown.setLayout(null);
|
||||||
|
add(buttonDown);
|
||||||
|
buttonDown.addActionListener(moving);
|
||||||
|
|
||||||
|
|
||||||
|
buttonUp.setIcon(new ImageIcon("Arrows/Up.png"));
|
||||||
|
buttonDown.setIcon(new ImageIcon("Arrows/Down.png"));
|
||||||
|
buttonLeft.setIcon(new ImageIcon("Arrows/Left.png"));
|
||||||
|
buttonRight.setIcon(new ImageIcon("Arrows/Right.png"));
|
||||||
|
|
||||||
|
JButton buttonCreate = new JButton("Create");
|
||||||
|
buttonCreate.setBounds(60, Height - 120, 120, 50);
|
||||||
|
buttonCreate.setLayout(null);
|
||||||
|
add(buttonCreate);
|
||||||
|
buttonCreate.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
Gasoline.CreateCarButton_Click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
public class MoveAL implements ActionListener {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
Gasoline.ButtonMove_Click(e.getActionCommand());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
89
DrawingTanker.java
Normal file
89
DrawingTanker.java
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class DrawingTanker {
|
||||||
|
private BaseCar GasolineTanker;
|
||||||
|
private WheelsDrawing wheelsDrawing;
|
||||||
|
private int _pictureWidth;
|
||||||
|
private int _pictureHeight;
|
||||||
|
private int _startPosX;
|
||||||
|
private int _startPosY;
|
||||||
|
private final int _carWidth = 120;
|
||||||
|
private final int _carHeight = 120;
|
||||||
|
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean bodyKit, boolean wing, boolean sportLine, int width, int height, int wheelCount)
|
||||||
|
{
|
||||||
|
_pictureHeight = height;
|
||||||
|
_pictureWidth = width;
|
||||||
|
GasolineTanker = new BaseCar();
|
||||||
|
GasolineTanker.Init(speed, weight, bodyColor, additionalColor, bodyKit, wing, sportLine);
|
||||||
|
wheelsDrawing = new WheelsDrawing();
|
||||||
|
wheelsDrawing.setWheelCount(wheelCount);
|
||||||
|
}
|
||||||
|
public void SetPosition(int x, int y)
|
||||||
|
{
|
||||||
|
_startPosX = x;
|
||||||
|
_startPosY = y;
|
||||||
|
}
|
||||||
|
public void MoveTransport(Direction direction)
|
||||||
|
{
|
||||||
|
if (GasolineTanker == null)
|
||||||
|
return;
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
case Left -> {
|
||||||
|
if (_startPosX - GasolineTanker.Step > 0)
|
||||||
|
{
|
||||||
|
_startPosX -= (int)GasolineTanker.Step;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case Up -> {
|
||||||
|
if (_startPosY - GasolineTanker.Step > 0)
|
||||||
|
{
|
||||||
|
_startPosY -= (int)GasolineTanker.Step;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case Right -> {
|
||||||
|
if (_startPosX + _carWidth + GasolineTanker.Step < _pictureWidth)
|
||||||
|
{
|
||||||
|
_startPosX += (int)GasolineTanker.Step;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case Down -> {
|
||||||
|
if (_startPosY + GasolineTanker.Step + _carHeight < _pictureHeight)
|
||||||
|
{
|
||||||
|
_startPosY += (int)GasolineTanker.Step;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void DrawTransport(Graphics g)
|
||||||
|
{
|
||||||
|
if (GasolineTanker == null)
|
||||||
|
return;
|
||||||
|
var g2d = (Graphics2D) g;
|
||||||
|
if (GasolineTanker.getBodyKit())
|
||||||
|
{
|
||||||
|
g2d.setColor(GasolineTanker.getAdditionalColor());
|
||||||
|
g2d.fillOval(10 + _startPosX, 10 + _startPosY, 70, 30);
|
||||||
|
}
|
||||||
|
g2d.setColor(GasolineTanker.getBodyColor());
|
||||||
|
// Отрисовка корпуса
|
||||||
|
g2d.fillRect(10 + _startPosX, 40 + _startPosY, 90, 20);
|
||||||
|
g2d.fillRect(80 + _startPosX, 10 + _startPosY, 20, 40);
|
||||||
|
// Отрисовка колесиков
|
||||||
|
wheelsDrawing.DrawWheels(_startPosX, _startPosY, GasolineTanker.getBodyColor(), g2d);
|
||||||
|
if (GasolineTanker.getSportLine())
|
||||||
|
{
|
||||||
|
g2d.setColor(GasolineTanker.getAdditionalColor());
|
||||||
|
g2d.fillRect( 15 + _startPosX, 45 + _startPosY, 20, 5);
|
||||||
|
g2d.fillRect(40 + _startPosX, 45 + _startPosY, 20, 5);
|
||||||
|
g2d.fillRect(65 + _startPosX, 45 + _startPosY, 20, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GasolineTanker.getWing())
|
||||||
|
{
|
||||||
|
g2d.setColor(GasolineTanker.getAdditionalColor());
|
||||||
|
g2d.fillRect(87 + _startPosX, 5 + _startPosY, 5, 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6
Main.java
Normal file
6
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
WheelCounter.java
Normal file
14
WheelCounter.java
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
public enum WheelCounter {
|
||||||
|
TWO (2),
|
||||||
|
THREE (3),
|
||||||
|
FOUR (4);
|
||||||
|
private int count;
|
||||||
|
WheelCounter(int c)
|
||||||
|
{
|
||||||
|
count = c;
|
||||||
|
}
|
||||||
|
public int getCount()
|
||||||
|
{
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
}
|
30
WheelsDrawing.java
Normal file
30
WheelsDrawing.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class WheelsDrawing {
|
||||||
|
private WheelCounter wheelCounter;
|
||||||
|
public WheelCounter getWheelCounter()
|
||||||
|
{
|
||||||
|
return wheelCounter;
|
||||||
|
}
|
||||||
|
public void setWheelCount(int count)
|
||||||
|
{
|
||||||
|
if (count % 3 == 0)
|
||||||
|
wheelCounter = WheelCounter.THREE;
|
||||||
|
else if (count % 3 == 1)
|
||||||
|
wheelCounter = WheelCounter.FOUR;
|
||||||
|
else if (count % 3 == 2)
|
||||||
|
wheelCounter = WheelCounter.TWO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DrawWheels(int _startPosX, int _startPosY, Color bodyColor, Graphics2D g2d)
|
||||||
|
{
|
||||||
|
g2d.setColor(bodyColor);
|
||||||
|
g2d.fillOval(10 + _startPosX, 60 + _startPosY, 20, 20);
|
||||||
|
g2d.fillOval(80 + _startPosX, 60 + _startPosY, 20, 20);
|
||||||
|
switch (wheelCounter)
|
||||||
|
{
|
||||||
|
case THREE -> {g2d.fillOval(45 + _startPosX, 60 + _startPosY ,20, 20);}
|
||||||
|
case FOUR -> {g2d.fillOval(30 + _startPosX, 60 + _startPosY ,20, 20); g2d.fillOval(60 + _startPosX, 60 + _startPosY ,20, 20);}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user