From 3eb65956b1d16f0a6564f47d3430b7aea572fa9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4?= Date: Fri, 24 Nov 2023 16:28:33 +0400 Subject: [PATCH] CreateProject --- src/Block.java | 22 ++++++++ src/Direction.java | 14 +++++ src/DrawBlock.java | 45 ++++++++++++++++ src/DrawingCruiser.java | 108 ++++++++++++++++++++++++++++++++++++++ src/EntityCruiser.java | 31 +++++++++++ src/FormCruiser.java | 111 ++++++++++++++++++++++++++++++++++++++++ src/Images/todown.png | Bin 0 -> 888 bytes src/Images/toleft.png | Bin 0 -> 904 bytes src/Images/toright.png | Bin 0 -> 892 bytes src/Images/totop.png | Bin 0 -> 895 bytes src/Main.java | 2 +- 11 files changed, 332 insertions(+), 1 deletion(-) create mode 100644 src/Block.java create mode 100644 src/Direction.java create mode 100644 src/DrawBlock.java create mode 100644 src/DrawingCruiser.java create mode 100644 src/EntityCruiser.java create mode 100644 src/FormCruiser.java create mode 100644 src/Images/todown.png create mode 100644 src/Images/toleft.png create mode 100644 src/Images/toright.png create mode 100644 src/Images/totop.png diff --git a/src/Block.java b/src/Block.java new file mode 100644 index 0000000..3ee5968 --- /dev/null +++ b/src/Block.java @@ -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; + } +} \ No newline at end of file diff --git a/src/Direction.java b/src/Direction.java new file mode 100644 index 0000000..ac5e0ba --- /dev/null +++ b/src/Direction.java @@ -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; + } +} diff --git a/src/DrawBlock.java b/src/DrawBlock.java new file mode 100644 index 0000000..8fe9ed0 --- /dev/null +++ b/src/DrawBlock.java @@ -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); + } + +} \ No newline at end of file diff --git a/src/DrawingCruiser.java b/src/DrawingCruiser.java new file mode 100644 index 0000000..2e69ea4 --- /dev/null +++ b/src/DrawingCruiser.java @@ -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()); + } + } +} \ No newline at end of file diff --git a/src/EntityCruiser.java b/src/EntityCruiser.java new file mode 100644 index 0000000..f7de679 --- /dev/null +++ b/src/EntityCruiser.java @@ -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; + } +} diff --git a/src/FormCruiser.java b/src/FormCruiser.java new file mode 100644 index 0000000..c953f41 --- /dev/null +++ b/src/FormCruiser.java @@ -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("Cruiser_Hard/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("Cruiser_Hard/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("Cruiser_Hard/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("Cruiser_Hard/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(); + } + } +} \ No newline at end of file diff --git a/src/Images/todown.png b/src/Images/todown.png new file mode 100644 index 0000000000000000000000000000000000000000..6ebb44dedd4d1d883cfa38e58e4606160834638c GIT binary patch literal 888 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX0wgC|rfC8xmUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+ z;1OBOz`!jG!i)^F=12eq*-JcqUD=;;3vkH_9Pv3T57dEak-aeC_2^Zp^>BJ3Z| z?@TnQG;3Buz?~B}zDg7xJhvm)C)<3A{K8E}nI-AoF&RxCk2~=?l`gDr*l2in z8>grEG`53FN|?-eE=#Rw>eTVdD*VWB-$su0{JT5F`@jF*`+Q!tpW7v--&-sfU5zWP zSekOCL*Do2`l9S*hqz6xpYE8mzo#-y(9-wQw}>w%Y+du0M1?KqoUEt0LiAYQn$Uua zOP23SxxAovou>4aRa#$P$nx!6`exU$lobbMRrjv?J3sWb;p042o7bx*O*ULPJMu-a z@w)xO^DnM^qkVANg%_q(XI@2lmv$F!zbw4bGbw*&fx)A{*WQ1+-F8TE|4s$x&4J8i zd&DhDF0T07xVT8}SGo7f>ZE(p{8ux%Mb7**70dYEI+rt}x42EVZ>`P8n8xF5$%}6L zMqPN`eB;>NU%HVW9rV=xv|T(9clq@qW?j2Um)BRz#ywtRyy@S!6G1*djO9P~&*Pf* zIWGER($w1CQoFL4l-OyLA8_nTIqJRq>hT39yWVd)GpD%osp+>$`--WjxZ-E~tL3~+ zRQfj6H-hu-7jEaeunJw^n1#VSW=}N>nXzjVMV;EJ?LWE=mPb3`PbmdKI;Vst0Gf(`ZU6uP literal 0 HcmV?d00001 diff --git a/src/Images/toleft.png b/src/Images/toleft.png new file mode 100644 index 0000000000000000000000000000000000000000..45dd05f68e8a757b67da77472968cb75d37bff44 GIT binary patch literal 904 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX0wgC|rfC8xmUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+ z;1OBOz`!jG!i)^F=12eq*-JcqUD=;;3vkJ^yjf8F0H~?j)5S5w;&ks--;62YB5V)R z(Zz!YXv3*9i5@E%sJ>pikG38y+HTY8zmoI&(_?R{qp9W<@eh2_idjqJEFSQdwv{i z{;9;9YYLOs&Hfnw_G$>vjkm(qTdNc9^tf($9dse{VyeB?an5<3o9l#6`MsDtIa1m0 zWX9)4;Ztg&sm>Spmj6k-V%F>U%8gY#bndm8Eq$|$MV`fq-(Ju)sW0lOX7RVI4@M_% zEPix`TV3<-sz6w}FIe?xbI|^$eSx};FWA`Mc6?QNy@xYeY5#qV+hQ%-EFMkN zv`+dZ7u>e=McL_-3EKoqt~S+no^ijkX=a_V9goB2zKD&l^qu3pBeu`}CMkY*0{0Us zM{%A^u7K@Q#hvkU{aNPL$`wd>9V^fKbReAb+KJbDnoAdaSo(9zoTD>#-LBK!@lxIY zRnzn*ml(g=D$6~pZGTl#?<=K~-T(4m;HFnIuFD=P)OJj{S9C0|KepHRWpKGph5xJQ(YeY#(Vo9o1 za#1RfVlXl=GSW3P)HO5QHncJ@(Kax$GB7ZcZec{xkei>9nO2EggS(r}UZ4gB MPgg&ebxsLQ0CVGs)c^nh literal 0 HcmV?d00001 diff --git a/src/Images/toright.png b/src/Images/toright.png new file mode 100644 index 0000000000000000000000000000000000000000..1f21a2ff0d20eb4c9d04f750ba99aab7e8e719d0 GIT binary patch literal 892 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX0wgC|rfC8xmUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+ z;1OBOz`!jG!i)^F=12eq*-JcqUD=;;3veh{%$WMq6sRfR)5S5w;&kuT``%a6W!OJl z|2}82UjH*er`L-PYH2rF9V!#%yXzXB93Gn!^j7II-?Uh_yGLc3S>2wxx;%{vs6Qa~ zm+_!f^VA3Zj(*b@%uAXaMLGU`>t9VE*rV_ zWTbN2*3~_W^RBFZvFWbSM)&DAAFo=}{pxVQUU^@Qi1f7)%P%i^{mP5=`>YR7wN`pg zyq0yTwfqsY>@txh_q=0Y9W!)&tG)DI=8dNwibbb{UqpuU-rQL7e!JW)*;^N0sJFUQ z-J8Ep@WO)oHv_iKzOymoR$%JJCp~h1w=LbW;$!iOubbs65}V)4^zHo{zx}Dn^0@&I z=Y%VMC~x$C^5*NAgbE$Q-PZLZ~KPO45iUHddyXGfw=%hg$r9i0wpTz@*# zmHV8_v;3V2_B)nW@xIz)yh1EFD@NUXjcq(dc^cwrvIeqre8d__HEi28<>8C=TW-CTJONy z*7w(zTwHSPf1aA1j%r$xWemSk(&nscx92NcK>deC1y2-116+7ewpr^q)C`z|^Q(;u=wsl30>zm0Xkxq!^40jEr;* z4RsC8LJTadjE$^J&9n`StPBj8f))HxH00)|WTsW()=NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+ z;1OBOz`!jG!i)^F=12eq*-JcqUD=;;3velkGkq&+0BS1oba4!^I6d{Mug{clkz*h4 z*9gjbH7;q~v7$31%iL(kJeF^6+j>{3sinMNNxizH(>m%_tHgeDDUrg9>vk)s>D{?7 zgg1x(9 zjq=^r|8>k*on7?Kql0x>-%FEM`r%tc{I*I=zN-JuSB?PNyRcbMC!eYnOD)gZJ>#!2By)&VSzJ{H)}SWUJrjeZq_GCLi7%virOt zZ{yVXZ#N!p(Ca<6mp3Blc~5+eaKMH7W2P@3tvh+(jbVIs;^|$E@}XzVs-E!e-z}L? zC4F~O>fwZ`RaZJR<9?VOD3FW&ykJFK{KjW{MDM-0?OJ+xLfZ2^IxD6>&YXRq*FJ6 zgkkuevw^u{i;aXH{nO=HCnaM1G)eI6QHnB1?);2J*GB60=P__+4LvDUbW?Cg~4Qg-Cfox##boFyt=akR{01l*j AmH+?% literal 0 HcmV?d00001 diff --git a/src/Main.java b/src/Main.java index 3e59c38..91a9371 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,5 +1,5 @@ public class Main { public static void main(String[] args) { - System.out.println("Hello world!"); + FormCruiser fm = new FormCruiser(); } } \ No newline at end of file