Compare commits

..

14 Commits
main ... lab6

44 changed files with 2729 additions and 0 deletions

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

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

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/PIbd-22_Fedorenko_G.Y._Hydroplane_HARD.iml" filepath="$PROJECT_DIR$/.idea/PIbd-22_Fedorenko_G.Y._Hydroplane_HARD.iml" />
</modules>
</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="" vcs="Git" />
</component>
</project>

72
.idea/workspace.xml generated Normal file
View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="91fba623-49d8-4a60-90d5-98344ab7724a" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_BRANCH_BY_REPOSITORY">
<map>
<entry key="$PROJECT_DIR$" value="main" />
</map>
</option>
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectId" id="2X54F8kO9n4Aar8mYbPV5a6SUzU" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"last_opened_file_path": "C:/RPP HARD/PIbd-22_Fedorenko_G.Y._Hydroplane_HARD/Hydroplane"
}
}]]></component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="91fba623-49d8-4a60-90d5-98344ab7724a" name="Changes" comment="" />
<created>1697905501231</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1697905501231</updated>
</task>
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State>
<option name="FILTERS">
<map>
<entry key="branch">
<value>
<list>
<option value="origin/lab1" />
</list>
</value>
</entry>
</map>
</option>
</State>
</value>
</entry>
</map>
</option>
</component>
</project>

3
Hydroplane/.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

13
Hydroplane/.idea/compiler.xml generated Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="Hydroplane" />
</profile>
</annotationProcessing>
</component>
</project>

7
Hydroplane/.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>

20
Hydroplane/.idea/jarRepositories.xml generated Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>

14
Hydroplane/.idea/misc.xml generated Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="19" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

124
Hydroplane/.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
Hydroplane/.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>

17
Hydroplane/pom.xml Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Hydroplane</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>19</maven.compiler.source>
<maven.compiler.target>19</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

View File

@ -0,0 +1,79 @@
package org.example;
public abstract class AbstractStrategy {
private IMoveableObject _moveableObject;
private Status _state = Status.NotInit;
protected int FieldWidth;
protected int FieldHeight;
public Status GetStatus() { return _state; }
public void SetData(IMoveableObject moveableObject, int width, int height)
{
if (moveableObject == null)
{
_state = Status.NotInit;
return;
}
_state = Status.InProgress;
_moveableObject = moveableObject;
FieldWidth = width;
FieldHeight = height;
}
public void MakeStep()
{
if (_state != Status.InProgress)
{
return;
}
if (IsTargetDestinaion())
{
_state = Status.Finish;
return;
}
MoveToTarget();
}
protected boolean MoveLeft() { return MoveTo(Direction.Left);}
protected boolean MoveRight() { return MoveTo(Direction.Right);}
protected boolean MoveUp() { return MoveTo(Direction.Up);}
protected boolean MoveDown() { return MoveTo(Direction.Down);}
protected ObjectParameters GetObjectParameters() { return _moveableObject.GetObjectPosition(); }
protected int GetStep()
{
if (_state != Status.InProgress)
{
return 0;
}
return _moveableObject.GetStep();
}
protected abstract void MoveToTarget();
protected abstract boolean IsTargetDestinaion();
private boolean MoveTo(Direction Direction)
{
if (_state != Status.InProgress)
{
return false;
}
if (_moveableObject.CheckCanMove(Direction))
{
_moveableObject.MoveObject(Direction);
return true;
}
return false;
}
}

View File

@ -0,0 +1,9 @@
package org.example;
public enum Direction {
Up,
Down,
Left,
Right;
}

View File

@ -0,0 +1,78 @@
package org.example;
import java.awt.*;
public class DrawingHydroplane extends DrawingPlane{
public DrawingHydroplane(int speed, float weight, Color bodyColor, int _numWindow, Color additionalColor, boolean boat, boolean bobber, int width, int height)
{
super(speed, weight, bodyColor, _numWindow, width, height);
_EntityPlane = new EntityHydroplane(speed, weight, bodyColor, additionalColor, boat, bobber, _numWindow);
}
public DrawingHydroplane(EntityPlane plane, IWindowDrawing _windowDrawing, int width, int height ){
super(plane, _windowDrawing, width, height);
if (height < _pictureHeight || width < _pictureWidth)
return;
_EntityPlane = plane;
}
public void SetPosition(int x, int y)
{
_startPosX = Math.min(x, _pictureWidth-_planeWidth);
_startPosY = Math.min(y, _pictureHeight-_planeHeight);
}
public void DrawTransport(Graphics2D g)
{
if (_EntityPlane == null)
{
return;
}
super.DrawTransport(g);
g.setColor(((EntityHydroplane)_EntityPlane).AdditionalColor);
g.fillPolygon(
new int[]{ _startPosX + 160, _startPosX + 130, _startPosX + 130 },
new int[]{ _startPosY + 40, _startPosY + 40, _startPosY + 25 },
3
);
g.fillRect(_startPosX + 65, _startPosY + 55, 5, 15);
g.fillRect(_startPosX + 125, _startPosY + 55, 5, 15);
g.drawLine(_startPosX + 65, _startPosY + 55, _startPosX + 65, _startPosY + 70);
g.drawLine(_startPosX + 70, _startPosY + 55, _startPosX + 70, _startPosY + 70);
g.drawLine(_startPosX + 125, _startPosY + 55, _startPosX + 125, _startPosY + 70);
g.drawLine(_startPosX + 130, _startPosY + 55, _startPosX + 130, _startPosY + 70);
if (((EntityHydroplane)_EntityPlane).Bobber) {
g.fillPolygon(
new int[]{ _startPosX + 55, _startPosX + 55, _startPosX + 155, _startPosX + 175 },
new int[]{ _startPosY + 70, _startPosY + 80, _startPosY + 80, _startPosY + 70 },
4
);
g.drawPolygon(
new int[]{ _startPosX + 55, _startPosX + 55, _startPosX + 155, _startPosX + 175 },
new int[]{ _startPosY + 70, _startPosY + 80, _startPosY + 80, _startPosY + 70 },
4
);
}
else {
g.fillOval(_startPosX + 60, _startPosY + 70, 15, 15);
g.fillOval(_startPosX + 120, _startPosY + 70, 15, 15);
g.drawOval(_startPosX + 60, _startPosY + 70, 15, 15);
g.drawOval(_startPosX + 120, _startPosY + 70, 15, 15);
}
if (((EntityHydroplane)_EntityPlane).Boat){
g.fillOval(_startPosX, _startPosY + 21, 32, 8);
g.drawOval(_startPosX, _startPosY + 21, 32, 8);
}
}
}

View File

@ -0,0 +1,149 @@
package org.example;
import java.awt.*;
import java.util.*;
public class DrawingPlane{
public IMoveableObject GetMoveableObject() { return new DrawningObjectPlane(this);}
protected IWindowDrawing windowDrawing;
public EntityPlane _EntityPlane;
public int _pictureWidth;
public int _pictureHeight;
protected int _startPosX;
protected int _startPosY;
protected int _planeWidth = 175;
protected int _planeHeight = 90;
public DrawingPlane(int speed, double weight, Color bodyColor, int _numWindow, int width, int height)
{
_pictureWidth = width;
_pictureHeight = height;
if (_pictureHeight < _planeHeight || _pictureWidth < _planeWidth)
return;
_EntityPlane = new EntityPlane(speed, weight, bodyColor, _numWindow);
Random random = new Random();
switch(random.nextInt(0, 3)){
case 0:
windowDrawing = new WindowDrawing();
break;
case 1:
windowDrawing = new WindowDrawingRect();
break;
case 2:
windowDrawing = new WindowDrawingTringle();
break;
default:
windowDrawing = new WindowDrawing();
break;
}
windowDrawing.setNumWindow(_numWindow);
}
public DrawingPlane(EntityPlane plane, IWindowDrawing _windowDrawing, int width, int height)
{
if (height < _planeHeight || width < _planeWidth)
return;
_pictureWidth = width;
_pictureHeight = height;
_EntityPlane = plane;
windowDrawing = _windowDrawing;
windowDrawing.setNumWindow(_EntityPlane.numWindow);
}
public void SetPosition(int x, int y)
{
_startPosX = Math.min(x, _pictureWidth-_planeWidth);
_startPosY = Math.min(y, _pictureHeight-_planeHeight);
}
public int GetPosX (){return _startPosX;}
public int GetPosY (){return _startPosY;}
public int GetWidth (){return _planeWidth;}
public int GetHeight (){return _planeHeight;}
public boolean CanMove(Direction direction)
{
if (_EntityPlane == null)
{
return false;
}
switch (direction)
{
case Left:
return _startPosX - _EntityPlane.Step > 0;
case Right:
return _startPosX + _planeWidth + _EntityPlane.Step < _pictureWidth;
case Up:
return _startPosY - _EntityPlane.Step > 0;
case Down:
return _startPosY + _planeHeight + _EntityPlane.Step < _pictureHeight;
default:
return false;
}
}
public void MoveTransport(Direction direction)
{
if (!CanMove(direction) || _EntityPlane == null)
{
return;
}
switch (direction)
{
case Left:
_startPosX -= (int)_EntityPlane.Step;
break;
case Up:
_startPosY -= (int)_EntityPlane.Step;
break;
case Right:
_startPosX += (int)_EntityPlane.Step;
break;
case Down:
_startPosY += (int)_EntityPlane.Step;
break;
}
}
public void DrawTransport(Graphics2D g)
{
if (_EntityPlane == null)
{
return;
}
g.setColor(_EntityPlane.BodyColor);
g.fillPolygon(
new int[]{ _startPosX + 5, _startPosX + 5, _startPosX + 130, _startPosX + 160, _startPosX + 130, _startPosX + 130, _startPosX + 55 },
new int[]{ _startPosY, _startPosY + 55, _startPosY + 55, _startPosY + 40, _startPosY + 40, _startPosY + 25, _startPosY + 25 },
7);
g.setColor(Color.black);
g.drawRect(_startPosX + 5, _startPosY + 25, 125, 30);
g.drawLine(_startPosX + 130, _startPosY + 25, _startPosX + 160, _startPosY + 40);
g.drawLine(_startPosX + 130, _startPosY + 55, _startPosX + 160, _startPosY + 40);
g.drawLine(_startPosX + 130, _startPosY + 40, _startPosX + 160, _startPosY + 40);
g.drawOval(_startPosX + 35, _startPosY + 43, 80, 7);
windowDrawing.Draw(_startPosX, _startPosY, Color.white, g);
}
}

View File

@ -0,0 +1,27 @@
package org.example;
public class DrawningObjectPlane implements IMoveableObject {
private DrawingPlane _drawingPlane = null;
public DrawningObjectPlane(DrawingPlane drawingPlane)
{
_drawingPlane = drawingPlane;
}
public ObjectParameters GetObjectPosition(){
if (_drawingPlane == null || _drawingPlane._EntityPlane ==
null)
{
return null;
}
return new ObjectParameters(_drawingPlane.GetPosX(),
_drawingPlane.GetPosY(), _drawingPlane.GetWidth(), _drawingPlane.GetHeight());
}
public int GetStep(){ return (int)_drawingPlane._EntityPlane.Step; }
public boolean CheckCanMove(Direction direction) { return _drawingPlane.CanMove(direction);}
public void MoveObject(Direction direction) { _drawingPlane.MoveTransport(direction); }
}

View File

@ -0,0 +1,25 @@
package org.example;
import java.awt.*;
public class EntityHydroplane extends EntityPlane{
public Color AdditionalColor;
public void setAdditionalColor(Color color) {
AdditionalColor = color;
}
public boolean Boat;
public boolean Bobber;
public EntityHydroplane(int speed, double weight, Color bodyColor, Color
additionalColor, boolean boat, boolean bobber, int _numWindow)
{
super(speed, weight, bodyColor, _numWindow);
AdditionalColor = additionalColor;
Boat = boat;
Bobber = bobber;
}
}

View File

@ -0,0 +1,29 @@
package org.example;
import java.awt.*;
public class EntityPlane{
public int Speed;
public double Weight;
public Color BodyColor;
public void setBodyColor(Color color) {
BodyColor = color;
}
public double Step;
public int numWindow;
public EntityPlane(int speed, double weight, Color bodyColor, int _numWindow)
{
numWindow = _numWindow;
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
Step = (double)Speed * 100 / Weight;
}
}

View File

@ -0,0 +1,78 @@
package org.example;
import java.awt.Color;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.Vector;
public class ExtentionDrawingPlane {
// Создание объекта из строки
public static DrawingPlane CreateDrawingPlane(String info, String separatorForObject, int width, int height) {
String[] strs = info.split(separatorForObject);
if (strs.length == 5)
{
String[] colorValues = strs[2].split(",");
DrawingPlane drawingPlane = new DrawingPlane(Integer.parseInt(strs[0]), (double)Integer.parseInt(strs[1]),
new Color(Integer.parseInt(colorValues[0].replaceAll("\\D", "")),
Integer.parseInt(colorValues[1].replaceAll("\\D", "")),
Integer.parseInt(colorValues[2].replaceAll("\\D", ""))),
Integer.parseInt(strs[3]),
width, height
);
try{
drawingPlane.windowDrawing = (IWindowDrawing) Class.forName(strs[4]).getDeclaredConstructor().newInstance();
drawingPlane.windowDrawing.setNumWindow(drawingPlane._EntityPlane.numWindow);
} catch (Exception e) {
return null;
}
return drawingPlane;
}
if(strs.length == 8) {
String[] colorValues = strs[2].split(",");
String[] colorValues2 = strs[5].split(",");
DrawingHydroplane drawingHydroplane = new DrawingHydroplane(
Integer.parseInt(strs[0]),
(float) Integer.parseInt(strs[1]),
new Color(
Integer.parseInt(colorValues[0].replaceAll("\\D", "")),
Integer.parseInt(colorValues[1].replaceAll("\\D", "")),
Integer.parseInt(colorValues[2].replaceAll("\\D", ""))
),
Integer.parseInt(strs[3]),
new Color(
Integer.parseInt(colorValues2[0].replaceAll("\\D", "")),
Integer.parseInt(colorValues2[1].replaceAll("\\D", "")),
Integer.parseInt(colorValues2[2].replaceAll("\\D", ""))
),
strs[6].equals("true"),
strs[7].equals("true"),
width, height
);
try {
drawingHydroplane.windowDrawing = (IWindowDrawing) Class.forName(strs[4]).getDeclaredConstructor().newInstance();
drawingHydroplane.windowDrawing.setNumWindow(drawingHydroplane._EntityPlane.numWindow);
} catch (Exception e) {
return null;
}
return drawingHydroplane;
}
return null;
}
// Получение данных для сохранения в файл
public static String GetDataForSave(DrawingPlane drawingPlane, String separatorForObject) {
EntityPlane plane = drawingPlane._EntityPlane;
if (plane == null) {
return null;
}
String str = "" + plane.Speed + separatorForObject + (int)plane.Weight + separatorForObject + plane.BodyColor + separatorForObject + plane.numWindow + separatorForObject + drawingPlane.windowDrawing.getClass().getName();
if (!(plane instanceof EntityHydroplane)) {
return str;
}
return str+separatorForObject+((EntityHydroplane)plane).AdditionalColor.toString()+separatorForObject+((EntityHydroplane)plane).Boat+separatorForObject+((EntityHydroplane)plane).Bobber;
}
}

View File

@ -0,0 +1,63 @@
package org.example;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class Form4GenericDopClass extends JFrame {
static int pictureBoxWidth = 980;
static int pictureBoxHeight = 560;
public DrawingPlane _drawingPlane;
private class Canvas extends JComponent{
public Canvas(){
}
public void paintComponent (Graphics g){
if (_drawingPlane == null){
return;
}
super.paintComponents (g) ;
Graphics2D g2d = (Graphics2D)g;
_drawingPlane.SetPosition(50, 50);
_drawingPlane.DrawTransport(g2d);
super.repaint();
}
}
GenericDopClass<EntityPlane, IWindowDrawing> genericDopClass;
public Form4GenericDopClass(){
_drawingPlane = null;
Canvas canv = new Canvas();
setSize (1000, 600);
setLayout(null);
canv.setBounds(0,0,pictureBoxWidth, pictureBoxHeight);
genericDopClass = new GenericDopClass<>(100, 100, pictureBoxWidth, pictureBoxHeight);
genericDopClass.Add(new EntityPlane(100, 100, Color.BLUE, 30));
genericDopClass.Add(new EntityPlane(100, 100, Color.RED, 10));
genericDopClass.Add(new EntityPlane(100, 100, Color.GRAY, 20));
genericDopClass.Add(new EntityHydroplane(100, 100, Color.BLUE, Color.ORANGE, true, true, 20));
genericDopClass.Add(new WindowDrawing());
genericDopClass.Add(new WindowDrawingTringle());
JButton creatButton = new JButton("createButton");
creatButton.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
_drawingPlane = genericDopClass.getRDrawingObject();
canv.repaint();
}
}
);
creatButton.setBounds(pictureBoxWidth/2, pictureBoxHeight-20, 120, 20);
add(canv);
add(creatButton);
setVisible(true);
}
}

View File

@ -0,0 +1,215 @@
package org.example;
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
public class FormHydroplane{
public DrawingPlane _drawingPlane;
public DrawingPlane SelectedPlane;
public boolean DialogResult = false;
public JButton buttonSelectPlane;
private AbstractStrategy abstractStrategy;
Canvas canv;
static int pictureBoxWidth = 980;
static int pictureBoxHeight = 580;
public JFrame w;
public void Draw(){
canv.repaint();
}
public void ChangePlane(DrawingPlane newPlane){
newPlane.SetPosition(0,0);
_drawingPlane = newPlane;
canv._drawingPlane = _drawingPlane;
}
public FormHydroplane(){
w=new JFrame ("Hydroplane");
JButton buttonCreatePlane = new JButton("createPlane");
JButton buttonCreateHydroplane = new JButton("createHydroplane");
buttonSelectPlane = new JButton("select plane");
JButton buttonStrategysStep = new JButton("strategys step");
JComboBox comboBoxStrategy = new JComboBox(
new String[]{
"к центру",
"к краю",
});
JButton up = new JButton();
up.setBorderPainted(false);
up.setFocusPainted(false);
up.setContentAreaFilled(false);
up.setName("up");
up.setIcon(new ImageIcon("C:\\RPP HARD\\PIbd-22_Fedorenko_G.Y._Hydroplane_HARD\\Hydroplane\\src\\main\\java\\org\\example\\images\\up.png"));
JButton down = new JButton();
down.setBorderPainted(false);
down.setFocusPainted(false);
down.setContentAreaFilled(false);
down.setName("down");
down.setIcon(new ImageIcon("C:\\RPP HARD\\PIbd-22_Fedorenko_G.Y._Hydroplane_HARD\\Hydroplane\\src\\main\\java\\org\\example\\images\\down.png"));
JButton left = new JButton();
left.setBorderPainted(false);
left.setFocusPainted(false);
left.setContentAreaFilled(false);
left.setName("left");
left.setIcon(new ImageIcon("C:\\RPP HARD\\PIbd-22_Fedorenko_G.Y._Hydroplane_HARD\\Hydroplane\\src\\main\\java\\org\\example\\images\\left.png"));
JButton right = new JButton();
right.setBorderPainted(false);
right.setFocusPainted(false);
right.setContentAreaFilled(false);
right.setName("right");
right.setIcon(new ImageIcon("C:\\RPP HARD\\PIbd-22_Fedorenko_G.Y._Hydroplane_HARD\\Hydroplane\\src\\main\\java\\org\\example\\images\\right.png"));
buttonCreatePlane.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
Random random = new Random();
_drawingPlane = new DrawingPlane(
random.nextInt(100, 300),
random.nextInt(1000, 3000),
new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)),
random.nextInt(1, 4) * 10,
pictureBoxWidth,
pictureBoxHeight);
_drawingPlane.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100));
canv._drawingPlane = _drawingPlane;
Draw();
}
}
);
buttonCreateHydroplane.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
Random random = new Random();
_drawingPlane = new DrawingHydroplane(
random.nextInt(100, 300),
random.nextInt(1000, 3000),
new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)),
random.nextInt(1, 4) * 10,
new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)),
random.nextInt(0, 2) == 1,
random.nextInt(0, 2) == 1,
pictureBoxWidth,
pictureBoxHeight);
_drawingPlane.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100));
canv._drawingPlane = _drawingPlane;
Draw();
}
}
);
buttonStrategysStep.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
if (_drawingPlane == null)
{
return;
}
if (comboBoxStrategy.isEnabled())
{
switch (comboBoxStrategy.getSelectedIndex())
{
case 0:
abstractStrategy = new MoveToCenter();
break;
case 1:
abstractStrategy = new MoveToBorder();
break;
default:
abstractStrategy = null;
break;
};
if (abstractStrategy == null)
{
return;
}
abstractStrategy.SetData(new DrawningObjectPlane(_drawingPlane), pictureBoxWidth, pictureBoxHeight);
comboBoxStrategy.setEnabled(false);
}
if (abstractStrategy == null)
{
return;
}
abstractStrategy.MakeStep();
Draw();
if (abstractStrategy.GetStatus() == Status.Finish)
{
comboBoxStrategy.setEnabled(true);
abstractStrategy = null;
}
}
}
);
ActionListener actioListener = new ActionListener() {
public void actionPerformed(ActionEvent e){
if (_drawingPlane == null)
{
return;
}
switch(((JButton)(e.getSource())).getName()){
case "up":
_drawingPlane.MoveTransport(Direction.Up);
break;
case "down":
_drawingPlane.MoveTransport(Direction.Down);
break;
case "left":
_drawingPlane.MoveTransport(Direction.Left);
break;
case "right":
_drawingPlane.MoveTransport(Direction.Right);
break;
}
Draw();
}
};
up.addActionListener(actioListener);
down.addActionListener(actioListener);
left.addActionListener(actioListener);
right.addActionListener(actioListener);
w.setSize (1000, 600);
w.setLayout(null);
canv = new Canvas();
canv.setBounds(0, 0, pictureBoxWidth, pictureBoxHeight);
buttonCreatePlane.setBounds(2, 540, 150, 20);
buttonCreateHydroplane.setBounds(160, 540, 200, 20);
up.setBounds(900, 480, 40, 40);
down.setBounds(900, 520, 40, 40);
left.setBounds(860, 520, 40, 40);
right.setBounds(940, 520, 40, 40);
comboBoxStrategy.setBounds(pictureBoxWidth - 150, 20, 150, 20);
buttonStrategysStep.setBounds(pictureBoxWidth - 150, 45, 150, 20);
buttonSelectPlane.setBounds(pictureBoxWidth/2, 540, 150, 20);
w.add(canv);
w.add(buttonCreatePlane);
w.add(buttonCreateHydroplane);
w.add(up);
w.add(down);
w.add(left);
w.add(right);
w.add(comboBoxStrategy);
w.add(buttonStrategysStep);
w.add(buttonSelectPlane);
w.setVisible(true);
}
}
class Canvas extends JComponent{
public DrawingPlane _drawingPlane;
public Canvas(){}
public void paintComponent (Graphics g){
if (_drawingPlane == null){
return;
}
super.paintComponents (g) ;
Graphics2D g2d = (Graphics2D)g;
_drawingPlane.DrawTransport(g2d);
super.repaint();
}
}

View File

@ -0,0 +1,409 @@
package org.example;
import java.io.File;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.Stack;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class FormPlaneCollecltion {
private class Canvas extends JComponent{
public Canvas(){
}
public void paintComponent (Graphics g){
super.paintComponent(g);
if (jListStorage.getSelectedIndex() == -1)
{
return;
}
var obj = _storage.get(jListStorage.getSelectedValue());
if (obj == null)
{
return;
}
if (obj.ShowPlanes() != null) {
g.drawImage(obj.ShowPlanes(), 0, 0, this);
}
super.repaint();
}
}
Canvas canv;
static int pictureBoxWidth = 800;
static int pictureBoxHeight = 580;
private PlanesGenericStorage _storage;
public void Draw(){
canv.repaint();
}
private Stack<DrawingPlane> stackRemoved;
private JList<String> jListStorage;
private DefaultListModel<String> listModel;
private void ReloadObjects()
{
int index = jListStorage.getSelectedIndex();
listModel.clear();
for (String key : _storage.Keys()) {
listModel.addElement(key);
}
if (listModel.size() > 0 && (index == -1 || index >= listModel.size()))
{
jListStorage.setSelectedIndex(0);
}
else if (listModel.size() > 0 && index > -1 && index < listModel.size())
{
jListStorage.setSelectedIndex(index);
}
}
FormPlaneCollecltion() {
listModel = new DefaultListModel<String>();
jListStorage = new JList<String>(listModel);
canv = new Canvas();
JFrame w = new JFrame("PlaneCollecltion");
_storage = new PlanesGenericStorage(pictureBoxWidth, pictureBoxHeight);
JButton ButtonAddPlane = new JButton("AddPlane");
ButtonAddPlane.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (jListStorage.getSelectedIndex() == -1)
{
return;
}
var obj = _storage.get(jListStorage.getSelectedValue());
if (obj == null)
{
return;
}
FormPlaneConfig form = new FormPlaneConfig();
form.buttonAdd.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (obj != null && obj.Add(form._plane) != -1)
{
JOptionPane.showMessageDialog(null, "Объект добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE);
System.out.println("Объект добавлен");
Draw();
}
else
{
JOptionPane.showMessageDialog(null, "Не удалось добавить объект", "Информация", JOptionPane.INFORMATION_MESSAGE);
System.out.println("Не удалось добавить объект");
}
form.w.dispose();
}
}
);
}
}
);
stackRemoved = new Stack<DrawingPlane>();
JTextField TextBoxNumber = new JTextField();
JButton ButtonRemovePlane = new JButton("RemovePlane");
ButtonRemovePlane.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
if (jListStorage.getSelectedIndex() == -1)
{
return;
}
var obj = _storage.get(jListStorage.getSelectedValue());
if (obj == null)
{
return;
}
if (JOptionPane.showConfirmDialog(null, "Удалить объект?", "Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION)
{
return;
}
for (char it : TextBoxNumber.getText().toCharArray())
if (it < '0' || it > '9')
{
JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Информация", JOptionPane.INFORMATION_MESSAGE);
System.out.println("Не удалось удалить объект");
return;
}
if (TextBoxNumber.getText().length() == 0)
{
JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Информация", JOptionPane.INFORMATION_MESSAGE);
System.out.println("Не удалось удалить объект");
return;
}
int pos = Integer.parseInt(TextBoxNumber.getText());
var removed = obj.remove(pos);
if (removed != null)
{
stackRemoved.add(removed);
JOptionPane.showMessageDialog(null, "Объект удален", "Информация", JOptionPane.INFORMATION_MESSAGE);
System.out.println("Объект удален");
Draw();
}
else
{
JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Информация", JOptionPane.INFORMATION_MESSAGE);
System.out.println("Не удалось удалить объект");
}
}
}
);
JButton buttonGetRemoved = new JButton("buttonGetRemoved");
buttonGetRemoved.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
if (stackRemoved.size()==0){
JOptionPane.showMessageDialog(null, "Нет удалённых", "Информация", JOptionPane.INFORMATION_MESSAGE);
System.out.println("Нет удалённых");
return;
}
System.out.println("Удалённый объект");
FormHydroplane form = new FormHydroplane();
form.ChangePlane(stackRemoved.pop());
form.Draw();
}
}
);
JButton ButtonRefreshCollection = new JButton("Refresh Collection");
ButtonRefreshCollection.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
Draw();
}
}
);
JButton toForm4GenericDopClass = new JButton("ToForm4GenericDopClass");
toForm4GenericDopClass.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
Form4GenericDopClass form4GenericDopClass = new Form4GenericDopClass();
}
}
);
JTextField textBoxSetName = new JTextField();
JButton buttonAddSet = new JButton("Add Set");
buttonAddSet.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
if (textBoxSetName.getText().length() == 0)
{
JOptionPane.showMessageDialog(null, "Не все данные заполнены", "Информация", JOptionPane.INFORMATION_MESSAGE);
System.out.println("Не все данные заполнены");
return;
}
_storage.AddSet(textBoxSetName.getText());
ReloadObjects();
}
}
);
jListStorage.addListSelectionListener(
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e){
Draw();
}
}
);
JButton buttonRemoveSet = new JButton("Remove Set");
buttonRemoveSet.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
if (jListStorage.getSelectedIndex() == -1)
{
return;
}
if (JOptionPane.showConfirmDialog(null, "Удалить объект " + jListStorage.getSelectedValue() + "?", "Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION)
{
return;
}
_storage.DelSet(jListStorage.getSelectedValue());
ReloadObjects();
}
}
);
// Создаём панель меню
JMenuBar menuBar = new JMenuBar();
// Создаём пункты меню
JMenu fileMenu = new JMenu("File");
// Создаём пункты меню
JMenuItem openItem = new JMenuItem("Открыть");
openItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
// Установка фильтра для файлов с определённым расширеним (например, txt)
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
if (_storage.LoadData(selectedFile.getAbsolutePath())) {
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
}
}
ReloadObjects();
}
});
JMenuItem saveItem = new JMenuItem("Сохранить");
saveItem.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Выберите файл для сохранения данных");
// Установка фильтра для файлов с определённым расширением (например, txt)
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
if(_storage.SaveData(selectedFile.getAbsolutePath()))
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
else
JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE);
}
}
}
);
JMenuItem openItemSingle = new JMenuItem("Открыть одиночный");
openItemSingle.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
//Установка фильтра для файлов с определённым расширением (например, txt)
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
if (_storage.LoadDataSingle(selectedFile.getAbsolutePath())) {
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
}
}
ReloadObjects();
}
});
JMenuItem saveItemSingle = new JMenuItem("Сохранение одиночного");
saveItemSingle.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
if (jListStorage.getSelectedValue() == null){
JOptionPane.showMessageDialog(null, "Не выбран гараж", "Ошибка", JOptionPane.ERROR_MESSAGE);
return;
}
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Выберите файл для сохранения данных");
// Установка фильтра для файлов с определенным расширением (например, .txt)
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
if (_storage.SaveDataSingle(selectedFile.getAbsolutePath(), jListStorage.getSelectedValue()))
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
else
JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE);
}
}
}
);
// Добавляем пункты в меню
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(openItemSingle);
fileMenu.add(saveItemSingle);
// Добавляем меню в панель меню
menuBar.add(fileMenu);
w.setSize (1000, 600);
w.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
w.setLayout(null);
canv.setBounds(0, 0, pictureBoxWidth, pictureBoxHeight);
ButtonAddPlane.setBounds(pictureBoxWidth, 0, 160, 20);
TextBoxNumber.setBounds(pictureBoxWidth, 30, 160, 20);
ButtonRemovePlane.setBounds(pictureBoxWidth, 60, 160, 20);
ButtonRefreshCollection.setBounds(pictureBoxWidth, 90, 160, 20);
toForm4GenericDopClass.setBounds(pictureBoxWidth, 120, 160, 20);
buttonAddSet.setBounds(pictureBoxWidth, 150, 160, 20);
textBoxSetName.setBounds(pictureBoxWidth, 180, 160, 20);
jListStorage.setBounds(pictureBoxWidth, 210, 160, 80);
buttonRemoveSet.setBounds(pictureBoxWidth, 300, 160, 20);
buttonGetRemoved.setBounds(pictureBoxWidth, 330, 160, 20);
menuBar.setBounds(pictureBoxWidth - 10, 420, 170, 20);
w.add(canv);
w.add(ButtonAddPlane);
w.add(ButtonRemovePlane);
w.add(ButtonRefreshCollection);
w.add(TextBoxNumber);
w.add(toForm4GenericDopClass);
w.add(buttonAddSet);
w.add(textBoxSetName);
w.add(jListStorage);
w.add(buttonRemoveSet);
w.add(buttonGetRemoved);
w.add(menuBar);
w.setVisible(true);
}
}

View File

@ -0,0 +1,404 @@
package org.example;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.util.*;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.event.*;
import java.io.IOException;
public class FormPlaneConfig {
private class Canvas extends JComponent{
public Canvas(){
}
public void paintComponent (Graphics g){
if (_plane == null){
return;
}
super.paintComponents (g) ;
Graphics2D g2d = (Graphics2D)g;
_plane.DrawTransport(g2d);
super.repaint();
}
}
//класс для перетаскивания типа объекта
private class LabelTransferHandler extends TransferHandler {
@Override
public int getSourceActions(JComponent c) {
return TransferHandler.COPY;
}
@Override
protected Transferable createTransferable(JComponent c) {
return new StringSelection(((JLabel)c).getText());
}
}
//что бы цвет можно было таскать
private class ColorTransferable implements Transferable {
private Color color;
private static final DataFlavor colorDataFlavor = new DataFlavor(Color.class, "Color");
public ColorTransferable(Color color) {
this.color = color;
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{colorDataFlavor};
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return colorDataFlavor.equals(flavor);
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if (isDataFlavorSupported(flavor)) {
return color;
} else {
throw new UnsupportedFlavorException(flavor);
}
}
}
//для перетаскивания цвета
private class PanelTransferHandler extends TransferHandler {
@Override
public int getSourceActions(JComponent c) {
return TransferHandler.COPY;
}
@Override
protected Transferable createTransferable(JComponent c) {
return new ColorTransferable(((JPanel)c).getBackground());
}
}
//для обработки нажатий
private class LabelMouseAdapter extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
((JLabel)e.getComponent()).getTransferHandler().exportAsDrag(((JLabel)e.getComponent()), e, TransferHandler.COPY);
}
}
private class PanelMouseAdapter extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
((JPanel)e.getComponent()).getTransferHandler().exportAsDrag(((JPanel)e.getComponent()), e, TransferHandler.COPY);
}
}
//что бы window'ы можно было тоскать
private class WindowTransferable implements Transferable {
private IWindowDrawing windowDrawing;
private static final DataFlavor windowDrawingDataFlavor = new DataFlavor(IWindowDrawing.class, "Window Drawing");
public WindowTransferable(IWindowDrawing windowDrawing) {
this.windowDrawing = windowDrawing;
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{windowDrawingDataFlavor};
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(windowDrawingDataFlavor);
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if (isDataFlavorSupported(flavor)) {
return windowDrawing;
} else {
throw new UnsupportedFlavorException(flavor);
}
}
}
//для отрисовки window'ов, которые можно взять и потащить
private class ComponentWindow extends JComponent{
public IWindowDrawing windowDrawing;
public ComponentWindow(IWindowDrawing _windowDrawing){
windowDrawing = _windowDrawing;
this.addMouseListener(
new MouseAdapter(){
@Override
public void mousePressed(MouseEvent e) {
((ComponentWindow)e.getComponent()).getTransferHandler().exportAsDrag(((ComponentWindow)e.getComponent()), e, TransferHandler.COPY);
}
}
);
this.setTransferHandler(
new TransferHandler(){
@Override
public int getSourceActions(JComponent c) {
return TransferHandler.COPY;
}
@Override
protected Transferable createTransferable(JComponent c) {
return new WindowTransferable(((ComponentWindow)c).windowDrawing);
}
}
);
}
public void paintComponent (Graphics g){
super.paintComponents (g) ;
Graphics2D g2d = (Graphics2D)g;
windowDrawing.Draw(-35, -28, Color.black, g2d);
super.repaint();
}
}
final int WindowHeight = 700;
final int WindowWidth = 800;
final int CanvasHeight = 600;
final int CanvasWidth = 600;
public DrawingPlane _plane = null;
public JButton buttonAdd;
public JFrame w;
public Canvas canvas;
public FormPlaneConfig(){
Border border = BorderFactory.createLineBorder(Color.GRAY);
JLabel labelSpeed = new JLabel("Speed");
JLabel labelWeight = new JLabel("Weight");
JLabel labelWindowNum = new JLabel("Window");
SpinnerModel spinnerModel = new SpinnerNumberModel(100, 100, 1000, 50);
JSpinner numericSpeed = new JSpinner(spinnerModel);
SpinnerModel spinnerModel2 = new SpinnerNumberModel(100, 100, 1000, 50);
JSpinner numericWeight = new JSpinner(spinnerModel2);
SpinnerModel spinnerModel3 = new SpinnerNumberModel(10, 10, 30, 10);
JSpinner numericWindowNum = new JSpinner(spinnerModel3);
JCheckBox checkBoxBoat = new JCheckBox("Boat");
JCheckBox checkBoxBobber = new JCheckBox("Bobber");
JPanel[] colorPanels = {
new JPanel(),new JPanel(),new JPanel(),new JPanel(),
new JPanel(),new JPanel(),new JPanel(),new JPanel(),
};
colorPanels[0].setBackground(Color.BLACK);
colorPanels[1].setBackground(Color.BLUE);
colorPanels[2].setBackground(Color.GRAY);
colorPanels[3].setBackground(Color.YELLOW);
colorPanels[4].setBackground(Color.RED);
colorPanels[5].setBackground(Color.GREEN);
colorPanels[6].setBackground(Color.ORANGE);
colorPanels[7].setBackground(Color.WHITE);
for (var it : colorPanels){
it.setTransferHandler(new PanelTransferHandler());
it.addMouseListener(new PanelMouseAdapter());
}
JLabel labelPlane = new JLabel("Plane");
labelPlane.setTransferHandler(new LabelTransferHandler());
labelPlane.addMouseListener(new LabelMouseAdapter());
labelPlane.setBorder(border);
labelPlane.setHorizontalAlignment(SwingConstants.CENTER);
labelPlane.setVerticalAlignment(SwingConstants.CENTER);
JLabel labelHydroplane = new JLabel("Hydroplane");
labelHydroplane.setTransferHandler(new LabelTransferHandler());
labelHydroplane.addMouseListener(new LabelMouseAdapter());
labelHydroplane.setBorder(border);
labelHydroplane.setHorizontalAlignment(SwingConstants.CENTER);
labelHydroplane.setVerticalAlignment(SwingConstants.CENTER);
JLabel labelColor = new JLabel("Color");
labelColor.setBorder(border);
labelColor.setHorizontalAlignment(SwingConstants.CENTER);
labelColor.setVerticalAlignment(SwingConstants.CENTER);
labelColor.setTransferHandler(
new TransferHandler(){
@Override
public boolean canImport(TransferHandler.TransferSupport support) {
return support.isDataFlavorSupported(ColorTransferable.colorDataFlavor);
}
@Override
public boolean importData(TransferHandler.TransferSupport support) {
if (canImport(support)) {
try {
Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor);
if (_plane == null)
return false;
_plane._EntityPlane.setBodyColor(color);
canvas.repaint();
return true;
} catch (UnsupportedFlavorException | IOException e) {
e.printStackTrace();
}
}
return false;
}
}
);
JLabel labelAdditionalColor = new JLabel("Additional color");
labelAdditionalColor.setBorder(border);
labelAdditionalColor.setHorizontalAlignment(SwingConstants.CENTER);
labelAdditionalColor.setVerticalAlignment(SwingConstants.CENTER);
labelAdditionalColor.setTransferHandler(
new TransferHandler(){
@Override
public boolean canImport(TransferHandler.TransferSupport support) {
return support.isDataFlavorSupported(ColorTransferable.colorDataFlavor);
}
@Override
public boolean importData(TransferHandler.TransferSupport support) {
if (canImport(support)) {
try {
Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor);
if (_plane == null)
return false;
if (!(_plane instanceof DrawingHydroplane))
return false;
((EntityHydroplane)_plane._EntityPlane).setAdditionalColor(color);
return true;
} catch (UnsupportedFlavorException | IOException e) {
e.printStackTrace();
}
}
return false;
}
}
);
JLabel labelWindow = new JLabel("Window");
labelWindow.setBorder(border);
labelWindow.setHorizontalAlignment(SwingConstants.CENTER);
labelWindow.setVerticalAlignment(SwingConstants.CENTER);
labelWindow.setTransferHandler(
new TransferHandler(){
@Override
public boolean canImport(TransferHandler.TransferSupport support) {
return support.isDataFlavorSupported(WindowTransferable.windowDrawingDataFlavor);
}
@Override
public boolean importData(TransferHandler.TransferSupport support) {
if (canImport(support)) {
try {
IWindowDrawing windowDrawing = (IWindowDrawing) support.getTransferable().getTransferData(WindowTransferable.windowDrawingDataFlavor);
if (_plane == null)
return false;
windowDrawing.setNumWindow(_plane._EntityPlane.numWindow);
_plane.windowDrawing = windowDrawing;
canvas.repaint();
} catch (UnsupportedFlavorException | IOException e) {
e.printStackTrace();
}
}
return false;
}
}
);
canvas = new Canvas();
canvas.setTransferHandler(
new TransferHandler(){
@Override
public boolean canImport(TransferHandler.TransferSupport support) {
return support.isDataFlavorSupported(DataFlavor.stringFlavor);
}
@Override
public boolean importData(TransferHandler.TransferSupport support) {
if (canImport(support)) {
try {
String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor);
switch (data) {
case "Plane":
_plane = new DrawingPlane((int)numericSpeed.getValue(), (int)numericWeight.getValue(), Color.WHITE, (int)numericWindowNum.getValue(), CanvasWidth,CanvasHeight);
break;
case "Hydroplane":
_plane = new DrawingHydroplane((int)numericSpeed.getValue(), (int)numericWeight.getValue(), Color.WHITE, (int)numericWindowNum.getValue(), Color.BLACK, checkBoxBoat.isSelected(), checkBoxBobber.isSelected(), CanvasWidth,CanvasHeight);
break;
}
canvas.repaint();
return true;
} catch (UnsupportedFlavorException | IOException e) {
e.printStackTrace();
}
}
return false;
}
}
);
buttonAdd = new JButton("Add");
JButton buttonCancel = new JButton("Cancel");
ComponentWindow componentWindowOval = new ComponentWindow(new WindowDrawing());
ComponentWindow componentWindowRect = new ComponentWindow(new WindowDrawingRect());
ComponentWindow componentWindowTringle = new ComponentWindow(new WindowDrawingTringle());
labelSpeed.setBounds(10,10,40,20);
labelWeight.setBounds(10,40,40,20);
labelWindowNum.setBounds(10,70,40,20);
numericSpeed.setBounds(55,10,80,20);
numericWeight.setBounds(55,40,80,20);
numericWindowNum.setBounds(55,70,80,20);
checkBoxBoat.setBounds(10,100,120,20);
checkBoxBobber.setBounds(10,130,120,20);
for (int i = 0; i < colorPanels.length; i+=2){
colorPanels[i].setBounds(10, 200 + i/2 * 60, 50, 50);
colorPanels[i+1].setBounds(70, 200 + i/2 * 60, 50, 50);
}
componentWindowOval.setBounds(10,470,8,8); // 10,470,8,8
componentWindowRect.setBounds(30,470,8,8); //30,470,8,8
componentWindowTringle.setBounds(50,470,8,8);
labelPlane.setBounds(10,500 ,50,30);
labelHydroplane.setBounds(70,500 ,50,30);
labelColor.setBounds(WindowWidth-CanvasWidth, 10, CanvasWidth/3, 30);
labelAdditionalColor.setBounds(WindowWidth-CanvasWidth + CanvasWidth/3, 10, CanvasWidth/3, 30);
labelWindow.setBounds(WindowWidth-CanvasWidth + CanvasWidth*2/3, 10, CanvasWidth/3, 30);
canvas.setBounds(WindowWidth-CanvasWidth, 50, CanvasWidth, CanvasHeight);
buttonAdd.setBounds(WindowWidth-CanvasWidth, CanvasHeight+60, CanvasWidth/3, 30);
buttonCancel.setBounds(WindowWidth-CanvasWidth + CanvasWidth*2/3, CanvasHeight+60, CanvasWidth/3, 30);
w = new JFrame();
w.setSize (WindowWidth+20, WindowHeight+40);
w.setLayout(null);
w.add(labelSpeed);
w.add(labelWeight);
w.add(labelWindowNum);
w.add(numericSpeed);
w.add(numericWeight);
w.add(numericWindowNum);
w.add(checkBoxBoat);
w.add(checkBoxBobber);
for (var it : colorPanels)
w.add(it);
w.add(labelPlane);
w.add(labelHydroplane);
w.add(labelColor);
w.add(labelAdditionalColor);
w.add(labelWindow);
w.add(canvas);
w.add(buttonAdd);
w.add(buttonCancel);
w.add(componentWindowOval);
w.add(componentWindowRect);
w.add(componentWindowTringle);
w.setVisible(true);
buttonCancel.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
w.dispose();
}
}
);
}
}

View File

@ -0,0 +1,61 @@
package org.example;
import java.util.ArrayList;
import java.util.Random;
public class GenericDopClass<T extends EntityPlane, U extends IWindowDrawing> {
private ArrayList<T> Planes;
private ArrayList<U> Windows;
private int maxCountPlanes;
private int countPlanes;
private int maxCountWindows;
private int countWindows;
private Random random;
private int _pictureWidth;
private int _pictureHeight;
public GenericDopClass(int _maxCountPlanes, int _maxCountWindows, int pictureWidth, int pictureHeight){
maxCountPlanes = _maxCountPlanes;
maxCountWindows = _maxCountWindows;
Planes = new ArrayList<T>(maxCountPlanes);
Windows = new ArrayList<U>(maxCountWindows);
countPlanes = 0;
countWindows = 0;
_pictureWidth = pictureWidth;
_pictureHeight = pictureHeight;
random = new Random();
}
public void Add(T plane){
if (plane == null)
return;
if (countPlanes > maxCountPlanes)
return;
Planes.add(countPlanes++, plane);
}
public void Add(U window){
if (window == null)
return;
if (countWindows > maxCountWindows)
return;
Windows.add(countWindows++, window);
}
public DrawingPlane getRDrawingObject(){
if (countPlanes == 0 || countWindows == 0)
return null;
int i = random.nextInt(countPlanes);
int j = random.nextInt(countWindows);
DrawingPlane drawingPlane;
if (Planes.get(i) instanceof EntityHydroplane){
drawingPlane = new DrawingHydroplane((EntityHydroplane)Planes.get(i), Windows.get(j), _pictureWidth, _pictureHeight);
}
else{
drawingPlane = new DrawingPlane(Planes.get(i), Windows.get(j), _pictureWidth, _pictureHeight);
}
return drawingPlane;
}
}

View File

@ -0,0 +1,14 @@
package org.example;
public interface IMoveableObject {
ObjectParameters GetObjectPosition();
int GetStep();
boolean CheckCanMove(Direction direction);
void MoveObject(Direction direction);
}

View File

@ -0,0 +1,13 @@
package org.example;
import java.awt.*;
public interface IWindowDrawing{
public NumWindow getNumWindow();
public void setNumWindow(int kWindow);
public void Draw(int _startPosX, int _startPosY, Color color, Graphics2D g2d);
}

View File

@ -0,0 +1,7 @@
package org.example;
public class Main{
public static void main(String[] args) {
FormPlaneCollecltion formPlaneCollecltion = new FormPlaneCollecltion();
}
}

View File

@ -0,0 +1,51 @@
package org.example;
public class MoveToBorder extends AbstractStrategy{
protected boolean IsTargetDestinaion()
{
var objParams = GetObjectParameters();
if (objParams == null)
{
return false;
}
return objParams.RightBorder() <= FieldWidth &&
objParams.RightBorder() + GetStep() >= FieldWidth &&
objParams.DownBorder() <= FieldHeight &&
objParams.DownBorder() + GetStep() >= FieldHeight;
}
protected void MoveToTarget()
{
var objParams = GetObjectParameters();
if (objParams == null)
{
return;
}
var diffX = objParams.RightBorder() - FieldWidth;
if (Math.abs(diffX) > GetStep())
{
if (diffX > 0)
{
MoveLeft();
}
else
{
MoveRight();
}
}
var diffY = objParams.DownBorder() - FieldHeight;
if (Math.abs(diffY) > GetStep())
{
if (diffY > 0)
{
MoveUp();
}
else
{
MoveDown();
}
}
}
}

View File

@ -0,0 +1,51 @@
package org.example;
public class MoveToCenter extends AbstractStrategy {
protected boolean IsTargetDestinaion()
{
var objParams = GetObjectParameters();
if (objParams == null)
{
return false;
}
return
Math.abs(objParams.ObjectMiddleHorizontal() - FieldWidth / 2) <= GetStep()
&&
Math.abs(objParams.ObjectMiddleVertical() - FieldHeight / 2) <= GetStep();
}
protected void MoveToTarget()
{
var objParams = GetObjectParameters();
if (objParams == null)
{
return;
}
var diffX = objParams.ObjectMiddleHorizontal() - FieldWidth / 2;
if (Math.abs(diffX) > GetStep())
{
if (diffX > 0)
{
MoveLeft();
}
else
{
MoveRight();
}
}
var diffY = objParams.ObjectMiddleVertical() - FieldHeight / 2;
if (Math.abs(diffY) > GetStep())
{
if (diffY > 0)
{
MoveUp();
}
else
{
MoveDown();
}
}
}
}

View File

@ -0,0 +1,8 @@
package org.example;
public enum NumWindow
{
tenWindows,
twentyWindows,
thirtyWindows
}

View File

@ -0,0 +1,30 @@
package org.example;
public class ObjectParameters {
private int _x;
private int _y;
private int _width;
private int _height;
public int LeftBorder() {return _x;}
public int TopBorder () {return _y;}
public int RightBorder () {return _x + _width;}
public int DownBorder () {return _y + _height;}
public int ObjectMiddleHorizontal () {return _x + _width / 2;}
public int ObjectMiddleVertical () {return _y + _height / 2;}
public ObjectParameters(int x, int y, int width, int height)
{
_x = x;
_y = y;
_width = width;
_height = height;
}
}

View File

@ -0,0 +1,99 @@
package org.example;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
public class PlanesGenericCollection<T extends DrawingPlane, U extends IMoveableObject> {
private int _pictureWidth;
private int _pictureHeight;
private int _placeSizeWidth = 175;
private int _placeSizeHeight = 85;
private SetGeneric<T> _collection;
// Получение объектов коллекции
public Iterable<T> getPlanes(final Integer maxPlanes) { return _collection.GetPlanes(maxPlanes); }
public void clear() { _collection.clear(); }
public PlanesGenericCollection(int picWidth, int picHeight)
{
int width = picWidth / _placeSizeWidth;
int height = picHeight / _placeSizeHeight;
_pictureWidth = picWidth;
_pictureHeight = picHeight;
_collection = new SetGeneric<T>(width * height);
}
public int Add(T obj)
{
if (obj == null)
{
return -1;
}
return _collection.Insert(obj);
}
public T remove(int pos)
{
T obj = _collection.Get(pos);
if (obj != null)
{
_collection.Remove(pos);
}
return obj;
}
public U GetU(int pos)
{
return (U)_collection.Get(pos).GetMoveableObject();
}
public BufferedImage ShowPlanes()
{
BufferedImage bmp = new BufferedImage(_pictureWidth, _pictureHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bmp.createGraphics();
DrawBackground(g);
DrawObjects(g);
g.dispose();
return bmp;
}
private void DrawBackground(Graphics2D g)
{
g.setColor(Color.BLACK);
for (int i = 0; i < _pictureWidth / _placeSizeWidth; i++)
{
for (int j = 0; j < _pictureHeight / _placeSizeHeight + 1; ++j)
{//линия рамзетки места
g.drawLine( i * _placeSizeWidth, j * _placeSizeHeight, i * _placeSizeWidth + _placeSizeWidth / 2, j * _placeSizeHeight);
}
g.drawLine( i * _placeSizeWidth, 0, i * _placeSizeWidth, _pictureHeight / _placeSizeHeight * _placeSizeHeight);
}
}
private void DrawObjects(Graphics2D g)
{
int i = 0;
for (T plane : _collection.GetPlanes(100))
{
if (plane != null)
{
plane._pictureHeight = _pictureHeight;
plane._pictureWidth = _pictureWidth;
plane.SetPosition((i % (_pictureWidth / _placeSizeWidth)) * _placeSizeWidth, (i / (_pictureWidth / _placeSizeWidth)) * _placeSizeHeight);
if (plane instanceof DrawingHydroplane)
((DrawingHydroplane)plane).DrawTransport(g);
else
plane.DrawTransport(g);
}
i++;
}
}
}

View File

@ -0,0 +1,216 @@
package org.example;
import java.util.*;
import java.util.stream.Collectors;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class PlanesGenericStorage {
// Разделитель для записи ключа и значения элемента словаря
private static String _separatorForKeyValueWR = "|";
private static String _separatorForKeyValue = "\\|";
// Разделитель для записей коллекции данных в файл
private String _separatorRecordsWR = ";";
private String _separatorRecords = "\\;";
// Разделитель для записи информации по объекту в файл
private static String _separatorForObjectWR = ":";
private static String _separatorForObject = "\\:";
public boolean SaveDataSingle(String filename, String key) {
if(new File(filename).exists()) {
new File(filename).delete();
}
StringBuilder data = new StringBuilder();
data.append(key).append("\n");
for (DrawingPlane elem: _planeStorages.get(key).getPlanes(100)) {
if(_planeStorages.get(key) == null)
return false;
if(_planeStorages.get(key) != null)
data.append(elem != null ? ExtentionDrawingPlane.GetDataForSave(elem, _separatorForObjectWR) + "\n" : "");
}
if(data.length() == 0)
return false;
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
writer.write("PlaneStorageSingle" + System.lineSeparator() + data.toString());
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public boolean LoadDataSingle(String filename) {
if(!new File(filename).exists()) {
return false;
}
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String s = reader.readLine();
if(s == null || s.length() == 0)
return false;
if(!s.startsWith("PlaneStorageSingle"))
return false;
String key = reader.readLine();
if(key == null || key.length() == 0)
return false;
PlanesGenericCollection<DrawingPlane, DrawningObjectPlane> collections = new PlanesGenericCollection<>(_pictureWidth, _pictureHeight);
if (_planeStorages.containsKey(key)){
collections = _planeStorages.get(key);
collections.clear();
}
else
collections = new PlanesGenericCollection<>(_pictureWidth, _pictureHeight);
List<String> planesStrings = new ArrayList<String>();
s = reader.readLine();
while (s != null && s.length() != 0) {
planesStrings.add(s);
s = reader.readLine();
}
Collections.reverse(planesStrings);
for (String elem : planesStrings) {
DrawingPlane plane = ExtentionDrawingPlane.CreateDrawingPlane(elem, _separatorForObject, _pictureWidth, _pictureHeight);
if(plane == null || collections.Add(plane) == -1)
return false;
}
if(_planeStorages.containsKey(key))
_planeStorages.remove(key);
_planeStorages.put(key, collections);
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
// Сохранение информации по технике в хранилище в файл
public boolean SaveData(String filename) {
if(new File(filename).exists()) {
new File(filename).delete();
}
StringBuilder data = new StringBuilder();
for (Map.Entry<String, PlanesGenericCollection<DrawingPlane, DrawningObjectPlane>> record : _planeStorages.entrySet()) {
StringBuilder records = new StringBuilder();
for (DrawingPlane elem : record.getValue().getPlanes(100)) {
records.append(elem != null ? ExtentionDrawingPlane.GetDataForSave(elem, _separatorForObjectWR) + _separatorRecordsWR : "");
}
data.append(record.getKey()).append(_separatorForKeyValueWR).append(records).append("\n");
}
if (data.length() == 0)
return false;
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
writer.write("PlaneStorage" + System.lineSeparator() + data.toString());
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
// Загрузка информации по технике в хранилище из файла
public boolean LoadData(String filename) {
if (!new File(filename).exists()) {
return false;
}
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String s = reader.readLine();
if (s == null || s.length() == 0)
return false;
if (!s.startsWith("PlaneStorage"))
return false;
_planeStorages.clear();
s = reader.readLine();
while (s != null && s.length() != 0) {
String[] record = s.split(_separatorForKeyValue);
s = reader.readLine();
if (record.length != 2) {
continue;
}
PlanesGenericCollection<DrawingPlane, DrawningObjectPlane> collection = new PlanesGenericCollection<>(_pictureWidth, _pictureHeight);
String[] set = record[1].split(_separatorRecords);
List<String> reversedSet = Arrays.asList(set);
Collections.reverse(reversedSet);
for (String elem : reversedSet) {
DrawingPlane plane = ExtentionDrawingPlane.CreateDrawingPlane(elem, _separatorForObject, _pictureWidth, _pictureHeight);
if (plane == null || collection.Add(plane) == -1)
return false;
}
_planeStorages.put(record[0], collection);
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
HashMap<String, PlanesGenericCollection<DrawingPlane, DrawningObjectPlane>> _planeStorages;
public List<String> Keys(){
return _planeStorages.keySet().stream().collect(Collectors.toList());
}
private int _pictureWidth;
private int _pictureHeight;
public PlanesGenericStorage(int pictureWidth, int pictureHeight)
{
_planeStorages = new HashMap<String, PlanesGenericCollection<DrawingPlane, DrawningObjectPlane>>();
_pictureWidth = pictureWidth;
_pictureHeight = pictureHeight;
}
public void AddSet(String name)
{
if (_planeStorages.containsKey(name))
return;
_planeStorages.put(name, new PlanesGenericCollection<DrawingPlane, DrawningObjectPlane>(_pictureWidth, _pictureHeight));
}
public void DelSet(String name)
{
if (!_planeStorages.containsKey(name))
return;
_planeStorages.remove(name);
}
public PlanesGenericCollection<DrawingPlane, DrawningObjectPlane> get(String ind)
{
if (_planeStorages.containsKey(ind))
return _planeStorages.get(ind);
return null;
}
public DrawningObjectPlane get(String ind1, int ind2){
if (!_planeStorages.containsKey(ind1))
return null;
return _planeStorages.get(ind1).GetU(ind2);
}
}

View File

@ -0,0 +1,91 @@
package org.example;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class SetGeneric<T extends Object> {
private ArrayList<T>_places;
public int Count () { return _places.size();};
private int _maxCount;
public SetGeneric(int count)
{
_maxCount = count;
_places = new ArrayList<T>(count);
}
public int Insert(T plane)
{
if (_places.size() >= _maxCount)
return -1;
_places.add(0, plane);
return 0;
}
public boolean Insert(T plane, int position)
{
if (_places.size() >= _maxCount)
return false;
if (position < 0 || position > _places.size())
return false;
if (position == _places.size())
_places.add(plane);
else
_places.add(position, plane);
return true;
}
public boolean Remove(int position)
{
if (position < 0 || position >= _places.size())
return false;
_places.remove(position);
return true;
}
public void clear() { _places.clear(); }
public T Get(int position)
{
if (position < 0 || position >= _places.size())
return null;
return _places.get(position);
}
public Iterable<T> GetPlanes(final Integer maxPlanes) {
return new Iterable<T>() {
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
private int currentIndex = 0;
private int count = 0;
@Override
public boolean hasNext() {
return currentIndex < _places.size() && (maxPlanes == null || count < maxPlanes);
}
@Override
public T next() {
if (hasNext()) {
count++;
return _places.get(currentIndex++);
}
throw new NoSuchElementException();
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
};
}
}

View File

@ -0,0 +1,8 @@
package org.example;
public enum Status {
NotInit,
InProgress,
Finish
}

View File

@ -0,0 +1,64 @@
package org.example;
import java.awt.*;
public class WindowDrawing implements IWindowDrawing{
private NumWindow numWindow;
public NumWindow getNumWindow() {
return numWindow;
}
public void setNumWindow(int kWindow){
switch(kWindow){
case 10:
numWindow = NumWindow.tenWindows;
break;
case 20:
numWindow = NumWindow.twentyWindows;
break;
case 30:
numWindow = NumWindow.thirtyWindows;
break;
default:
numWindow = NumWindow.tenWindows;
System.out.println("Произошел косяк с количеством, но давайте их будет 10, вообще было " + kWindow);
break;
}
}
public void Draw(int _startPosX, int _startPosY, Color color, Graphics2D g){
g.setColor(color);
// обработка исключения при запуске, это не дублирующийся код!
if (numWindow == null)
numWindow = NumWindow.tenWindows;
switch (numWindow) {
case tenWindows -> {
for (int i = 0; i < 10; i++) {
g.fillOval(_startPosX + 35 + i * 8, _startPosY + 28, 4, 4);
}
}
case twentyWindows -> {
for (int i = 0; i < 10; i++) {
g.fillOval(_startPosX + 35 + i * 8, _startPosY + 28, 4, 4);
}
for (int i = 0; i < 10; i++) {
g.fillOval(_startPosX + 35 + i * 8, _startPosY + 28 + 6, 4, 4);
}
}
case thirtyWindows -> {
for (int i = 0; i < 10; i++) {
g.fillOval(_startPosX + 35 + i * 8, _startPosY + 28, 4, 4);
}
for (int i = 0; i < 10; i++) {
g.fillOval(_startPosX + 35 + i * 8, _startPosY + 28 + 5, 4, 4);
}
for (int i = 0; i < 10; i++) {
g.fillOval(_startPosX + 35 + i * 8, _startPosY + 28 + 10, 4, 4);
}
}
}
}
}

View File

@ -0,0 +1,64 @@
package org.example;
import java.awt.*;
public class WindowDrawingRect implements IWindowDrawing{
private NumWindow numWindow;
public NumWindow getNumWindow() {
return numWindow;
}
public void setNumWindow(int kWindow){
switch(kWindow){
case 10:
numWindow = NumWindow.tenWindows;
break;
case 20:
numWindow = NumWindow.twentyWindows;
break;
case 30:
numWindow = NumWindow.thirtyWindows;
break;
default:
numWindow = NumWindow.tenWindows;
System.out.println("Произошел косяк с количеством, но давайте их будет 10, вообще было " + kWindow);
break;
}
}
public void Draw(int _startPosX, int _startPosY, Color color, Graphics2D g){
g.setColor(color);
// обработка исключения при запуске, это не дублирующийся код!
if (numWindow == null)
numWindow = NumWindow.tenWindows;
switch (numWindow) {
case tenWindows -> {
for (int i = 0; i < 10; i++) {
g.fillRect(_startPosX + 35 + i * 8, _startPosY + 28, 4, 4);
}
}
case twentyWindows -> {
for (int i = 0; i < 10; i++) {
g.fillRect(_startPosX + 35 + i * 8, _startPosY + 28, 4, 4);
}
for (int i = 0; i < 10; i++) {
g.fillRect(_startPosX + 35 + i * 8, _startPosY + 28 + 5, 4, 4);
}
}
case thirtyWindows -> {
for (int i = 0; i < 10; i++) {
g.fillRect(_startPosX + 35 + i * 8, _startPosY + 28, 4, 4);
}
for (int i = 0; i < 10; i++) {
g.fillRect(_startPosX + 35 + i * 8, _startPosY + 28 + 5, 4, 4);
}
for (int i = 0; i < 10; i++) {
g.fillRect(_startPosX + 35 + i * 8, _startPosY + 28 + 10, 4, 4);
}
}
}
}
}

View File

@ -0,0 +1,82 @@
package org.example;
import java.awt.*;
public class WindowDrawingTringle implements IWindowDrawing{
private NumWindow numWindow;
public NumWindow getNumWindow() {
return numWindow;
}
public void setNumWindow(int kWindow){
switch(kWindow){
case 10:
numWindow = NumWindow.tenWindows;
break;
case 20:
numWindow = NumWindow.twentyWindows;
break;
case 30:
numWindow = NumWindow.thirtyWindows;
break;
default:
numWindow = NumWindow.tenWindows;
System.out.println("Произошел косяк с количеством, но давайте их будет 10, вообще было " + kWindow);
break;
}
}
public void Draw(int _startPosX, int _startPosY, Color color, Graphics2D g){
g.setColor(color);
// обработка исключения при запуске, это не дублирующийся код!
if (numWindow == null)
numWindow = NumWindow.tenWindows;
switch (numWindow) {
case tenWindows -> {
for (int i = 0; i < 10; i++) {
g.fillPolygon(
new int[]{ _startPosX + 35 + i * 8, _startPosX + 35 + i * 8 + 2, _startPosX + 35 + i * 8 + 4 },
new int[]{ _startPosY + 30, _startPosY + 30 + 4, _startPosY + 30 },
3);
}
}
case twentyWindows -> {
for (int i = 0; i < 10; i++) {
g.fillPolygon(
new int[]{ _startPosX + 35 + i * 8, _startPosX + 35 + i * 8 + 2, _startPosX + 35 + i * 8 + 4 },
new int[]{ _startPosY + 30, _startPosY + 30 + 4, _startPosY + 30 },
3);
}
for (int i = 0; i < 10; i++) {
g.fillPolygon(
new int[]{ _startPosX + 35 + i * 8, _startPosX + 35 + i * 8 + 2, _startPosX + 35 + i * 8 + 4 },
new int[]{ _startPosY + 30 + 5, _startPosY + 30 + 4 + 5, _startPosY + 30 + 5 },
3);
}
}
case thirtyWindows -> {
for (int i = 0; i < 10; i++) {
g.fillPolygon(
new int[]{ _startPosX + 35 + i * 8, _startPosX + 35 + i * 8 + 2, _startPosX + 35 + i * 8 + 4 },
new int[]{ _startPosY + 30, _startPosY + 30 + 4, _startPosY + 30 },
3);
}
for (int i = 0; i < 10; i++) {
g.fillPolygon(
new int[]{ _startPosX + 35 + i * 8, _startPosX + 35 + i * 8 + 2, _startPosX + 35 + i * 8 + 4 },
new int[]{ _startPosY + 30 + 5, _startPosY + 30 + 4 + 5, _startPosY + 30 + 5 },
3);
}
for (int i = 0; i < 10; i++) {
g.fillPolygon(
new int[]{ _startPosX + 35 + i * 8, _startPosX + 35 + i * 8 + 2, _startPosX + 35 + i * 8 + 4 },
new int[]{ _startPosY + 30 + 10, _startPosY + 30 + 4 + 10, _startPosY + 30 + 10 },
3);
}
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B