Логин:   Пароль:






Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100
Rambler's Top100

Java: ПримерыПример реализации игры Пятнашки

Пример реализации игры Пятнашки


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-архивы:
jar-архив
zip-архив (с исходниками)


Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95