lab3 without an additional task
This commit is contained in:
parent
b9c29806b0
commit
b0b474077f
@ -1,7 +1,8 @@
|
|||||||
import frames.FrameBattleship;
|
import frames.FrameBattleship;
|
||||||
|
import frames.FrameShipsCollection;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
public static void main(String[] args) throws IOException { new FrameBattleship(); }
|
public static void main(String[] args) throws IOException { new FrameShipsCollection(); }
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package drawing_objects;
|
package drawing_objects;
|
||||||
|
|
||||||
import entities.EntityShip;
|
import entities.EntityShip;
|
||||||
|
import movement_strategy.*;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
@ -18,6 +19,7 @@ public class DrawingShip {
|
|||||||
public int getWidth() {return shipWidth;}
|
public int getWidth() {return shipWidth;}
|
||||||
private int shipHeight = 50;
|
private int shipHeight = 50;
|
||||||
public int getHeight() {return shipHeight;}
|
public int getHeight() {return shipHeight;}
|
||||||
|
public IMoveableObject getMoveableObject() {return new DrawingObjectShip(this);}
|
||||||
public DrawingShip(int speed, double weight, Color bodyColor, int width, int height, int blocksType, int blocksNumber) {
|
public DrawingShip(int speed, double weight, Color bodyColor, int width, int height, int blocksType, int blocksNumber) {
|
||||||
if (width < shipWidth || height < shipHeight)
|
if (width < shipWidth || height < shipHeight)
|
||||||
return;
|
return;
|
||||||
|
@ -20,6 +20,9 @@ import java.util.Random;
|
|||||||
public class FrameBattleship extends JFrame {
|
public class FrameBattleship extends JFrame {
|
||||||
private DrawingShip drawingShip;
|
private DrawingShip drawingShip;
|
||||||
private AbstractStrategy abstractStrategy;
|
private AbstractStrategy abstractStrategy;
|
||||||
|
public JButton selectShipButton;
|
||||||
|
private DrawingShip selectedShip;
|
||||||
|
public DrawingShip getSelectedShip() {return selectedShip;}
|
||||||
private JComboBox<String> comboBoxStrategy;
|
private JComboBox<String> comboBoxStrategy;
|
||||||
private JComponent pictureBoxBattleship;
|
private JComponent pictureBoxBattleship;
|
||||||
public FrameBattleship() throws IOException {
|
public FrameBattleship() throws IOException {
|
||||||
@ -40,6 +43,7 @@ public class FrameBattleship extends JFrame {
|
|||||||
JButton stepButton = new JButton("Шаг");
|
JButton stepButton = new JButton("Шаг");
|
||||||
JButton createShipButton = new JButton("Создать корабль");
|
JButton createShipButton = new JButton("Создать корабль");
|
||||||
JButton createBattleshipButton = new JButton("Создать линкор");
|
JButton createBattleshipButton = new JButton("Создать линкор");
|
||||||
|
selectShipButton = new JButton("Выбрать корабль");
|
||||||
JButton rightButton = new JButton(new ImageIcon(ImageIO.read(new File("images/right.png"))));
|
JButton rightButton = new JButton(new ImageIcon(ImageIO.read(new File("images/right.png"))));
|
||||||
rightButton.setPreferredSize(new Dimension(30,30));
|
rightButton.setPreferredSize(new Dimension(30,30));
|
||||||
JButton leftButton = new JButton(new ImageIcon(ImageIO.read(new File("images/left.png"))));
|
JButton leftButton = new JButton(new ImageIcon(ImageIO.read(new File("images/left.png"))));
|
||||||
@ -75,6 +79,9 @@ public class FrameBattleship extends JFrame {
|
|||||||
constraints.gridx = 1;
|
constraints.gridx = 1;
|
||||||
constraints.gridy = 0;
|
constraints.gridy = 0;
|
||||||
createPanel.add(createBattleshipButton, constraints);
|
createPanel.add(createBattleshipButton, constraints);
|
||||||
|
constraints.gridx = 2;
|
||||||
|
constraints.gridy = 0;
|
||||||
|
createPanel.add(selectShipButton, constraints);
|
||||||
//addition to movementPanel
|
//addition to movementPanel
|
||||||
constraints.gridx = 2;
|
constraints.gridx = 2;
|
||||||
constraints.gridy = 1;
|
constraints.gridy = 1;
|
||||||
@ -110,16 +117,19 @@ public class FrameBattleship extends JFrame {
|
|||||||
private void buttonCreateBattleshipClick() {
|
private void buttonCreateBattleshipClick() {
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
pictureBoxBattleship.setBounds(0,0,getContentPane().getWidth(),getContentPane().getHeight());
|
pictureBoxBattleship.setBounds(0,0,getContentPane().getWidth(),getContentPane().getHeight());
|
||||||
drawingShip = new DrawingBattleship(random.nextInt(200) + 100, random.nextInt(2000) + 1000, new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)),
|
Color bodyColor = JColorChooser.showDialog(this,"Выбор базового цвета", null);
|
||||||
new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)), random.nextBoolean(), random.nextBoolean(), pictureBoxBattleship.getWidth(), pictureBoxBattleship.getHeight(), random.nextInt(3),(random.nextInt(3)+1)*2);
|
Color additColor = JColorChooser.showDialog(this,"Выбор дополнительного цвета", null);
|
||||||
|
drawingShip = new DrawingBattleship(random.nextInt(200) + 100, random.nextInt(2000) + 1000, bodyColor, additColor, random.nextBoolean(),
|
||||||
|
random.nextBoolean(), pictureBoxBattleship.getWidth(), pictureBoxBattleship.getHeight(), random.nextInt(3),(random.nextInt(3)+1)*2);
|
||||||
drawingShip.setPosition(random.nextInt(90) + 10, random.nextInt(90) + 10);
|
drawingShip.setPosition(random.nextInt(90) + 10, random.nextInt(90) + 10);
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
private void buttonCreateShipClick(){
|
private void buttonCreateShipClick(){
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
pictureBoxBattleship.setBounds(0,0,getContentPane().getWidth(),getContentPane().getHeight());
|
pictureBoxBattleship.setBounds(0,0,getContentPane().getWidth(),getContentPane().getHeight());
|
||||||
drawingShip = new DrawingShip(random.nextInt(200) + 100, random.nextInt(2000) + 1000, new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)),
|
Color bodyColor = JColorChooser.showDialog(this,"Выбор цвета", null);
|
||||||
pictureBoxBattleship.getWidth(), pictureBoxBattleship.getHeight(), random.nextInt(3),(random.nextInt(3)+1)*2);
|
drawingShip = new DrawingShip(random.nextInt(200) + 100, random.nextInt(2000) + 1000, bodyColor, pictureBoxBattleship.getWidth(),
|
||||||
|
pictureBoxBattleship.getHeight(), random.nextInt(3),(random.nextInt(3)+1)*2);
|
||||||
drawingShip.setPosition(random.nextInt(90) + 10, random.nextInt(90) + 10);
|
drawingShip.setPosition(random.nextInt(90) + 10, random.nextInt(90) + 10);
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
@ -168,4 +178,10 @@ public class FrameBattleship extends JFrame {
|
|||||||
}
|
}
|
||||||
pictureBoxBattleship.repaint();
|
pictureBoxBattleship.repaint();
|
||||||
}
|
}
|
||||||
|
public void select(){
|
||||||
|
if (drawingShip == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
selectedShip = drawingShip;
|
||||||
|
}
|
||||||
}
|
}
|
95
src/frames/FrameShipsCollection.java
Normal file
95
src/frames/FrameShipsCollection.java
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
package frames;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import drawing_objects.DrawingShip;
|
||||||
|
import generics.ShipsGenericCollection;
|
||||||
|
import movement_strategy.DrawingObjectShip;
|
||||||
|
|
||||||
|
public class FrameShipsCollection extends JFrame {
|
||||||
|
private ShipsGenericCollection<DrawingShip, DrawingObjectShip> ships;
|
||||||
|
JComponent pictureBoxCollection;
|
||||||
|
TextField textFieldNumber;
|
||||||
|
public FrameShipsCollection(){
|
||||||
|
super("Набор кораблей");
|
||||||
|
setSize(new Dimension(900,500));
|
||||||
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
createGui();
|
||||||
|
ships = new ShipsGenericCollection<>(pictureBoxCollection.getWidth(), pictureBoxCollection.getHeight());
|
||||||
|
setVisible(true);
|
||||||
|
}
|
||||||
|
private void createGui(){
|
||||||
|
//components initialisation
|
||||||
|
pictureBoxCollection = new JComponent(){
|
||||||
|
public void paintComponent(Graphics graphics){
|
||||||
|
super.paintComponent(graphics);
|
||||||
|
Graphics2D graphics2D = (Graphics2D) graphics;
|
||||||
|
if (ships != null) ships.showShips(graphics2D);
|
||||||
|
super.repaint();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
pictureBoxCollection.setSize(new Dimension(700, 450));
|
||||||
|
JButton buttonAddShip = new JButton("Добавить корабль");
|
||||||
|
textFieldNumber = new TextField();
|
||||||
|
JButton buttonRemoveShip = new JButton("Удалить корабль");
|
||||||
|
JButton buttonRefreshCollection = new JButton("Обновить коллекцию");
|
||||||
|
//ActionListeners and ActionCommand addition
|
||||||
|
buttonAddShip.addActionListener(e -> buttonAddShipClick());
|
||||||
|
buttonRemoveShip.addActionListener(e -> buttonRemoveShipClick());
|
||||||
|
buttonRefreshCollection.addActionListener(e -> buttonRefreshCollectionClick());
|
||||||
|
//addition to frame
|
||||||
|
JPanel panelCollection = new JPanel(new GridBagLayout());
|
||||||
|
GridBagConstraints constraints = new GridBagConstraints();
|
||||||
|
constraints.insets.left = constraints.insets.right = 2;
|
||||||
|
constraints.insets.top = constraints.insets.bottom = 25;
|
||||||
|
constraints.fill = GridBagConstraints.BOTH;
|
||||||
|
constraints.gridx = 0;
|
||||||
|
constraints.gridy = 0;
|
||||||
|
panelCollection.add(buttonAddShip, constraints);
|
||||||
|
constraints.gridx = 0;
|
||||||
|
constraints.gridy = 1;
|
||||||
|
panelCollection.add(textFieldNumber, constraints);
|
||||||
|
constraints.gridx = 0;
|
||||||
|
constraints.gridy = 2;
|
||||||
|
panelCollection.add(buttonRemoveShip, constraints);
|
||||||
|
constraints.gridx = 0;
|
||||||
|
constraints.gridy = 3;
|
||||||
|
panelCollection.add(buttonRefreshCollection, constraints);
|
||||||
|
setLayout(new BorderLayout());
|
||||||
|
add(panelCollection, BorderLayout.EAST);
|
||||||
|
add(pictureBoxCollection, BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
private void buttonAddShipClick() {
|
||||||
|
FrameBattleship form;
|
||||||
|
try {
|
||||||
|
form = new FrameBattleship();
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
form.selectShipButton.addActionListener(e->{
|
||||||
|
form.select();
|
||||||
|
DrawingShip ship = form.getSelectedShip();
|
||||||
|
form.dispose();
|
||||||
|
if (ships.insert(ship)) {
|
||||||
|
JOptionPane.showMessageDialog(this, "Объект добавлен");
|
||||||
|
pictureBoxCollection.repaint();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
JOptionPane.showMessageDialog(this, "Не удалось добавить объект");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
private void buttonRemoveShipClick(){
|
||||||
|
int pos = Integer.parseInt(textFieldNumber.getText());
|
||||||
|
if (ships.remove(pos)){
|
||||||
|
JOptionPane.showMessageDialog(this, "Объект удален");
|
||||||
|
pictureBoxCollection.repaint();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
JOptionPane.showMessageDialog(this, "Не удалось удалить объект");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void buttonRefreshCollectionClick(){pictureBoxCollection.repaint();}
|
||||||
|
}
|
41
src/generics/SetGeneric.java
Normal file
41
src/generics/SetGeneric.java
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package generics;
|
||||||
|
|
||||||
|
import java.lang.reflect.Array;
|
||||||
|
|
||||||
|
public class SetGeneric<T extends Object>{
|
||||||
|
private final T[] places;
|
||||||
|
public int getCount() {return places.length;}
|
||||||
|
public SetGeneric(int count, Class<T> type){
|
||||||
|
places = (T[]) Array.newInstance(type, count);
|
||||||
|
}
|
||||||
|
public boolean insert(T ship){
|
||||||
|
return insert(ship, 0);
|
||||||
|
}
|
||||||
|
public boolean insert(T ship, int position){
|
||||||
|
if (!(position >= 0 && position < places.length))
|
||||||
|
return false;
|
||||||
|
if (places[position] != null)
|
||||||
|
{
|
||||||
|
int ind = position;
|
||||||
|
while (ind < places.length && places[ind] != null)
|
||||||
|
ind++;
|
||||||
|
if (ind == places.length)
|
||||||
|
return false;
|
||||||
|
for (int i = ind - 1; i >= position; i--)
|
||||||
|
places[i + 1] = places[i];
|
||||||
|
}
|
||||||
|
places[position] = ship;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
public boolean remove(int position){
|
||||||
|
if(!(position >= 0 && position < getCount()))
|
||||||
|
return false;
|
||||||
|
places[position] = null;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
public T get(int position){
|
||||||
|
if(!(position >= 0 && position < getCount()))
|
||||||
|
return null;
|
||||||
|
return places[position];
|
||||||
|
}
|
||||||
|
}
|
64
src/generics/ShipsGenericCollection.java
Normal file
64
src/generics/ShipsGenericCollection.java
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
package generics;
|
||||||
|
|
||||||
|
import drawing_objects.*;
|
||||||
|
import movement_strategy.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class ShipsGenericCollection<T extends DrawingShip, U extends IMoveableObject>{
|
||||||
|
private int pictureWidth;
|
||||||
|
private int pictureHeight;
|
||||||
|
private final int placeSizeWidth = 220;
|
||||||
|
private final int placeSizeHeight = 60;
|
||||||
|
private SetGeneric<T> collection;
|
||||||
|
public ShipsGenericCollection(int picWidth, int picHeight){
|
||||||
|
int width = picWidth / placeSizeWidth;
|
||||||
|
int height = picHeight / placeSizeHeight;
|
||||||
|
pictureWidth = picWidth;
|
||||||
|
pictureHeight = picHeight;
|
||||||
|
collection = new SetGeneric<T>(width * height, (Class<T>) DrawingShip.class);
|
||||||
|
}
|
||||||
|
public boolean insert ( T obj) {
|
||||||
|
if (obj != null)
|
||||||
|
return collection.insert(obj);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public boolean remove (int pos){
|
||||||
|
T obj = collection.get(pos);
|
||||||
|
if (obj != null)
|
||||||
|
return collection.remove(pos);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public U getU(int pos){
|
||||||
|
if(collection.get(pos) == null)
|
||||||
|
return null;
|
||||||
|
return (U)collection.get(pos).getMoveableObject();
|
||||||
|
}
|
||||||
|
public void showShips(Graphics2D graphics2D){
|
||||||
|
DrawBackground(graphics2D);
|
||||||
|
DrawObjects(graphics2D);
|
||||||
|
}
|
||||||
|
private void DrawBackground(Graphics2D g){
|
||||||
|
BasicStroke stroke = new BasicStroke(3);
|
||||||
|
g.setStroke(stroke);
|
||||||
|
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){
|
||||||
|
for (int i = 0; i < collection.getCount(); i++){
|
||||||
|
DrawingShip ship = collection.get(i);
|
||||||
|
if (ship != null)
|
||||||
|
{
|
||||||
|
int inRow = pictureWidth / placeSizeWidth;
|
||||||
|
ship.setPosition(i % inRow * placeSizeWidth, (collection.getCount() / inRow - 1 - i / inRow) * placeSizeHeight + 5);
|
||||||
|
ship.drawTransport(g);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user