ПИбд-12, Шляпин Юрий Александрович, 1 сложная #1

Open
yu.shlyapin wants to merge 3 commits from FirstLab into master
19 changed files with 508 additions and 34 deletions

7
.idea/encodings.xml generated Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

124
.idea/uiDesigner.xml generated Normal file
View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@ -60,7 +60,7 @@
<!-- Default configuration for running with: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
<mainClass>com.example.aircraftcarrier/com.example.aircraftcarrier.HelloApplication
<mainClass>com.example.aircraftcarrier/AircraftCarrierApplication
</mainClass>
<launcher>app</launcher>
<jlinkZipName>app</jlinkZipName>

View File

@ -1,17 +1,19 @@
package com.example.aircraftcarrier;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
public class HelloApplication extends Application {
public class AircraftCarrierApplication extends Application {
@Override
public void start(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 320, 240);
FXMLLoader fxmlLoader = new FXMLLoader(AircraftCarrierApplication.class.getResource("/com/example/aircraftcarrier/AircraftCarrierView.fxml"));
Scene scene = new Scene(fxmlLoader.load());
stage.setTitle("Hello!");
stage.setScene(scene);
stage.show();

View File

@ -0,0 +1,109 @@
package com.example.aircraftcarrier;
import com.example.aircraftcarrier.Logic.Enum.DirectionType;
import com.example.aircraftcarrier.Logic.Drawing.DrawingAircraftCarrier;
import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.canvas.Canvas;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle;
public class AircraftCarrierController implements Initializable {
Random random = new Random();
DrawingAircraftCarrier drawingAircraftCarrier;
@FXML
private AnchorPane Root;
@FXML
private Canvas canvas;
@FXML
private TextField inputCountBlocks;
@FXML
protected void buttonCreate_Click() {
drawingAircraftCarrier = new DrawingAircraftCarrier();
int inputCountBlock;
try {
inputCountBlock = Integer.parseInt(inputCountBlocks.getCharacters().toString());
} catch (NumberFormatException ignored) {
inputCountBlock = 0;
}
drawingAircraftCarrier.Init(
random.nextInt(100) + 100,
random.nextInt(1000) + 1000,
Color.rgb(
random.nextInt(256),
random.nextInt(256),
random.nextInt(256)
),
Color.rgb(
random.nextInt(256),
random.nextInt(256),
random.nextInt(256)
),
random.nextBoolean(),
random.nextBoolean(),
inputCountBlock
);
drawingAircraftCarrier.setCanvasWidth((int) canvas.getWidth());
drawingAircraftCarrier.setCanvasHeight((int) canvas.getHeight());
if (
drawingAircraftCarrier.setPosition(
random.nextInt(50) + 10,
random.nextInt(50) + 10
)
) {
drawingAircraftCarrier.Draw(canvas.getGraphicsContext2D());
}
}
@FXML
protected void MoveEvent(Event e) {
if (drawingAircraftCarrier == null) return;
DirectionType directionType;
if (e instanceof KeyEvent keyEvent) {
directionType = switch (keyEvent.getCode()) {
case KeyCode.W -> DirectionType.Up;
case KeyCode.S -> DirectionType.Down;
case KeyCode.A -> DirectionType.Left;
case KeyCode.D -> DirectionType.Right;
default -> DirectionType.Unknown;
};
} else {
String direction = ((Button)e.getSource()).getId();
directionType = switch (direction) {
case "up" -> DirectionType.Up;
case "down" -> DirectionType.Down;
case "left" -> DirectionType.Left;
case "right" -> DirectionType.Right;
default -> DirectionType.Unknown;
};
}
if (directionType == DirectionType.Unknown) return;
drawingAircraftCarrier.Move(directionType);
drawingAircraftCarrier.Draw(canvas.getGraphicsContext2D());
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
System.out.println("start");
canvas.widthProperty().bind(Root.widthProperty());
canvas.heightProperty().bind(Root.heightProperty());
}
}

View File

@ -1,14 +0,0 @@
package com.example.aircraftcarrier;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
public class HelloController {
@FXML
private Label welcomeText;
@FXML
protected void onHelloButtonClick() {
welcomeText.setText("Welcome to JavaFX Application!");
}
}

View File

@ -0,0 +1,107 @@
package com.example.aircraftcarrier.Logic.Drawing;
import com.example.aircraftcarrier.Logic.Enum.BlockCount;
import com.example.aircraftcarrier.Logic.Enum.DirectionType;
import com.example.aircraftcarrier.Logic.Entity.EntityAircraftCarrier;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
public class DrawingAircraftCarrier {
public EntityAircraftCarrier aircraftCarrier;
public DrawingBlock drawingBlock;
private int x;
private int y;
private int widthCanvas;
private int heightCanvas;
private static final int widthPicture = 250;
private static final int heightPicture = 100;
public void Init(
int speed,
int weight,
Color primaryColor,
Color secondaryColor,
boolean hasDeck,
boolean hasСabin,
int countBlock
) {
aircraftCarrier = new EntityAircraftCarrier();
aircraftCarrier.Init(speed,
weight,
primaryColor,
secondaryColor,
hasDeck,
hasСabin
);
drawingBlock = new DrawingBlock();
drawingBlock.setBlockCount(countBlock);
}
public void setDrawingBlock(int count) {
drawingBlock.setBlockCount(count);
}
public void setCanvasWidth(int width) {
if (x+widthPicture > width) return;
widthCanvas = width;
}
public void setCanvasHeight(int height) {
if (y+heightPicture > height) return;
heightCanvas = height;
}
public boolean setPosition(int newX, int newY) {
if (newX < 0 || newY < 0 || newX + widthPicture > widthCanvas || newY + heightPicture > heightCanvas) return false;
x = newX;
y = newY;
return true;
}
public void Draw(GraphicsContext gc) {
gc.clearRect(0,0,widthCanvas,heightCanvas);
double[] X = new double[]{x,x+200,x+250,x+200,x};
double[] Y = new double[]{y,y,y+50,y+100,y+100};
gc.strokePolygon(X, Y,5);
gc.strokeOval(x+175,y+35,30,30);
if (aircraftCarrier.isHasDeck()) {
gc.setFill(aircraftCarrier.getPrimaryColor());
gc.fillRect(x + 50, y + 40, 55, 20);
}
if (aircraftCarrier.isHasСabin()) {
gc.setFill(aircraftCarrier.getSecondaryColor());
gc.fillRect(x + 105, y + 25, 30, 50);
}
if (drawingBlock == null) return;
drawingBlock.Draw(gc,x,y,aircraftCarrier.getSecondaryColor());
}
public void Move(DirectionType direction) {
switch (direction) {
case Up:
if (y - aircraftCarrier.Step > 0) {
y -= aircraftCarrier.Step;
}
break;
case Down:
if (y + aircraftCarrier.Step + heightPicture < heightCanvas) {
y += aircraftCarrier.Step;
}
break;
case Right:
if (x + aircraftCarrier.Step + widthPicture < widthCanvas) {
x += aircraftCarrier.Step;
}
break;
case Left:
if (x - aircraftCarrier.Step > 0) {
x -= aircraftCarrier.Step;
}
break;
}
}
}

View File

@ -0,0 +1,31 @@
package com.example.aircraftcarrier.Logic.Drawing;
import com.example.aircraftcarrier.Logic.Enum.BlockCount;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
public class DrawingBlock {
private BlockCount blockCount;
public void setBlockCount(int blockCountValue) {
this.blockCount = BlockCount.ConvertToBlockCount(blockCountValue);
}
private void DrawTwoBlock(GraphicsContext gc, int x, int y, Color color) {
gc.setFill(color);
gc.fillRect(x,y,10,10);
gc.fillRect(x+15,y,10,10);
}
public void Draw(GraphicsContext gc, int x, int y, Color color) {
switch (blockCount) {
case Six:
DrawTwoBlock(gc,x+20,y+50,color);
case Four:
DrawTwoBlock(gc,x+20,y+35,color);
case Two:
DrawTwoBlock(gc,x+20,y+20,color);
break;
}
}
}

View File

@ -0,0 +1,55 @@
package com.example.aircraftcarrier.Logic.Entity;
import javafx.scene.paint.Color;
public class EntityAircraftCarrier {
private int Speed;
private double Weight;
public int Step;
private Color PrimaryColor;
private Color SecondaryColor;
private boolean HasDeck;
private boolean HasСabin;
public void Init(
int speed,
double weight,
Color primaryColor,
Color secondaryColor,
boolean hasDeck,
boolean hasСabin
) {
this.Speed = speed;
this.Weight = weight;
this.PrimaryColor = primaryColor;
this.SecondaryColor = secondaryColor;
this.HasDeck = hasDeck;
this.HasСabin = hasСabin;
this.Step = (int) (Speed * 100 / Weight);
}
public int getSpeed() {
return Speed;
}
public double getWeight() {
return Weight;
}
public Color getPrimaryColor() {
return PrimaryColor;
}
public Color getSecondaryColor() {
return SecondaryColor;
}
public boolean isHasDeck() {
return HasDeck;
}
public boolean isHasСabin() {
return HasСabin;
}
}

View File

@ -0,0 +1,31 @@
package com.example.aircraftcarrier.Logic.Enum;
public enum BlockCount {
Two(2),
Four(4),
Six(6),
Other();
private Integer count;
BlockCount() {
this.count = null;
}
BlockCount(int count) {
this.count = count;
}
public static BlockCount ConvertToBlockCount(int count) {
return switch (count) {
case 2 -> Two;
case 4 -> Four;
case 6 -> Six;
default -> Other;
};
}
public Integer getCount() {
return count;
}
}

View File

@ -0,0 +1,9 @@
package com.example.aircraftcarrier.Logic.Enum;
public enum DirectionType {
Unknown,
Up,
Down,
Right,
Left;
}

View File

@ -5,4 +5,10 @@ module com.example.aircraftcarrier {
opens com.example.aircraftcarrier to javafx.fxml;
exports com.example.aircraftcarrier;
exports com.example.aircraftcarrier.Logic.Drawing;
opens com.example.aircraftcarrier.Logic.Drawing to javafx.fxml;
exports com.example.aircraftcarrier.Logic.Entity;
opens com.example.aircraftcarrier.Logic.Entity to javafx.fxml;
exports com.example.aircraftcarrier.Logic.Enum;
opens com.example.aircraftcarrier.Logic.Enum to javafx.fxml;
}

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.canvas.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane fx:id="Root" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onKeyPressed="#MoveEvent" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.aircraftcarrier.AircraftCarrierController">
<children>
<Canvas fx:id="canvas" height="400.0" width="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
<Button layoutX="14.0" layoutY="361.0" mnemonicParsing="false" onAction="#buttonCreate_Click" text="Создать" AnchorPane.bottomAnchor="20.0" AnchorPane.leftAnchor="20.0" />
<Button fx:id="up" layoutX="524.4" layoutY="324.4" minHeight="25.0" minWidth="25.0" mnemonicParsing="false" onAction="#MoveEvent" style="-fx-background-image: url(&quot;up-arrow.png&quot;); -fx-background-size: stretch;" AnchorPane.bottomAnchor="50.0" AnchorPane.rightAnchor="50.0" />
<Button fx:id="right" layoutX="554.4" layoutY="354.4" minHeight="25.0" minWidth="25.0" mnemonicParsing="false" onAction="#MoveEvent" style="-fx-background-image: url(&quot;right-arrow.png&quot;); -fx-background-size: stretch;" AnchorPane.bottomAnchor="20.0" AnchorPane.rightAnchor="20.0" />
<Button fx:id="down" layoutX="524.4" layoutY="354.4" minHeight="25.0" minWidth="25.0" mnemonicParsing="false" onAction="#MoveEvent" style="-fx-background-image: url(&quot;down-arrow.png&quot;); -fx-background-size: stretch;" AnchorPane.bottomAnchor="20.0" AnchorPane.rightAnchor="50.0" />
<Button fx:id="left" layoutX="494.4" layoutY="354.4" minHeight="25.0" minWidth="25.0" mnemonicParsing="false" onAction="#MoveEvent" style="-fx-background-image: url(&quot;left-arrow.png&quot;); -fx-background-size: stretch;" AnchorPane.bottomAnchor="20.0" AnchorPane.rightAnchor="80.0" />
<TextField fx:id="inputCountBlocks" layoutX="446.0" layoutY="14.0" promptText="количество блоков" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="20.0" />
</children>
</AnchorPane>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>
<VBox alignment="CENTER" spacing="20.0" xmlns:fx="http://javafx.com/fxml"
fx:controller="com.example.aircraftcarrier.HelloController">
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/>
</padding>
<Label fx:id="welcomeText"/>
<Button text="Hello!" onAction="#onHelloButtonClick"/>
</VBox>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB