PIbd-23_Minhasapov_R.H._Exc.../DrawningTracktor.java

160 lines
6.1 KiB
Java

import java.awt.*;
// Класс, отвечающий за прорисовку и перемещение объекта-сущности
public class DrawningTracktor {
private EntityTracktor Tracktor; // Класс-сущность
public EntityTracktor getTracktor(){
return Tracktor;
}
private float _startPosX; // Левая координата отрисовки трактора
private float _startPosY; // Верхняя кооридната отрисовки трактора
private Integer _pictureWidth = null; // Ширина окна отрисовки
private Integer _pictureHeight = null; // Высота окна отрисовки
private final int _tracktorWidth = 110; // Ширина отрисовки трактора
private final int _tracktorHeight = 87; // Высота отрисовки трактора
private DrawningRollers drawningRollers;
// Инициализация свойств
public void Init(int speed, float weight, Color bodyColor, int countRollers)
{
Tracktor = new EntityTracktor();
Tracktor.Init(speed, weight, bodyColor);
drawningRollers = new DrawningRollers();
drawningRollers.Init(countRollers, bodyColor);
}
// Установка позиции Трактора
public void SetPosition(int x, int y, int width, int height)
{
if (x + _tracktorWidth > width ||
x < 0 ||
y + _tracktorHeight > height ||
y < 0)
{
return;
}
_startPosX = x;
_startPosY = y;
_pictureWidth = width;
_pictureHeight = height;
}
// Изменение направления перемещения
public void MoveTransport(Direction direction)
{
if (_pictureWidth == null || _pictureHeight == null)
{
return;
}
switch (direction)
{
// вправо
case Right:
if (_startPosX + _tracktorWidth + Tracktor.getStep() < _pictureWidth)
{
_startPosX += Tracktor.getStep();
}
break;
//влево
case Left:
if (_startPosX - Tracktor.getStep() > 0)
{
_startPosX -= Tracktor.getStep();
}
break;
//вверх
case Up:
if (_startPosY - Tracktor.getStep() > 0)
{
_startPosY -= Tracktor.getStep();
}
break;
//вниз
case Down:
if (_startPosY + _tracktorHeight + Tracktor.getStep() < _pictureHeight)
{
_startPosY += Tracktor.getStep();
}
break;
}
}
// Отрисовка Трактора
public void DrawTransport(Graphics g)
{
if (_startPosX < 0 || _startPosY < 0 || _pictureHeight == null || _pictureWidth == null)
{
return;
}
Color penColor = Color.BLACK;
// корпус
Color br = Tracktor!=null ? Tracktor.getBodyColor() : Color.GRAY ;
g.setColor(br);
g.fillRect((int)_startPosX + 10, (int)_startPosY + 30, 90, 25);
g.setColor(penColor);
g.drawRect((int)_startPosX + 10, (int)_startPosY + 30, 90, 25);
// окно
g.setColor(Color.CYAN);
g.fillRect((int)_startPosX + 65, (int)_startPosY + 1, 30, 29);
g.setColor(penColor);
g.drawRect((int)_startPosX + 65, (int)_startPosY + 1, 30, 29);
// труба
g.setColor(Color.RED);
g.fillRect((int)_startPosX + 30, (int)_startPosY + 10, 10, 20);
g.setColor(penColor);
g.drawRect((int)_startPosX + 30, (int)_startPosY + 10, 10, 20);
// гусеница
g.setColor(Color.DARK_GRAY);
g.fillOval((int)_startPosX + 1, (int)_startPosY + 57, 20, 20);
g.setColor(penColor);
g.drawOval((int)_startPosX + 1, (int)_startPosY + 57, 20, 20);
g.setColor(Color.DARK_GRAY);
g.fillOval((int)_startPosX + 1, (int)_startPosY + 65, 20, 20);
g.setColor(penColor);
g.drawOval((int)_startPosX + 1, (int)_startPosY + 65, 20, 20);
g.setColor(Color.DARK_GRAY);
g.fillOval((int)_startPosX + 90, (int)_startPosY + 57, 20, 20);
g.setColor(penColor);
g.drawOval((int)_startPosX + 90, (int)_startPosY + 57, 20, 20);
g.setColor(Color.DARK_GRAY);
g.fillOval((int)_startPosX + 90, (int)_startPosY + 65, 20, 20);
g.setColor(penColor);
g.drawOval((int)_startPosX + 90, (int)_startPosY + 65, 20, 20);
g.setColor(Color.DARK_GRAY);
g.fillRect((int)_startPosX + 10, (int)_startPosY + 57, 90, 30);
g.fillRect((int)_startPosX + 1, (int)_startPosY + 65, 110, 10);
g.setColor(penColor);
g.drawLine((int)_startPosX + 10, (int)_startPosY + 57, (int)_startPosX + 100, (int)_startPosY + 57);
g.drawLine((int)_startPosX + 10, (int)_startPosY + 86, (int)_startPosX + 100, (int)_startPosY + 86);
g.drawLine((int)_startPosX + 1, (int)_startPosY + 65, (int)_startPosX + 1, (int)_startPosY + 75);
g.drawLine((int)_startPosX + 110, (int)_startPosY + 65, (int)_startPosX + 110, (int)_startPosY + 75);
drawningRollers.DrawRollers(g,_startPosX, _startPosY);
}
// Смена границ формы отрисовки
public void ChangeBorders(int width, int height)
{
_pictureWidth = width;
_pictureHeight = height;
if (_pictureWidth <= _tracktorWidth || _pictureHeight <= _tracktorHeight)
{
_pictureWidth = null;
_pictureHeight = null;
return;
}
if (_startPosX + _tracktorWidth > _pictureWidth)
{
_startPosX = _pictureWidth - _tracktorWidth;
}
if (_startPosY + _tracktorHeight > _pictureHeight)
{
_startPosY = _pictureHeight - _tracktorHeight;
}
}
}