import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import sweeper.Box; import sweeper.Coord; import sweeper.Game; import sweeper.Ranges; public class JavaSweeper extends JFrame { private Game game; private final int IMAGE_SIZE = 50; private JPanel panel; private JLabel label; public static void main(String[] args) { new JavaSweeper(); } private JavaSweeper() { int COLS = 9; int ROWS = 9; int BOMBS = 10; game = new Game(COLS, ROWS, BOMBS); game.start(); setImages(); initPanel(); initLabel(); initFrame(); } private void initLabel() { label = new JLabel(getMessage()); Font font = new Font("Tahoma", Font.ITALIC,18); label.setFont(font); label.setHorizontalAlignment(JLabel.CENTER); add (label, BorderLayout.SOUTH); } private void initPanel() { panel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); for (Coord coord : Ranges.getAllCoords()) g.drawImage((Image) game.getBox(coord).image, coord.x * IMAGE_SIZE, coord.y * IMAGE_SIZE, this); } }; panel.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { int x = e.getX() / IMAGE_SIZE; int y = e.getY() / IMAGE_SIZE; Coord coord = new Coord(x, y); switch (e.getButton()) { case MouseEvent.BUTTON1: game.pressLeftButton(coord); break; case MouseEvent.BUTTON3: game.pressRightButton(coord); break; case MouseEvent.BUTTON2: game.start(); break; default: break; } label.setText(getMessage()); panel.repaint(); } }); panel.setPreferredSize(new Dimension( Ranges.getSize().x * IMAGE_SIZE, Ranges.getSize().y * IMAGE_SIZE)); add(panel); } private void initFrame() { setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setTitle("Сапёр с Явы"); setResizable(false); pack(); setLocationRelativeTo(null); setVisible(true); } private void setImages() { for (Box box : Box.values()) { box.image = getImage(box.name().toLowerCase()); } setIconImage(getImage("icon")); } private Image getImage(String name) { String filename = "img/" + name + ".png"; ImageIcon icon = new ImageIcon(getClass().getResource(filename)); return icon.getImage(); } private String getMessage(){ switch (game.getState()){ case BOMBED : return "Ба-да-бум !!! Вы проиграли!"; case WINNER : return "Вы выиграли! Поздравляем!"; case PLAYED : default: if (game.getTotalFlaged() == 0) return "Добро пожаловать!"; else return "Подумай дважды! Флажков " + game.getTotalFlaged() + " на " + game.getTotalBombs() + " бомб."; } } }