|
|||||||
![]() ![]() ![]() Новости О проекте Рассылки Связь с нами Апплеты Вопрос-ответ Классы Конференция Примеры Статьи Введение Примеры Статьи Вопрос-ответ Конференция Примеры Статьи Downloads Словарь терминов Статьи |
Пример реализации игры Пятнашкиpackage fifteen; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Frame1 extends JFrame { JPanel contentPane; JPanel gamePane = new JPanel(); BorderLayout borderLayout1 = new BorderLayout(); //линия статус бара JLabel status= new JLabel(); //массив кнопочек JButton[][] buttons = new JButton[4][4]; //матрица для хранения чисел int[][] matrix = new int[4][4]; /**Construct the frame*/ public Frame1() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } /**Component initialization*/ private void jbInit() throws Exception { contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(borderLayout1); this.setSize(new Dimension(206,275)); this.setTitle("Fifteen"); //запрещаем изменение размера окна this.setResizable(false); //Создаем основное меню JMenuBar menuBar = new JMenuBar(); //Создаем подменю JMenu menuGame = new JMenu("Game"); JMenu menuHelp = new JMenu("Help"); //Добавляем подменю в основное меню menuBar.add(menuGame); menuBar.add(menuHelp); //Устанавливаем полученное меню на окно this.setJMenuBar(menuBar); //Создаем элементы подменю Game с обработчиками событий JMenuItem item1 = new JMenuItem("New game"); JMenuItem item2 = new JMenuItem("Exit"); //Создаем элемент подменю Help с обработчиками событий JMenuItem item3 = new JMenuItem("About..."); //Добавляем обработчики событий по нажатию item1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { newGame(); } }); item2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0);//Выход из системы } }); item3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Game fifteen. Copyright Yura Ladik. Site: www.JavaPortal.ru","About", JOptionPane.QUESTION_MESSAGE); } }); //Добавляем созданные элементы к подменю menuGame.add(item1); menuGame.add(item2); menuHelp.add(item3); gamePane.setLayout(null); // добавляем кнопочки int count=0; for(int i = 0;i<4;i++) for(int j = 0;j<4;j++) { buttons[i][j] = new JButton(""+count); //устанавливаем обработчик событий buttons[i][j].addMouseListener(new mAdapter(i,j)); buttons[i][j].setSize(50,50); buttons[i][j].setLocation(50*j,50*i); buttons[i][j].setCursor(new Cursor(Cursor.HAND_CURSOR)); gamePane.add(buttons[i][j]); matrix[i][j]=count;//задаем матрицу count++; } buttons[0][0].setText(" "); //Добавляем игровую панель с кнопками contentPane.add(gamePane,BorderLayout.CENTER); //обрамляем строку статуса status.setBorder(BorderFactory.createEtchedBorder()); //Добавляем строку статуса contentPane.add(status,BorderLayout.SOUTH); //новая игра newGame(); } /**Overridden so we can exit when window is closed*/ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } /**Случайным образом переставляем элементы матрицы*/ public void randomizeMatrix() { for(int i = 0;i<100;i++) { int a = (int)(Math.random()*4); int b = (int)(Math.random()*4); int a2 = (int)(Math.random()*4); int b2 = (int)(Math.random()*4); int c = matrix[a][b]; matrix[a][b] = matrix[a2][b2]; matrix[a2][b2] = c; } } /**Начинаем новую игру*/ public void newGame() { randomizeMatrix(); for(int i = 0;i<4;i++) for(int j = 0;j<4;j++) { //пишем на кнопочках числа из матрицы if(matrix[i][j]!=0)buttons[i][j].setText(""+matrix[i][j]); else buttons[i][j].setText(""); } status.setText("new game started"); gamePane.setVisible(true); } /**Класс адаптера прослушивающий события над кнопкой*/ class mAdapter extends java.awt.event.MouseAdapter { int posi,posj; int startx=0; int starty=0; /**Конструктор адаптера в зависимости от позиции кнопочки*/ mAdapter(int posI,int posJ) { this.posi=posI; this.posj=posJ; } /**При нажатой кнопке мыши*/ public void mousePressed(MouseEvent e) { //меняем курсор buttons[posi][posj].setCursor(new Cursor(Cursor.MOVE_CURSOR)); //запоминаем точку начала переноса кнопки startx=e.getX(); starty=e.getY(); } /**При отпускании кнопки мыши*/ public void mouseReleased(MouseEvent e) { //меняем курсор buttons[posi][posj].setCursor(new Cursor(Cursor.HAND_CURSOR)); //запоминаем точку окончания переноса кнопки int endx=e.getX(); int endy=e.getY(); //определяем направление переноса //если абсолютная величина (shiftx) больше //абсолютной величины (shifty) //значит передвигаемся по оси х int shiftx=endx-startx; int shifty=endy-starty; if(Math.abs(shiftx)>Math.abs(shifty)) { //определяем направление движения по оси х if(shiftx>0) {//впрово //если это не крайние правые кнопки //и правая кнопка пустая //меняем местами кнопку с пустой кнопкой if((posj != 3) && (matrix[posi][posj+1] == 0)) { matrix[posi][posj+1] = matrix[posi][posj]; matrix[posi][posj]=0; buttons[posi][posj].setText(""); buttons[posi][posj+1].setText(""+matrix[posi][posj+1]); status.setText("good turn"); }else status.setText("it is impossible"); } else {//влево //если это не крайние левые кнопки //и левая кнопка пустая //меняем местами кнопку с пустой кнопкой if((posj != 0) && (matrix[posi][posj-1] == 0)) { matrix[posi][posj-1] = matrix[posi][posj]; matrix[posi][posj]=0; buttons[posi][posj].setText(""); buttons[posi][posj-1].setText(""+matrix[posi][posj-1]); status.setText("good turn"); }else status.setText("it is impossible"); } } else { //определяем направление движения по оси y if(shifty>0) {//вниз //если это не крайние нижние кнопки //и нижняя кнопка пустая //меняем местами кнопку с пустой кнопкой if((posi != 3) && (matrix[posi+1][posj] == 0)) { matrix[posi+1][posj] = matrix[posi][posj]; matrix[posi][posj]=0; buttons[posi][posj].setText(""); buttons[posi+1][posj].setText(""+matrix[posi+1][posj]); status.setText("good turn"); }else status.setText("it is impossible"); } else {//вверх //если это не крайние верхние кнопки //и верхняя кнопка пустая //меняем местами кнопку с пустой кнопкой if((posi != 0) && (matrix[posi-1][posj] == 0)) { matrix[posi-1][posj] = matrix[posi][posj]; matrix[posi][posj]=0; buttons[posi][posj].setText(""); buttons[posi-1][posj].setText(""+matrix[posi-1][posj]); status.setText("good turn"); }else status.setText("it is impossible"); } } //проверяем все ли числа стоят на своих местах //если да то победа!!! int count=1; int error=0; for(int i = 0;i<4;i++) for(int j = 0;j<4;j++) { if(matrix[i][j]!=count)error++; count++; } if(error==1) { status.setText("You win!!!"); int result = JOptionPane.showConfirmDialog(null, "You win!!!","You win!!! New game?",JOptionPane.YES_NO_OPTION); if (result == JOptionPane.YES_OPTION)newGame(); else gamePane.setVisible(false); } } } } package fifteen; import javax.swing.UIManager; import java.awt.*; public class Application1 { boolean packFrame = false; /**Construct the application*/ public Application1() { Frame1 frame = new Frame1(); //Validate frames that have preset sizes //Pack frames that have useful preferred //size info, e.g. from their layout if (packFrame) { frame.pack(); } else { frame.validate(); } //Center the window Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); frame.setVisible(true); } /**Main method*/ public static void main(String[] args) { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch(Exception e) { e.printStackTrace(); } new Application1(); } } JAR-архивы: |
||||||
![]() |
![]() |