PIbd-22_Chernyshev_G.J._29_.../Trolleybus/DrawingTrolleybus.java
2023-11-11 20:48:58 +03:00

130 lines
5.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package Trolleybus;
import java.awt.*;
import java.util.Random;
public class DrawingTrolleybus {
// Класс-сущность
public EntityTrolleybus EntityTrolleybus;
// Замена свойства
public EntityTrolleybus getEntityTrolleybus() {return EntityTrolleybus;}
private void setEntityTrolleybus(EntityTrolleybus entityTrolleybus) {EntityTrolleybus = entityTrolleybus;}
public DrawingDoors Doors;
// Ширина окна
private int _pictureWidth;
// Высота окна
private int _pictureHeight;
// Левая координата прорисовки троллейбуса
private int _startPosX;
// Верхняя координата прорисовки троллейбуса
private int _startPosY;
// Ширина прорисовки троллейбуса
private final int _trolleybusWidth = 150;
// Высота прорисовки троллейбуса
private final int _trolleybusHeight = 95;
// Инициализация свойств
public boolean Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean horns, boolean batteries, int width, int height)
{
if (width < _trolleybusWidth || height < _trolleybusHeight)
{
return false;
}
_pictureWidth = width;
_pictureHeight = height;
EntityTrolleybus = new EntityTrolleybus();
EntityTrolleybus.Init(speed, weight, bodyColor, additionalColor, horns, batteries);
//Кол-во дверей
Random random = new Random();
Doors = new DrawingDoors();
Doors.SetCntOfDoors(random.nextInt(3, 6));
return true;
}
// Установка позиции
public void SetPosition(int x, int y)
{
if (x > _pictureWidth || y > _pictureHeight) {
return;
}
_startPosX = Math.min(Math.max(x, 0), _pictureWidth - _trolleybusWidth);
_startPosY = Math.min(Math.max(y, 0), _pictureHeight - _trolleybusHeight);
}
// Изменение направления перемещения
public void MoveTransport(DirectionType directionType)
{
if (EntityTrolleybus == null)
{
return;
}
switch (directionType)
{
//влево
case Left:
if (_startPosX - EntityTrolleybus.Step > 0)
{
_startPosX -= (int)EntityTrolleybus.Step;
}
break;
//вверх
case Up:
if (_startPosY - EntityTrolleybus.Step > 0)
{
_startPosY -= (int)EntityTrolleybus.Step;
}
break;
// вправо
case Right:
if (_startPosX + _trolleybusWidth + EntityTrolleybus.Step < _pictureWidth)
{
_startPosX += (int)EntityTrolleybus.Step;
}
break;
// вниз
case Down:
if (_startPosY + _trolleybusHeight + EntityTrolleybus.Step < _pictureHeight)
{
_startPosY += (int)EntityTrolleybus.Step;
}
break;
}
}
// Прорисовка объекта
public void DrawTransport(Graphics g)
{
if (EntityTrolleybus == null)
{
return;
}
Graphics2D g2d = (Graphics2D)g;
//РИСОВАНИЕ САМОГО ТРРОЛЛЕЙБУСА
//Корпус
g2d.setColor(EntityTrolleybus.getBodyColor());
g2d.drawLine(_startPosX, _startPosY + 30, _startPosX, _startPosY + 80);
g2d.drawLine(_startPosX, _startPosY + 80, _startPosX + 20, _startPosY + 80);
g2d.drawLine(_startPosX + 45, _startPosY + 80, _startPosX + 105, _startPosY + 80);
g2d.drawLine(_startPosX + 130, _startPosY + 80, _startPosX + 150, _startPosY + 80);
g2d.drawLine(_startPosX + 150, _startPosY + 80, _startPosX + 150, _startPosY + 30);
g2d.drawLine(_startPosX + 150, _startPosY + 30, _startPosX, _startPosY + 30);
//Колёса
g2d.setColor(Color.BLACK);
g2d.drawOval(_startPosX + 20, _startPosY + 70, 25, 25);
g2d.drawOval(_startPosX + 105, _startPosY + 70, 25, 25);
//Двери
Doors.DrawDoors(g2d, EntityTrolleybus.getBodyColor(), _startPosX, _startPosY);
//Опциональные "рога"
g2d.setColor(EntityTrolleybus.getAdditionalColor());
if (EntityTrolleybus.Horns)
{
g2d.drawLine(_startPosX + 70, _startPosY + 30, _startPosX + 40, _startPosY);
g2d.drawLine(_startPosX + 70, _startPosY + 30, _startPosX + 60, _startPosY);
}
//Опциональный отсек для батареи
if (EntityTrolleybus.Batteries)
{
int[] xOfBatteries = {_startPosX + 70, _startPosX + 70, _startPosX + 100, _startPosX + 110};
int[] yOfBatteries = {_startPosY + 30, _startPosY + 25, _startPosY + 25, _startPosY + 30};
g2d.fillPolygon(xOfBatteries, yOfBatteries, 4);
}
}
}