diff --git a/AirBomber/src/AirBomberPackage/JFrameAirBomber.form b/AirBomber/src/AirBomberPackage/JFrameAirBomber.form
index e29b23f..e978d4f 100644
--- a/AirBomber/src/AirBomberPackage/JFrameAirBomber.form
+++ b/AirBomber/src/AirBomberPackage/JFrameAirBomber.form
@@ -1,15 +1,12 @@
-
diff --git a/AirBomber/src/AirBomberPackage/JFrameAirBomber.java b/AirBomber/src/AirBomberPackage/JFrameAirBomber.java
index da71d20..ea18373 100644
--- a/AirBomber/src/AirBomberPackage/JFrameAirBomber.java
+++ b/AirBomber/src/AirBomberPackage/JFrameAirBomber.java
@@ -5,23 +5,26 @@
package AirBomberPackage;
import java.awt.*;
import javax.swing.*;
+import javax.swing.JOptionPane;
import java.util.Random;
/**
*
* @author Андрей
*/
-public class JFrameAirBomber extends javax.swing.JFrame {
+public class JFrameAirBomber extends javax.swing.JDialog {
/**
* Creates new form JFrameAirBomber
*/
- public JFrameAirBomber() {
+ public JFrameAirBomber(JFrame parent) {
+ super(parent, "Бомбардировщик", true);
initComponents();
}
private DrawingAirBomber _airBomber;
private EnginesType enginesType = EnginesType.RECTANGLE;
+ private DrawingAirBomber _airBomberResult;
/**
* This method is called from within the constructor to initialize the form.
@@ -44,11 +47,11 @@ public class JFrameAirBomber extends javax.swing.JFrame {
ModifyButton = new javax.swing.JButton();
jLabelEngines1 = new javax.swing.JLabel();
jComboBoxEnginesType = new javax.swing.JComboBox<>();
+ buttonSelect = new javax.swing.JButton();
- setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Бомбардировщик");
setFont(new java.awt.Font("Arial", 0, 10)); // NOI18N
- setPreferredSize(new java.awt.Dimension(700, 400));
setSize(new java.awt.Dimension(700, 400));
createAirBomberButton.setText("Создать");
@@ -135,6 +138,13 @@ public class JFrameAirBomber extends javax.swing.JFrame {
}
});
+ buttonSelect.setText("Выбрать");
+ buttonSelect.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ buttonSelectActionPerformed(evt);
+ }
+ });
+
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
@@ -154,7 +164,9 @@ public class JFrameAirBomber extends javax.swing.JFrame {
.addGroup(layout.createSequentialGroup()
.addComponent(createAirBomberButton)
.addGap(18, 18, 18)
- .addComponent(ModifyButton)))
+ .addComponent(ModifyButton)
+ .addGap(18, 18, 18)
+ .addComponent(buttonSelect)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 157, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(upButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
@@ -183,7 +195,8 @@ public class JFrameAirBomber extends javax.swing.JFrame {
.addComponent(jComboBoxEnginesType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
- .addComponent(createAirBomberButton, javax.swing.GroupLayout.DEFAULT_SIZE, 31, Short.MAX_VALUE)
+ .addComponent(createAirBomberButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(buttonSelect, javax.swing.GroupLayout.DEFAULT_SIZE, 31, Short.MAX_VALUE)
.addComponent(ModifyButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(upButton, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
@@ -201,7 +214,9 @@ public class JFrameAirBomber extends javax.swing.JFrame {
private void createAirBomberButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createAirBomberButtonActionPerformed
Random rnd = new Random();
- _airBomber = new DrawingAirBomber(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)), (jComboBoxEngines.getSelectedIndex() + 1) * 2, enginesType);
+ Color chosenColor = JColorChooser.showDialog(this, "Вибирете цвет", Color.BLACK);
+ _airBomber = new DrawingAirBomber(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), chosenColor, (jComboBoxEngines.getSelectedIndex() + 1) * 2, enginesType);
+ SetData();
Draw();
}//GEN-LAST:event_createAirBomberButtonActionPerformed
@@ -233,11 +248,13 @@ public class JFrameAirBomber extends javax.swing.JFrame {
private void ModifyButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ModifyButtonActionPerformed
Random rnd = new Random();
+ Color chosenColor = JColorChooser.showDialog(this, "Вибирете цвет", Color.BLACK);
+ Color chosenDopColor = JColorChooser.showDialog(this, "Вибирете цвет", Color.BLACK);
_airBomber = new DrawingHeavyAirBomber(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000),
- new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)),
+ chosenColor,
(jComboBoxEngines.getSelectedIndex() + 1) * 2,
enginesType,
- new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)),
+ chosenDopColor,
rnd.nextBoolean(), rnd.nextBoolean(), rnd.nextBoolean());
SetData();
Draw();
@@ -258,6 +275,11 @@ public class JFrameAirBomber extends javax.swing.JFrame {
}
}//GEN-LAST:event_jComboBoxEnginesTypeItemStateChanged
+ private void buttonSelectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSelectActionPerformed
+ _airBomberResult = _airBomber;
+ dispose();
+ }//GEN-LAST:event_buttonSelectActionPerformed
+
private void SetData()
{
Random rnd = new Random();
@@ -270,6 +292,11 @@ public class JFrameAirBomber extends javax.swing.JFrame {
airBomberCanvas.repaint();
}
+ public DrawingAirBomber run(){
+ setVisible(true);
+ return _airBomberResult;
+ }
+
/**
* @param args the command line arguments
*/
@@ -300,7 +327,7 @@ public class JFrameAirBomber extends javax.swing.JFrame {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
- new JFrameMap().setVisible(true);
+ new JFrameDopGenerics().setVisible(true);
}
});
}
@@ -308,6 +335,7 @@ public class JFrameAirBomber extends javax.swing.JFrame {
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton ModifyButton;
private AirBomberPackage.CanvasMy airBomberCanvas;
+ private javax.swing.JButton buttonSelect;
private javax.swing.JButton createAirBomberButton;
private javax.swing.JButton downButton;
private javax.swing.JComboBox jComboBoxEngines;
diff --git a/AirBomber/src/AirBomberPackage/JFrameDopGenerics.form b/AirBomber/src/AirBomberPackage/JFrameDopGenerics.form
new file mode 100644
index 0000000..a160bc8
--- /dev/null
+++ b/AirBomber/src/AirBomberPackage/JFrameDopGenerics.form
@@ -0,0 +1,171 @@
+
+
+
diff --git a/AirBomber/src/AirBomberPackage/JFrameDopGenerics.java b/AirBomber/src/AirBomberPackage/JFrameDopGenerics.java
new file mode 100644
index 0000000..5b44774
--- /dev/null
+++ b/AirBomber/src/AirBomberPackage/JFrameDopGenerics.java
@@ -0,0 +1,261 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/GUIForms/JFrame.java to edit this template
+ */
+package AirBomberPackage;
+
+import java.util.Random;
+import java.awt.*;
+import javax.swing.*;
+
+/**
+ *
+ * @author Андрей
+ */
+public class JFrameDopGenerics extends javax.swing.JFrame {
+
+ /**
+ * Creates new form JFrameDopGenerics
+ */
+ public JFrameDopGenerics() {
+ initComponents();
+ int numOfDecals = 2;
+ airBomberGenerator = new SetAirBombersGenericDop<>(numOfDecals);
+ Random rnd = new Random(System.currentTimeMillis());
+ for (int i = 0; i < numOfDecals; i++){
+ EntityAirBomber airBomber;
+ int rndNum = rnd.nextInt(0, 100);
+ if (rndNum % 2 == 0){
+ //создаём обычный бомбардировщик
+ airBomber = new EntityAirBomber(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)));
+ }
+ else{
+ //создаём тяжелый бомбардировщик
+ airBomber = new EntityHeavyAirBomber(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000),
+ new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)),
+ new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)),
+ rnd.nextBoolean(),
+ rnd.nextBoolean(),
+ rnd.nextBoolean());
+ }
+ airBomberGenerator.add(airBomber);
+ }
+
+ for (int i = 0; i < numOfDecals; i++){
+ int rndNum = rnd.nextInt(0, 500);
+ IDrawingObjectDop engines = null;
+ if (rndNum % 3 == 0){
+ //создаем квадратные двигатели
+ engines = new DrawingEngines();
+ }
+ else if (rndNum % 3 == 1){
+ //создаём треугольные двигатели
+ engines = new DrawingEnginesTriangle();
+ }
+ else {
+ //создаём круглые двигатели
+ engines = new DrawingEnginesOval();
+ }
+ engines.setNumberOfEngines(rnd.nextInt(1,4) * 2);
+ airBomberGenerator.add(engines);
+ }
+ }
+
+ private DrawingAirBomber _airBomber;
+ private SetAirBombersGenericDop airBomberGenerator;
+
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ createAirBomberButton = new javax.swing.JButton();
+ leftButton = new javax.swing.JButton();
+ downButton = new javax.swing.JButton();
+ rightButton = new javax.swing.JButton();
+ upButton = new javax.swing.JButton();
+ airBomberCanvas = new AirBomberPackage.CanvasMy();
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+ setTitle("Бомбардировщик");
+
+ createAirBomberButton.setText("Создать");
+ createAirBomberButton.setName("createAirBomberButton"); // NOI18N
+ createAirBomberButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ createAirBomberButtonActionPerformed(evt);
+ }
+ });
+
+ leftButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/AirBomberPackage/arrowLeft.png"))); // NOI18N
+ leftButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
+ leftButton.setMaximumSize(new java.awt.Dimension(30, 30));
+ leftButton.setMinimumSize(new java.awt.Dimension(30, 30));
+ leftButton.setName("buttonLeft"); // NOI18N
+ leftButton.setPreferredSize(new java.awt.Dimension(30, 30));
+ leftButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ moveButtonActionPerformed(evt);
+ }
+ });
+
+ downButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/AirBomberPackage/arrowDown.png"))); // NOI18N
+ downButton.setMaximumSize(new java.awt.Dimension(30, 30));
+ downButton.setMinimumSize(new java.awt.Dimension(30, 30));
+ downButton.setName("buttonDown"); // NOI18N
+ downButton.setPreferredSize(new java.awt.Dimension(30, 30));
+ downButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ moveButtonActionPerformed(evt);
+ }
+ });
+
+ rightButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/AirBomberPackage/arrowRight.png"))); // NOI18N
+ rightButton.setMaximumSize(new java.awt.Dimension(30, 30));
+ rightButton.setMinimumSize(new java.awt.Dimension(30, 30));
+ rightButton.setName("buttonRight"); // NOI18N
+ rightButton.setPreferredSize(new java.awt.Dimension(30, 30));
+ rightButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ moveButtonActionPerformed(evt);
+ }
+ });
+
+ upButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/AirBomberPackage/arrowUp.png"))); // NOI18N
+ upButton.setMaximumSize(new java.awt.Dimension(30, 30));
+ upButton.setMinimumSize(new java.awt.Dimension(30, 30));
+ upButton.setName("buttonUp"); // NOI18N
+ upButton.setPreferredSize(new java.awt.Dimension(30, 30));
+ upButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ moveButtonActionPerformed(evt);
+ }
+ });
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(createAirBomberButton, javax.swing.GroupLayout.DEFAULT_SIZE, 569, Short.MAX_VALUE)
+ .addGap(18, 18, 18)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(upButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(leftButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(downButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(rightButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGap(17, 17, 17))
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(airBomberCanvas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addContainerGap())
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addComponent(airBomberCanvas, javax.swing.GroupLayout.DEFAULT_SIZE, 327, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(createAirBomberButton, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(upButton, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(leftButton, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(downButton, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(rightButton, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE))))
+ .addContainerGap())
+ );
+
+ pack();
+ }// //GEN-END:initComponents
+
+ private void createAirBomberButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createAirBomberButtonActionPerformed
+ _airBomber = airBomberGenerator.buildAirBomber();
+ SetData();
+ Draw();
+ }//GEN-LAST:event_createAirBomberButtonActionPerformed
+
+ private void moveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_moveButtonActionPerformed
+ if (_airBomber == null) return;
+ String name = ((JButton) evt.getSource()).getName();
+ switch (name)
+ {
+ case "buttonUp":
+ _airBomber.MoveTransport(Direction.UP);
+ break;
+ case "buttonDown":
+ _airBomber.MoveTransport(Direction.DOWN);
+ break;
+ case "buttonLeft":
+ _airBomber.MoveTransport(Direction.LEFT);
+ break;
+ case "buttonRight":
+ _airBomber.MoveTransport(Direction.RIGHT);
+ break;
+ }
+ Draw();
+ }//GEN-LAST:event_moveButtonActionPerformed
+
+ private void SetData()
+ {
+ Random rnd = new Random();
+ _airBomber.SetPosition(rnd.nextInt(10, 100), rnd.nextInt(10, 100), airBomberCanvas.getWidth(), airBomberCanvas.getHeight());
+ airBomberCanvas.setAirBomber(_airBomber);
+ }
+
+ private void Draw(){
+ airBomberCanvas.repaint();
+ }
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main(String args[]) {
+ /* Set the Nimbus look and feel */
+ //
+ /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
+ * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
+ */
+ try {
+ for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
+ if ("Nimbus".equals(info.getName())) {
+ javax.swing.UIManager.setLookAndFeel(info.getClassName());
+ break;
+ }
+ }
+ } catch (ClassNotFoundException ex) {
+ java.util.logging.Logger.getLogger(JFrameDopGenerics.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ } catch (InstantiationException ex) {
+ java.util.logging.Logger.getLogger(JFrameDopGenerics.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ } catch (IllegalAccessException ex) {
+ java.util.logging.Logger.getLogger(JFrameDopGenerics.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ } catch (javax.swing.UnsupportedLookAndFeelException ex) {
+ java.util.logging.Logger.getLogger(JFrameDopGenerics.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ }
+ //
+
+ /* Create and display the form */
+ java.awt.EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ new JFrameDopGenerics().setVisible(true);
+ }
+ });
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private AirBomberPackage.CanvasMy airBomberCanvas;
+ private javax.swing.JButton createAirBomberButton;
+ private javax.swing.JButton downButton;
+ private javax.swing.JButton leftButton;
+ private javax.swing.JButton rightButton;
+ private javax.swing.JButton upButton;
+ // End of variables declaration//GEN-END:variables
+}
diff --git a/AirBomber/src/AirBomberPackage/JFrameMapWithSetAirBombers.form b/AirBomber/src/AirBomberPackage/JFrameMapWithSetAirBombers.form
new file mode 100644
index 0000000..2abbdcc
--- /dev/null
+++ b/AirBomber/src/AirBomberPackage/JFrameMapWithSetAirBombers.form
@@ -0,0 +1,247 @@
+
+
+
diff --git a/AirBomber/src/AirBomberPackage/JFrameMapWithSetAirBombers.java b/AirBomber/src/AirBomberPackage/JFrameMapWithSetAirBombers.java
new file mode 100644
index 0000000..8d153de
--- /dev/null
+++ b/AirBomber/src/AirBomberPackage/JFrameMapWithSetAirBombers.java
@@ -0,0 +1,355 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/GUIForms/JFrame.java to edit this template
+ */
+package AirBomberPackage;
+import java.awt.*;
+import javax.swing.*;
+/**
+ *
+ * @author Андрей
+ */
+public class JFrameMapWithSetAirBombers extends javax.swing.JFrame {
+
+ /**
+ * Creates new form JFrameMapWithSetAirBombers
+ */
+ public JFrameMapWithSetAirBombers() {
+ initComponents();
+ }
+ private MapWithSetAirBombersGeneric _mapAirBombersCollectionGeneric;
+
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ airBomberCanvas = new AirBomberPackage.CanvasMy();
+ comboBoxSelectorMap = new javax.swing.JComboBox<>();
+ buttonAddAirBomber = new javax.swing.JButton();
+ maskedTextBoxPosition = new javax.swing.JFormattedTextField();
+ buttonRemoveAirBomber = new javax.swing.JButton();
+ buttonShowStorage = new javax.swing.JButton();
+ buttonShowOnMap = new javax.swing.JButton();
+ leftButton = new javax.swing.JButton();
+ downButton = new javax.swing.JButton();
+ rightButton = new javax.swing.JButton();
+ upButton = new javax.swing.JButton();
+ jLabel1 = new javax.swing.JLabel();
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+
+ comboBoxSelectorMap.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Простая карта", "Городская карта", "Линейная карта" }));
+ comboBoxSelectorMap.setSelectedIndex(-1);
+ comboBoxSelectorMap.addItemListener(new java.awt.event.ItemListener() {
+ public void itemStateChanged(java.awt.event.ItemEvent evt) {
+ comboBoxSelectorMapItemStateChanged(evt);
+ }
+ });
+
+ buttonAddAirBomber.setText("Добавить бомбардировщик");
+ buttonAddAirBomber.setToolTipText("");
+ buttonAddAirBomber.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ buttonAddAirBomberActionPerformed(evt);
+ }
+ });
+
+ try {
+ maskedTextBoxPosition.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##")));
+ } catch (java.text.ParseException ex) {
+ ex.printStackTrace();
+ }
+
+ buttonRemoveAirBomber.setText("Удалить бомбардировщик");
+ buttonRemoveAirBomber.setToolTipText("");
+ buttonRemoveAirBomber.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ buttonRemoveAirBomberActionPerformed(evt);
+ }
+ });
+
+ buttonShowStorage.setText("Посмотреть хранилище");
+ buttonShowStorage.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ buttonShowStorageActionPerformed(evt);
+ }
+ });
+
+ buttonShowOnMap.setText("Посмотреть карту");
+ buttonShowOnMap.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ buttonShowOnMapActionPerformed(evt);
+ }
+ });
+
+ leftButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/AirBomberPackage/arrowLeft.png"))); // NOI18N
+ leftButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
+ leftButton.setMaximumSize(new java.awt.Dimension(30, 30));
+ leftButton.setMinimumSize(new java.awt.Dimension(30, 30));
+ leftButton.setName("buttonLeft"); // NOI18N
+ leftButton.setPreferredSize(new java.awt.Dimension(30, 30));
+ leftButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ moveButtonActionPerformed(evt);
+ }
+ });
+
+ downButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/AirBomberPackage/arrowDown.png"))); // NOI18N
+ downButton.setMaximumSize(new java.awt.Dimension(30, 30));
+ downButton.setMinimumSize(new java.awt.Dimension(30, 30));
+ downButton.setName("buttonDown"); // NOI18N
+ downButton.setPreferredSize(new java.awt.Dimension(30, 30));
+ downButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ moveButtonActionPerformed(evt);
+ }
+ });
+
+ rightButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/AirBomberPackage/arrowRight.png"))); // NOI18N
+ rightButton.setMaximumSize(new java.awt.Dimension(30, 30));
+ rightButton.setMinimumSize(new java.awt.Dimension(30, 30));
+ rightButton.setName("buttonRight"); // NOI18N
+ rightButton.setPreferredSize(new java.awt.Dimension(30, 30));
+ rightButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ moveButtonActionPerformed(evt);
+ }
+ });
+
+ upButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/AirBomberPackage/arrowUp.png"))); // NOI18N
+ upButton.setMaximumSize(new java.awt.Dimension(30, 30));
+ upButton.setMinimumSize(new java.awt.Dimension(30, 30));
+ upButton.setName("buttonUp"); // NOI18N
+ upButton.setPreferredSize(new java.awt.Dimension(30, 30));
+ upButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ moveButtonActionPerformed(evt);
+ }
+ });
+
+ jLabel1.setText("Инструменты");
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(airBomberCanvas, javax.swing.GroupLayout.PREFERRED_SIZE, 664, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 25, Short.MAX_VALUE)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+ .addComponent(comboBoxSelectorMap, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(buttonAddAirBomber, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(maskedTextBoxPosition)
+ .addComponent(buttonRemoveAirBomber, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(buttonShowStorage, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(buttonShowOnMap, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addComponent(jLabel1))
+ .addGap(23, 23, 23))
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addComponent(leftButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(upButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(downButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(rightButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ .addGap(62, 62, 62))))
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(airBomberCanvas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(layout.createSequentialGroup()
+ .addGap(15, 15, 15)
+ .addComponent(jLabel1)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(comboBoxSelectorMap, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGap(60, 60, 60)
+ .addComponent(buttonAddAirBomber)
+ .addGap(38, 38, 38)
+ .addComponent(maskedTextBoxPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGap(18, 18, 18)
+ .addComponent(buttonRemoveAirBomber)
+ .addGap(96, 96, 96)
+ .addComponent(buttonShowStorage)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 12, Short.MAX_VALUE)
+ .addComponent(buttonShowOnMap)
+ .addGap(108, 108, 108)
+ .addComponent(upButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(downButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(leftButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(rightButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addContainerGap())
+ );
+
+ pack();
+ }// //GEN-END:initComponents
+
+ private void moveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_moveButtonActionPerformed
+ String name = ((JButton) evt.getSource()).getName();
+ Direction dir = Direction.NONE;
+ switch (name)
+ {
+ case "buttonUp":
+ dir = Direction.UP;
+ break;
+ case "buttonDown":
+ dir = Direction.DOWN;
+ break;
+ case "buttonLeft":
+ dir = Direction.LEFT;
+ break;
+ case "buttonRight":
+ dir = Direction.RIGHT;
+ break;
+ }
+ airBomberCanvas.getGraphics().drawImage(_mapAirBombersCollectionGeneric.MoveObject(dir), 0, 0, null);
+ }//GEN-LAST:event_moveButtonActionPerformed
+
+ private void comboBoxSelectorMapItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboBoxSelectorMapItemStateChanged
+ AbstractMap map = null;
+ switch (comboBoxSelectorMap.getSelectedIndex())
+ {
+ case 0:
+ map = new SimpleMap();
+ break;
+ case 1:
+ map = new CityMap();
+ break;
+ case 2:
+ map = new LineMap();
+ break;
+ }
+ if (map != null)
+ {
+ _mapAirBombersCollectionGeneric = new MapWithSetAirBombersGeneric(
+ airBomberCanvas.getWidth(), airBomberCanvas.getHeight(), map);
+ airBomberCanvas.getGraphics().drawImage(_mapAirBombersCollectionGeneric.ShowSet(), 0, 0, null);
+ }
+ else
+ {
+ _mapAirBombersCollectionGeneric = null;
+ }
+ }//GEN-LAST:event_comboBoxSelectorMapItemStateChanged
+
+ private void buttonAddAirBomberActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAddAirBomberActionPerformed
+ if (_mapAirBombersCollectionGeneric == null)
+ {
+ return;
+ }
+
+ JFrameAirBomber form = new JFrameAirBomber(this);
+ DrawingAirBomber selectedAirBomber = form.run();
+ if (selectedAirBomber != null)
+ {
+ DrawingObjectAirBomber objectAirBomber = new DrawingObjectAirBomber(selectedAirBomber);
+ if (_mapAirBombersCollectionGeneric.add(objectAirBomber) != -1)
+ {
+ JOptionPane.showMessageDialog(this, "Объект добавлен");
+ airBomberCanvas.getGraphics().drawImage(_mapAirBombersCollectionGeneric.ShowSet(), 0, 0, null);
+ }
+ else
+ {
+ JOptionPane.showMessageDialog(this, "Не удалось добавить объект");
+ }
+ }
+ }//GEN-LAST:event_buttonAddAirBomberActionPerformed
+
+ private void buttonRemoveAirBomberActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRemoveAirBomberActionPerformed
+ if (maskedTextBoxPosition.getText().isBlank() || maskedTextBoxPosition.getText().isEmpty())
+ {
+ return;
+ }
+ var res = JOptionPane.showConfirmDialog((Component) this, (Object) "Удалить объект?", "Удаление", JOptionPane.OK_CANCEL_OPTION);
+ if (res == JOptionPane.CANCEL_OPTION)
+ {
+ return;
+ }
+ int pos = Integer.parseInt(maskedTextBoxPosition.getText());
+ if (_mapAirBombersCollectionGeneric.remove(pos) != null)
+ {
+ JOptionPane.showMessageDialog(null,"Объект удален");
+ airBomberCanvas.getGraphics().drawImage(_mapAirBombersCollectionGeneric.ShowSet(), 0, 0, null);
+ }
+ else
+ {
+ JOptionPane.showMessageDialog(null,"Не удалось удалить объект!");
+ }
+ }//GEN-LAST:event_buttonRemoveAirBomberActionPerformed
+
+ private void buttonShowStorageActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonShowStorageActionPerformed
+ if (_mapAirBombersCollectionGeneric == null)
+ {
+ return;
+ }
+ airBomberCanvas.getGraphics().drawImage(_mapAirBombersCollectionGeneric.ShowSet(), 0, 0, null);
+ }//GEN-LAST:event_buttonShowStorageActionPerformed
+
+ private void buttonShowOnMapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonShowOnMapActionPerformed
+ if (_mapAirBombersCollectionGeneric == null)
+ {
+ return;
+ }
+ airBomberCanvas.getGraphics().drawImage(_mapAirBombersCollectionGeneric.ShowOnMap(), 0, 0, null);
+ }//GEN-LAST:event_buttonShowOnMapActionPerformed
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main(String args[]) {
+ /* Set the Nimbus look and feel */
+ //
+ /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
+ * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
+ */
+ try {
+ for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
+ if ("Nimbus".equals(info.getName())) {
+ javax.swing.UIManager.setLookAndFeel(info.getClassName());
+ break;
+ }
+ }
+ } catch (ClassNotFoundException ex) {
+ java.util.logging.Logger.getLogger(JFrameMapWithSetAirBombers.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ } catch (InstantiationException ex) {
+ java.util.logging.Logger.getLogger(JFrameMapWithSetAirBombers.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ } catch (IllegalAccessException ex) {
+ java.util.logging.Logger.getLogger(JFrameMapWithSetAirBombers.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ } catch (javax.swing.UnsupportedLookAndFeelException ex) {
+ java.util.logging.Logger.getLogger(JFrameMapWithSetAirBombers.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ }
+ //
+
+ /* Create and display the form */
+ java.awt.EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ new JFrameMapWithSetAirBombers().setVisible(true);
+ }
+ });
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private AirBomberPackage.CanvasMy airBomberCanvas;
+ private javax.swing.JButton buttonAddAirBomber;
+ private javax.swing.JButton buttonRemoveAirBomber;
+ private javax.swing.JButton buttonShowOnMap;
+ private javax.swing.JButton buttonShowStorage;
+ private javax.swing.JComboBox comboBoxSelectorMap;
+ private javax.swing.JButton downButton;
+ private javax.swing.JLabel jLabel1;
+ private javax.swing.JButton leftButton;
+ private javax.swing.JFormattedTextField maskedTextBoxPosition;
+ private javax.swing.JButton rightButton;
+ private javax.swing.JButton upButton;
+ // End of variables declaration//GEN-END:variables
+}
diff --git a/AirBomber/src/AirBomberPackage/MapWithSetAirBombersGeneric.java b/AirBomber/src/AirBomberPackage/MapWithSetAirBombersGeneric.java
new file mode 100644
index 0000000..71e788d
--- /dev/null
+++ b/AirBomber/src/AirBomberPackage/MapWithSetAirBombersGeneric.java
@@ -0,0 +1,123 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package AirBomberPackage;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+/**
+ *
+ * @author Андрей
+ */
+public class MapWithSetAirBombersGeneric {
+ private int _pictureWidth;
+ private int _pictureHeight;
+ private int _placeSizeWidth = 110;
+ private int _placeSizeHeight = 100;
+ private SetAirBombersGeneric _setAirBombers;
+ private U _map;
+ public MapWithSetAirBombersGeneric(int picWidth, int picHeight, U map)
+ {
+ int width = picWidth / _placeSizeWidth;
+ int height = picHeight / _placeSizeHeight;
+ _setAirBombers = new SetAirBombersGeneric(width * height);
+ _pictureWidth = picWidth;
+ _pictureHeight = picHeight;
+ _map = map;
+ }
+
+ public int add(T airBomber){
+ return _setAirBombers.Insert(airBomber);
+ }
+
+ public T remove(int position){
+ return _setAirBombers.Remove(position);
+ }
+
+ public BufferedImage ShowSet()
+ {
+ BufferedImage bmp = new BufferedImage(_pictureWidth, _pictureHeight, BufferedImage.TYPE_INT_ARGB);
+ Graphics2D gr = bmp.createGraphics();
+ DrawBackground(gr);
+ DrawAirBombers(gr);
+ return bmp;
+ }
+
+ public BufferedImage ShowOnMap()
+ {
+ Shaking();
+ for (int i = 0; i < _setAirBombers.Count; i++)
+ {
+ var airBomber = _setAirBombers.Get(i);
+ if (airBomber != null)
+ {
+ return _map.CreateMap(700, 700, airBomber);
+ }
+ }
+ return new BufferedImage(_pictureWidth, _pictureHeight, BufferedImage.TYPE_INT_ARGB);
+ }
+
+ public BufferedImage MoveObject(Direction direction)
+ {
+ if (_map != null)
+ {
+ return _map.MoveObject(direction);
+ }
+ return new BufferedImage(_pictureWidth, _pictureHeight, BufferedImage.TYPE_INT_ARGB);
+ }
+
+ private void Shaking()
+ {
+ int j = _setAirBombers.Count - 1;
+ for (int i = 0; i < _setAirBombers.Count; i++)
+ {
+ if (_setAirBombers.Get(i) == null)
+ {
+ for (; j > i; j--)
+ {
+ var car = _setAirBombers.Get(j);
+ if (car != null)
+ {
+ _setAirBombers.Insert(car, i);
+ _setAirBombers.Remove(j);
+ break;
+ }
+ }
+ if (j <= i)
+ {
+ return;
+ }
+ }
+ }
+ }
+
+ private void DrawBackground(Graphics2D g)
+ {
+ g.setColor(Color.GRAY);
+ g.fillRect(0, 0, _pictureWidth, _pictureHeight);
+ g.setColor(Color.WHITE);
+ g.setStroke(new BasicStroke(3));
+ 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);
+ }
+ g.setStroke(new BasicStroke(1));
+ g.setColor(Color.BLACK);
+ }
+
+ private void DrawAirBombers(Graphics2D g)
+ {
+ int numOfObjectsInRow = _pictureWidth / _placeSizeWidth;
+ for (int i = 0; i < _setAirBombers.Count; i++)
+ {
+ if (_setAirBombers.Get(i) != null){
+ _setAirBombers.Get(i).SetObject((numOfObjectsInRow - (i % numOfObjectsInRow) - 1) * _placeSizeWidth, (i / numOfObjectsInRow) * _placeSizeHeight, _pictureWidth, _pictureHeight);
+ _setAirBombers.Get(i).DrawingObject(g);
+ }
+ }
+ }
+}
diff --git a/AirBomber/src/AirBomberPackage/SetAirBombersGeneric.java b/AirBomber/src/AirBomberPackage/SetAirBombersGeneric.java
new file mode 100644
index 0000000..b425ac4
--- /dev/null
+++ b/AirBomber/src/AirBomberPackage/SetAirBombersGeneric.java
@@ -0,0 +1,100 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package AirBomberPackage;
+
+/**
+ *
+ * @author Андрей
+ */
+public class SetAirBombersGeneric {
+ ///
+ /// Массив объектов, которые храним
+ ///
+ private T[] _places;
+ ///
+ /// Количество объектов в массиве
+ ///
+ public int Count;
+ ///
+ /// Конструктор
+ ///
+ ///
+ public SetAirBombersGeneric(int count)
+ {
+ _places = (T[]) new Object[count];
+ Count = count;
+ }
+ ///
+ /// Добавление объекта в набор
+ ///
+ /// Добавляемый автомобиль
+ ///
+ public int Insert(T airBomber)
+ {
+ return Insert(airBomber, 0);
+ }
+ ///
+ /// Добавление объекта в набор на конкретную позицию
+ ///
+ /// Добавляемый автомобиль
+ /// Позиция
+ ///
+ public int Insert(T airBomber, int position)
+ {
+ if (position >= _places.length)
+ {
+ return -1;
+ }
+ if (_places[position] != null)
+ {
+ int indexNull = -1;
+ for (int i = position; i < _places.length; i++)
+ {
+ if (_places[i] == null)
+ {
+ indexNull = i;
+ break;
+ }
+ }
+ if (indexNull == -1) return -1;
+ for (int i = indexNull; i > position; i--)
+ {
+ T tmp = _places[i];
+ _places[i] = _places[i - 1];
+ _places[i - 1] = tmp;
+ }
+ }
+ _places[position] = airBomber;
+ return position;
+ }
+ ///
+ /// Удаление объекта из набора с конкретной позиции
+ ///
+ ///
+ ///
+ public T Remove(int position)
+ {
+ if (position >= _places.length)
+ {
+ return null;
+ }
+ T removedObject = _places[position];
+ _places[position] = null;
+ return removedObject;
+ }
+ ///
+ /// Получение объекта из набора по позиции
+ ///
+ ///
+ ///
+ public T Get(int position)
+ {
+ if (position >= _places.length)
+ {
+ return null;
+ }
+ return _places[position];
+ }
+}
diff --git a/AirBomber/src/AirBomberPackage/SetAirBombersGenericDop.java b/AirBomber/src/AirBomberPackage/SetAirBombersGenericDop.java
new file mode 100644
index 0000000..4bb8908
--- /dev/null
+++ b/AirBomber/src/AirBomberPackage/SetAirBombersGenericDop.java
@@ -0,0 +1,99 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package AirBomberPackage;
+import java.util.Random;
+/**
+ *
+ * @author Андрей
+ */
+public class SetAirBombersGenericDop {
+ private Object[] _bases;
+ private Object[] _engines;
+ private int Count;
+
+ public SetAirBombersGenericDop(int count){
+ _bases = new Object[count];
+ _engines = new Object[count];
+ Count = count;
+ }
+
+ public int add(T base){
+ return add(base, 0);
+ }
+
+ public int add(T base, int position){
+ if (position >= _bases.length)
+ {
+ return -1;
+ }
+ if (_bases[position] != null)
+ {
+ int indexNull = -1;
+ for (int i = position; i < _bases.length; i++)
+ {
+ if (_bases[i] == null)
+ {
+ indexNull = i;
+ break;
+ }
+ }
+ if (indexNull == -1) return -1;
+ for (int i = indexNull; i > position; i--)
+ {
+ T tmp = (T) _bases[i];
+ _bases[i] = _bases[i - 1];
+ _bases[i - 1] = tmp;
+ }
+ }
+ _bases[position] = base;
+ return position;
+ }
+
+ public int add(U engine){
+ return add(engine, 0);
+ }
+
+ public int add(U engine, int position){
+ if (position >= _engines.length)
+ {
+ return -1;
+ }
+ if (_engines[position] != null)
+ {
+ int indexNull = -1;
+ for (int i = position; i < _engines.length; i++)
+ {
+ if (_engines[i] == null)
+ {
+ indexNull = i;
+ break;
+ }
+ }
+ if (indexNull == -1) return -1;
+ for (int i = indexNull; i > position; i--)
+ {
+ U tmp = (U) _engines[i];
+ _engines[i] = _engines[i - 1];
+ _engines[i - 1] = tmp;
+ }
+ }
+ _engines[position] = engine;
+ return position;
+ }
+
+
+ public DrawingAirBomber buildAirBomber(){
+ Random rnd = new Random();
+ int baseIndex = rnd.nextInt(0, _bases.length);
+ int engineIndex = rnd.nextInt(0, _engines.length);
+ EnginesType enginesType;
+ T selectedBase = (T) _bases[baseIndex];
+ U selectedEngines = (U) _engines[engineIndex];
+ if (selectedEngines instanceof DrawingEngines) enginesType = EnginesType.RECTANGLE;
+ else if (selectedEngines instanceof DrawingEnginesTriangle) enginesType = EnginesType.TRIANGLE;
+ else enginesType = EnginesType.OVAL;
+ return new DrawingAirBomber(selectedBase.getSpeed(), selectedBase.getWeight(), selectedBase.getBodyColor(), selectedEngines.getNumberOfEngines(), enginesType);
+ }
+}