Pibd-23_Zhelovanov_D.Y._Bat.../DrawningBattleship.java
2022-12-20 20:50:09 +03:00

199 lines
6.9 KiB
Java
Raw Permalink 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.

import java.awt.*;
import java.util.Random;
public class DrawningBattleship {
EntityBattleship Battleship;
private DrawningBlocks drawingBlocks;
private IDrawningBlocks iDrawingBlocks;
public EntityBattleship Battleship()
{return Battleship; }
/// <summary>
/// Левая координата отрисовки корабля
/// </summary>
protected float _startPosX;
/// <summary>
/// Верхняя кооридната отрисовки корабля
/// </summary>
protected float _startPosY;
/// <summary>
/// Ширина окна отрисовки
/// </summary>
private Integer _pictureWidth = null;
/// <summary>
/// Высота окна отрисовки
/// </summary>
private Integer _pictureHeight = null;
/// <summary>
/// Ширина отрисовки корабля
/// </summary>
private int _battleshipWidth = 120;
/// <summary>
/// Высота отрисовки корабля
/// </summary>
private int _battleshipHeight = 50;
/// <summary>
/// Инициализация свойств
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес корабля</param>
/// <param name="bodyColor">Цвет корпуса</param>
public DrawningBattleship(int speed, float weight, Color bodyColor)
{
//Battleship.Init(speed, weight, bodyColor);
Random random = new Random();
int[] ArrayBlocks = new int[]{2, 4, 6};
switch (random.nextInt(3)){
case 0:
iDrawingBlocks = new DrawningBlocks(ArrayBlocks[random.nextInt(0, 3)], Color.BLACK);
break;
case 1:
iDrawingBlocks = new DrawningRoundBlocks(ArrayBlocks[random.nextInt(0, 3)]);
break;
case 2:
iDrawingBlocks = new DrawningTriangleBlocks(ArrayBlocks[random.nextInt(0, 3)]);
break;
}
Battleship = new EntityBattleship(speed, weight, bodyColor);
}
public DrawningBattleship(EntityBattleship entity, IDrawningBlocks blocks){
Battleship = entity;
iDrawingBlocks = blocks;
}
protected DrawningBattleship(int speed, float weight, Color bodyColor, int battleshipWidth, int battleshipHeight)
{
this(speed, weight, bodyColor);
_battleshipWidth = battleshipWidth;
_battleshipHeight = battleshipHeight;
}
/// <summary>
/// Установка позиции корабля
/// </summary>
/// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param>
/// <param name="width">Ширина картинки</param>
/// <param name="height">Высота картинки</param>
public void SetPosition(int x, int y, int width, int height)
{
if ((x > 0 && y > 0) && (_battleshipHeight + y < height) && (_battleshipWidth + x < width))
{
_startPosX = x;
_startPosY = y;
_pictureWidth = width;
_pictureHeight = height;
}
}
/// <summary>
/// Изменение направления перемещения
/// </summary>
/// <param name="direction">Направление</param>
public void MoveTransport(Direction direction)
{
if (_pictureWidth == null || _pictureHeight == null)
{
return;
}
switch (direction)
{
// вправо
case Right:
if (_startPosX + _battleshipWidth + Battleship.GetStep() < _pictureWidth)
{
_startPosX += Battleship.GetStep();
}
break;
//влево
case Left:
if (_startPosX - Battleship.GetStep() >= 0)
{
_startPosX -= Battleship.GetStep();
}
break;
//вверх
case Up:
if (_startPosY - Battleship.GetStep() >= 0)
{
_startPosY -= Battleship.GetStep();
}
break;
//вниз
case Down:
if (_startPosY + _battleshipHeight + Battleship.GetStep() < _pictureHeight)
{
_startPosY += Battleship.GetStep();
}
break;
}
}
/// <summary>
/// Отрисовка корабля
/// </summary>
/// <param name="g"></param>
public void DrawTransport(Graphics2D g)
{
if (_startPosX < 0 || _startPosY < 0
|| _pictureHeight == null || _pictureWidth == null)
{
return;
}
g.setColor(Color.BLACK);
//Корпус корабля
g.setColor(Battleship.bodyColor);
g.fillPolygon(new int[]{(int) _startPosX, (int) _startPosX , (int) _startPosX+80, (int) _startPosX + 120, (int)_startPosX + 80, (int)_startPosX},
new int[]{(int) _startPosY, (int) _startPosY+50 , (int) _startPosY+50, (int) _startPosY + 25, (int)_startPosY, (int)_startPosY}, 6);
//Пушка
g.setColor(Color.BLACK);
g.drawRect((int)_startPosX + 20, (int)_startPosY + 20, 30, 10);
g.drawRect((int)_startPosX + 50,(int) _startPosY + 10, 20, 30);
g.fillRect((int)_startPosX + 20, (int)_startPosY + 20, 30, 10);
g.fillRect((int)_startPosX + 50, (int)_startPosY + 10, 20, 30);
//Отсек
g.setColor(Color.BLUE);
g.drawOval((int)_startPosX+80, (int)_startPosY+15, 20, 20);
g.fillOval((int)_startPosX + 80, (int)_startPosY + 15, 20, 20);
g.setColor(Color.BLACK);
g.fillRect((int)_startPosX-5, (int)_startPosY+10, 5, 5);
g.fillRect((int)_startPosX - 5, (int)_startPosY + 35, 5, 5);
iDrawingBlocks.DrawBlocks(g, (int) _startPosX, (int) _startPosY, Color.BLACK);
}
/// <summary>
/// Смена границ формы отрисовки
/// </summary>
/// <param name="width">Ширина картинки</param>
/// <param name="height">Высота картинки</param>
public void ChangeBorders(int width, int height)
{
_pictureWidth = width;
_pictureHeight = height;
if (_pictureWidth <= _battleshipWidth || _pictureHeight <= _battleshipHeight)
{
_pictureWidth = null;
_pictureHeight = null;
return;
}
if (_startPosX + _battleshipWidth > _pictureWidth)
{
_startPosX = _pictureWidth - _battleshipWidth;
}
if (_startPosY + _battleshipHeight > _pictureHeight)
{
_startPosY = _pictureHeight - _battleshipHeight;
}
}
public float[] GetCurrentPosition()
{
return new float[] {_startPosY, _startPosX + _battleshipWidth, /*DOWN*/ _startPosY + _battleshipHeight, /*LEFT*/ _startPosX};
}
}