import javax.swing.*; import javax.swing.plaf.basic.BasicArrowButton; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; public class GameFrame extends JDialog { protected DrawingCruiser SelectedCruiser; GameFrame() { this.setSize(710, 535); this.setTitle("Cruiser"); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE); this.setModalityType(ModalityType.APPLICATION_MODAL); this.setResizable(false); this.setLocationRelativeTo(null); GamePanel panel = new GamePanel(); this.add(panel); this.setVisible(true); } public DrawingCruiser getSelectedCruiser(){ return SelectedCruiser; } public class GamePanel extends JPanel { static final int SCREEN_W = 700; static final int SCREEN_H = 500; int xx = 0; int yy = 0; private DrawingCruiser _drawningCruiser; private AbstractStrategy _abstractStrategy; JColorChooser dialogColor = new JColorChooser(); GamePanel() { this.setLayout(null); this.setPreferredSize(new Dimension(SCREEN_W, SCREEN_H)); GridBagConstraints layers = new GridBagConstraints(); JButton buttonCruiser = new JButton("Создать объект"); buttonCruiser.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Random random = new Random(); Color color = Color.BLACK; Color choosenColor = JColorChooser.showDialog(getParent(), "Выберите цвет", Color.WHITE); if(choosenColor != null){ color = choosenColor; } _drawningCruiser = new DrawingCruiser(random.nextInt(100, 300), random.nextInt(1000, 3000), color, GamePanel.SCREEN_W, GamePanel.SCREEN_H); _drawningCruiser.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100)); int ornament = random.nextInt(1, 4); switch (ornament){ case 1: _drawningCruiser.wheels = new NumberOfWheels(random.nextInt(2, 5)); break; case 2: _drawningCruiser.wheels = new DopClassRect(random.nextInt(2, 5)); break; default: _drawningCruiser.wheels = new DopClassMixed(random.nextInt(2, 5)); break; } repaint(); } }); buttonCruiser.setBounds(20 + 150, 390, 120, 30); this.add(buttonCruiser); JButton buttonAdvancedCruiser = new JButton("Создать продвинутый объект"); buttonAdvancedCruiser.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Random random = new Random(); Color color = Color.BLACK; Color colorAdd = Color.WHITE; Color choosenColor = JColorChooser.showDialog(getParent(), "Выберите цвет", Color.WHITE); Color choosenAddColor = JColorChooser.showDialog(getParent(), "Выберите цвет", Color.WHITE); if(choosenColor != null){ color = choosenColor; } if(choosenAddColor != null){ colorAdd = choosenAddColor; } _drawningCruiser = new DrawingAdvancedCruiser(random.nextInt(100, 300), random.nextInt(1000, 3000), color, colorAdd, random.nextBoolean(),random.nextBoolean(),random.nextBoolean(), GamePanel.SCREEN_W, GamePanel.SCREEN_H); _drawningCruiser.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100)); int ornament = random.nextInt(1, 4); switch (ornament){ case 1: _drawningCruiser.wheels = new NumberOfWheels(random.nextInt(2, 5)); break; case 2: _drawningCruiser.wheels = new DopClassRect(random.nextInt(2, 5)); break; default: _drawningCruiser.wheels = new DopClassMixed(random.nextInt(2, 5)); break; } repaint(); } }); buttonAdvancedCruiser.setBounds( 20, 390, 120, 30); this.add(buttonAdvancedCruiser); JTextField textStrategy = new JTextField(); textStrategy.setBounds(550, 20, 120, 30); this.add(textStrategy); JButton buttonStep = new JButton("Шаг"); buttonStep.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (_drawningCruiser == null) { return; } if (textStrategy.getText() != null) { switch(textStrategy.getText()) { case "center": _abstractStrategy = new MoveToCenter(); break; case "border": _abstractStrategy = new MoveToBorder(); break; }; if (_abstractStrategy == null) { return; } _abstractStrategy.SetData((IMoveableObject) _drawningCruiser, SCREEN_W, SCREEN_H); } if (_abstractStrategy == null) { return; } System.out.println("step"); _abstractStrategy.MakeStep(); repaint(); if (_abstractStrategy.GetStatus() == Status.Finish) { _abstractStrategy = null; } } }); buttonStep.setBounds(550, 60, 70, 30); this.add(buttonStep); JButton up = new BasicArrowButton(BasicArrowButton.NORTH); up.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { _drawningCruiser.MoveTransport(Direction.Up); repaint(); } }); JButton left = new BasicArrowButton(BasicArrowButton.WEST); left.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { _drawningCruiser.MoveTransport(Direction.Left); repaint(); } }); JButton down = new BasicArrowButton(BasicArrowButton.SOUTH); down.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { _drawningCruiser.MoveTransport(Direction.Down); repaint(); } }); JButton right = new BasicArrowButton(BasicArrowButton.EAST); right.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { _drawningCruiser.MoveTransport(Direction.Right); repaint(); } }); up.setBounds(570, 350, 30, 30); this.add(up); down.setBounds(570, 350 + 40, 30, 30); this.add(down); left.setBounds(570 - 40, 350 + 40, 30, 30); this.add(left); right.setBounds(570 + 40, 350 + 40, 30, 30); this.add(right); JButton buttonSelectedCruiser = new JButton("Выбрать объект"); buttonSelectedCruiser.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { SelectedCruiser = _drawningCruiser; dispose(); } }); buttonSelectedCruiser.setBounds(510, 100, 150, 30); this.add(buttonSelectedCruiser); } private void Draw() { if (_drawningCruiser == null) { return; } Graphics gr =new DebugGraphics(); _drawningCruiser.DrawTransport(gr); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); draw(g); } public void draw(Graphics g) { if (_drawningCruiser != null) { _drawningCruiser.DrawTransport(g); } } } public Color ChooseColor(JFrame MonorailFrame){ JColorChooser dialog = new JColorChooser(); Color res = JColorChooser.showDialog(MonorailFrame, "Выберите цвет", Color.WHITE); return res; } }