PIbd-21_MalafeevL.S._Cruiser_Hard Lab1 #1
22
src/Block.java
Normal file
22
src/Block.java
Normal file
@ -0,0 +1,22 @@
|
||||
public enum Block {
|
||||
One(1),
|
||||
Two(2),
|
||||
Three(3);
|
||||
|
||||
Block(int i) {
|
||||
}
|
||||
|
||||
public static Block GetBlock(int i){
|
||||
switch (i)
|
||||
{
|
||||
case 1:
|
||||
return One;
|
||||
case 2:
|
||||
return Two;
|
||||
case 3:
|
||||
return Three;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
14
src/Direction.java
Normal file
14
src/Direction.java
Normal file
@ -0,0 +1,14 @@
|
||||
public enum Direction {
|
||||
Up(1),
|
||||
Down(2),
|
||||
Left (3),
|
||||
Right(4)
|
||||
;
|
||||
private final int Direct;
|
||||
Direction(int i) {
|
||||
this.Direct=i;
|
||||
}
|
||||
public int GetDirect() {
|
||||
return Direct;
|
||||
}
|
||||
}
|
45
src/DrawBlock.java
Normal file
45
src/DrawBlock.java
Normal file
@ -0,0 +1,45 @@
|
||||
import java.awt.*;
|
||||
|
||||
public class DrawBlock {
|
||||
private Block blockCount;
|
||||
|
||||
public void SetBlockCount(int count){
|
||||
blockCount = Block.GetBlock(count);
|
||||
}
|
||||
|
||||
public void DrawningBlock(int _startPosX, int _startPosY, int _cruiserWidth, Graphics2D g2d, Color bodyColor){
|
||||
switch (blockCount)
|
||||
{
|
||||
case One:
|
||||
break;
|
||||
|
||||
case Two:
|
||||
DrawFirstDop(_startPosX,_startPosY,_cruiserWidth,g2d,bodyColor);
|
||||
break;
|
||||
|
||||
case Three:
|
||||
DrawSecondDop(_startPosX,_startPosY,_cruiserWidth,g2d,bodyColor);
|
||||
break;
|
||||
}
|
||||
}
|
||||
public void DrawFirstDop(int _startPosX, int _startPosY, int _cruiserWidth, Graphics2D g2d, Color bodyColor) {
|
||||
Polygon elementsSec = new Polygon();
|
||||
elementsSec.addPoint(_startPosX + 55,_startPosY + 25);
|
||||
elementsSec.addPoint(_startPosX + 65,_startPosY + 25);
|
||||
elementsSec.addPoint(_startPosX + 65,_startPosY + 35);
|
||||
elementsSec.addPoint(_startPosX + 55,_startPosY + 35);
|
||||
g2d.setColor(Color.WHITE);
|
||||
g2d.fillPolygon(elementsSec);
|
||||
}
|
||||
public void DrawSecondDop(int _startPosX, int _startPosY, int _cruiserWidth, Graphics2D g2d, Color bodyColor) {
|
||||
DrawFirstDop(_startPosX,_startPosY,_cruiserWidth,g2d,bodyColor);
|
||||
Polygon elementsThree = new Polygon();
|
||||
elementsThree.addPoint(_startPosX + 75,_startPosY + 15);
|
||||
elementsThree.addPoint(_startPosX + 85,_startPosY + 15);
|
||||
elementsThree.addPoint(_startPosX + 85,_startPosY + 45);
|
||||
elementsThree.addPoint(_startPosX + 75,_startPosY + 45);
|
||||
g2d.setColor(Color.WHITE);
|
||||
g2d.fillPolygon(elementsThree);
|
||||
}
|
||||
|
||||
}
|
108
src/DrawingCruiser.java
Normal file
108
src/DrawingCruiser.java
Normal file
@ -0,0 +1,108 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.geom.Ellipse2D;
|
||||
import java.util.*;
|
||||
|
||||
public class DrawingCruiser {
|
||||
private EntityCruiser cruiser; //Класс-сущность
|
||||
public EntityCruiser GetCruiser(){return cruiser;}
|
||||
public int _startPosX; //Координаты отрисовки по оси x
|
||||
public int _startPosY; //Координаты отрисовки по оси y
|
||||
private Integer _pictureWidth = null; //Ширина окна
|
||||
private Integer _pictureHeight = null; //Высота окна
|
||||
private final int _cruiserWidth = 150; //Ширина отрисовки крейсера
|
||||
private final int _cruiserHeight = 60; //Высота отрисовки крейсера
|
||||
private DrawBlock drawBlock = new DrawBlock();
|
||||
|
||||
//Инициализация
|
||||
public void Init(int speed, float weight, Color bodyColor, boolean rocketMines, boolean helipad)
|
||||
{
|
||||
cruiser = new EntityCruiser();
|
||||
cruiser.Init(speed,weight,bodyColor, rocketMines, helipad);
|
||||
Random random = new Random();
|
||||
drawBlock.SetBlockCount(random.nextInt(1, 4));
|
||||
}
|
||||
|
||||
//Начальные коордитанты
|
||||
public void SetPosition(int x, int y, int width, int height)
|
||||
{
|
||||
if (width < _cruiserWidth || height < _cruiserHeight) return;
|
||||
Random random = new Random();
|
||||
_startPosX = x < 0 || x + _cruiserWidth > width ? random.nextInt(0, width - _cruiserWidth) : x;
|
||||
_startPosY = y < 0 || y + _cruiserHeight > height ? random.nextInt(0, height - _cruiserHeight) : y;
|
||||
_pictureWidth = width;
|
||||
_pictureHeight = height;
|
||||
}
|
||||
|
||||
//Движение транспорта по координатам
|
||||
public void MoveTransport(Direction direction)
|
||||
{
|
||||
if (_pictureWidth == null || _pictureHeight == null) return;
|
||||
switch (direction)
|
||||
{
|
||||
case Left: //Влево
|
||||
if (_startPosX - cruiser.GetStep() > 0) _startPosX -= cruiser.GetStep();
|
||||
break;
|
||||
case Up: //Вверх
|
||||
if (_startPosY - cruiser.GetStep() > 0) _startPosY -= cruiser.GetStep();
|
||||
break;
|
||||
case Right: //Вправо
|
||||
if (_startPosX + _cruiserWidth + cruiser.GetStep() < _pictureWidth) _startPosX += cruiser.GetStep();
|
||||
break;
|
||||
case Down: //Вниз
|
||||
if (_startPosY + _cruiserHeight + cruiser.GetStep() < _pictureHeight) _startPosY += cruiser.GetStep();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//Отрисовка транспорта
|
||||
public void DrawTransport(Graphics g)
|
||||
{
|
||||
if (GetCruiser() == null) return;
|
||||
|
||||
if (_startPosX < 0 || _startPosY < 0 || _pictureWidth == null || _pictureHeight == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Graphics2D g2d = (Graphics2D) g;
|
||||
g2d.setColor(cruiser.GetBodyColor());
|
||||
// палуба
|
||||
Polygon paluba = new Polygon();
|
||||
paluba.addPoint(_startPosX + 10,_startPosY);
|
||||
paluba.addPoint(_startPosX + 110,_startPosY);
|
||||
paluba.addPoint(_startPosX + 160,_startPosY + 30);
|
||||
paluba.addPoint(_startPosX + 110,_startPosY + 60);
|
||||
paluba.addPoint(_startPosX + 10,_startPosY + 60);
|
||||
g2d.fillPolygon(paluba);
|
||||
// элементы
|
||||
Polygon elements = new Polygon();
|
||||
elements.addPoint(_startPosX + 50,_startPosY + 20);
|
||||
elements.addPoint(_startPosX + 70,_startPosY + 20);
|
||||
elements.addPoint(_startPosX + 70,_startPosY + 10);
|
||||
elements.addPoint(_startPosX + 90,_startPosY + 10);
|
||||
elements.addPoint(_startPosX + 90,_startPosY + 50);
|
||||
elements.addPoint(_startPosX + 70,_startPosY + 50);
|
||||
elements.addPoint(_startPosX + 70,_startPosY + 40);
|
||||
elements.addPoint(_startPosX + 50,_startPosY + 40);
|
||||
g2d.setColor(Color.BLACK);
|
||||
g2d.fillPolygon(elements);
|
||||
g2d.fill(new Ellipse2D.Double(_startPosX + 100, _startPosY + 20, 20, 20));
|
||||
|
||||
// турбины
|
||||
g2d.setColor(Color.BLACK);
|
||||
g2d.fillRect(_startPosX, _startPosY + 10, 10, 20);
|
||||
g2d.fillRect(_startPosX, _startPosY + 35, 10, 20);
|
||||
// шахты
|
||||
if (cruiser.GetRocketMines()) {
|
||||
g2d.setColor(Color.green);
|
||||
g2d.fillRect(_startPosX + 15, _startPosY + 10, 10, 15);
|
||||
g2d.fillRect(_startPosX + 30, _startPosY + 10, 10, 15);
|
||||
}
|
||||
// верт площадка
|
||||
if (cruiser.GetHelipad()) {
|
||||
g2d.setColor(Color.ORANGE);
|
||||
g2d.fill(new Ellipse2D.Double(_startPosX + 15, _startPosY + 25, 25, 25));
|
||||
drawBlock.DrawningBlock(_startPosX, _startPosY, _cruiserWidth, g2d, cruiser.GetBodyColor());
|
||||
}
|
||||
}
|
||||
}
|
31
src/EntityCruiser.java
Normal file
31
src/EntityCruiser.java
Normal file
@ -0,0 +1,31 @@
|
||||
import java.awt.*;
|
||||
import java.util.*;
|
||||
|
||||
public class EntityCruiser {
|
||||
private int Speed; //Скорость
|
||||
private float Weight; //Вес
|
||||
private Color BodyColor; //Цвет
|
||||
private float Step; //Шаг при перемещении
|
||||
private boolean Helipad; //Наличие верт. площадки
|
||||
private boolean RocketMines; //Наличие шахт
|
||||
|
||||
//Инициализация
|
||||
public void Init(int speed, float weight, Color bodyColor, boolean rocketMines, boolean helipad)
|
||||
{
|
||||
Random random = new Random();
|
||||
Speed = speed <= 0 ? random.nextInt(50, 150) : speed;
|
||||
Weight = weight <= 0 ? random.nextInt(50, 150) : weight;
|
||||
BodyColor = bodyColor;
|
||||
RocketMines = rocketMines;
|
||||
Helipad = helipad;
|
||||
Step = Speed * 100 / Weight;
|
||||
}
|
||||
public boolean GetHelipad() {return Helipad;}
|
||||
public boolean GetRocketMines() {return RocketMines;}
|
||||
public Color GetBodyColor(){
|
||||
return BodyColor;
|
||||
}
|
||||
public float GetStep(){
|
||||
return Step;
|
||||
}
|
||||
}
|
111
src/FormCruiser.java
Normal file
111
src/FormCruiser.java
Normal file
@ -0,0 +1,111 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.*;
|
||||
|
||||
public class FormCruiser{
|
||||
private DrawingCruiser _drawingCruiser;
|
||||
Canvas canv;
|
||||
public void Draw(){
|
||||
canv.repaint();
|
||||
}
|
||||
public FormCruiser(){
|
||||
JFrame frame = new JFrame("Cruiser");
|
||||
JButton buttonCreate = new JButton("Создать");
|
||||
buttonCreate.setFocusPainted(false);
|
||||
buttonCreate.setContentAreaFilled(false);
|
||||
JButton buttonUp = new JButton();
|
||||
buttonUp.setFocusPainted(false);
|
||||
buttonUp.setContentAreaFilled(false);
|
||||
buttonUp.setName("up");
|
||||
buttonUp.setIcon(new ImageIcon(((new ImageIcon("src/Images/totop.png")).getImage()).getScaledInstance(35, 35, java.awt.Image.SCALE_SMOOTH)));
|
||||
JButton buttonDown = new JButton();
|
||||
buttonDown.setFocusPainted(false);
|
||||
buttonDown.setContentAreaFilled(false);
|
||||
buttonDown.setName("down");
|
||||
buttonDown.setIcon(new ImageIcon(((new ImageIcon("src/Images/todown.png")).getImage()).getScaledInstance(35, 35, java.awt.Image.SCALE_SMOOTH)));
|
||||
JButton buttonLeft = new JButton();
|
||||
buttonLeft.setFocusPainted(false);
|
||||
buttonLeft.setContentAreaFilled(false);
|
||||
buttonLeft.setName("left");
|
||||
buttonLeft.setIcon(new ImageIcon(((new ImageIcon("src/Images/toleft.png")).getImage()).getScaledInstance(35, 35, java.awt.Image.SCALE_SMOOTH)));
|
||||
JButton buttonRight = new JButton();
|
||||
buttonRight.setFocusPainted(false);
|
||||
buttonRight.setContentAreaFilled(false);
|
||||
buttonRight.setName("right");
|
||||
buttonRight.setIcon(new ImageIcon(((new ImageIcon("src/Images/toright.png")).getImage()).getScaledInstance(35, 35, java.awt.Image.SCALE_SMOOTH)));
|
||||
buttonCreate.addActionListener(
|
||||
e -> {
|
||||
System.out.println(e.getActionCommand());
|
||||
Random random = new Random();
|
||||
_drawingCruiser = new DrawingCruiser();
|
||||
_drawingCruiser.Init(
|
||||
random.nextInt(200) + 100,
|
||||
random.nextInt(2000) + 1000,
|
||||
new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)),
|
||||
random.nextBoolean(), random.nextBoolean());
|
||||
_drawingCruiser.SetPosition(random.nextInt(100-30+1)+30, //начальные и конечные значения для рандома
|
||||
random.nextInt(90-20+1)+20 //начальные и конечные значения для рандома
|
||||
,this.canv.getWidth(), this.canv.getHeight());
|
||||
canv._drawingCruiser = _drawingCruiser;
|
||||
Draw();
|
||||
}
|
||||
);
|
||||
ActionListener actionListener = e -> {
|
||||
if (_drawingCruiser == null){
|
||||
return;
|
||||
}
|
||||
switch ((((JButton)(e.getSource())).getName())){
|
||||
case "up":
|
||||
_drawingCruiser.MoveTransport(Direction.Up);
|
||||
break;
|
||||
case "down":
|
||||
_drawingCruiser.MoveTransport(Direction.Down);
|
||||
break;
|
||||
case "left":
|
||||
_drawingCruiser.MoveTransport(Direction.Left);
|
||||
break;
|
||||
case "right":
|
||||
_drawingCruiser.MoveTransport(Direction.Right);
|
||||
break;
|
||||
}
|
||||
Draw();
|
||||
};
|
||||
buttonUp.addActionListener(actionListener);
|
||||
buttonDown.addActionListener(actionListener);
|
||||
buttonLeft.addActionListener(actionListener);
|
||||
buttonRight.addActionListener(actionListener);
|
||||
frame.setSize(910, 500);
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
frame.setLayout(null);
|
||||
canv = new Canvas();
|
||||
canv.setBounds(0, 0, 895, 500 - 40); // 40 - const, высота панели сверху
|
||||
buttonCreate.setBounds(20, 420, 100, 40);
|
||||
buttonUp.setBounds(800, 380, 40, 40);
|
||||
buttonDown.setBounds(800, 420, 40, 40);
|
||||
buttonLeft.setBounds(760, 420, 40, 40);
|
||||
buttonRight.setBounds(840, 420, 40, 40);
|
||||
frame.add(canv);
|
||||
frame.add(buttonCreate);
|
||||
frame.add(buttonUp);
|
||||
frame.add(buttonDown);
|
||||
frame.add(buttonLeft);
|
||||
frame.add(buttonRight);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
class Canvas extends JComponent{
|
||||
public DrawingCruiser _drawingCruiser;
|
||||
public Canvas(){}
|
||||
|
||||
public void paintComponent(Graphics g){
|
||||
if (_drawingCruiser == null){
|
||||
return;
|
||||
}
|
||||
super.paintComponents(g);
|
||||
Graphics2D g2d = (Graphics2D)g;
|
||||
_drawingCruiser.DrawTransport(g2d);
|
||||
super.repaint();
|
||||
}
|
||||
}
|
||||
}
|
BIN
src/Images/todown.png
Normal file
BIN
src/Images/todown.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 888 B |
BIN
src/Images/toleft.png
Normal file
BIN
src/Images/toleft.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 904 B |
BIN
src/Images/toright.png
Normal file
BIN
src/Images/toright.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 892 B |
BIN
src/Images/totop.png
Normal file
BIN
src/Images/totop.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 895 B |
@ -1,5 +1,5 @@
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Hello world!");
|
||||
FormCruiser fm = new FormCruiser();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user