Читайте также: |
|
Часто для того, чтобы избежать написание повторяющегося кода инициализации, необходимо вызвать код одного конструктора из другого.
Вот пример, как это можно делать:
public class SomeClass {
int a;
int b;
int c;
public SomeClass(int a, int b){
this.a = a;
this.b = b;
}
public SomeClass(int a, int b, int c){
// Вызов конструктора с двумя параметрами.
this(a, b);
this.c = c;
}
public void Show(){
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}
Как вы видите, для этого используется ключевое слово this, после которого в круглых скобках указываем параметры для соответствующего конструктора (с двумы параметрами в данном случае).
Игра «Пятнашки»
package prjavapytna;
import javax.swing.UIManager;
import java.awt.*;
public class ApplicationPytna
{
boolean packFrame = false;
/**Construct the application*/
public ApplicationPytna()
{
FramePytna frame = new FramePytna();
//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 ApplicationPytna();
}
}
package prjavapytna;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FramePytna 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 FramePytna()
{
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("Пятнашки");
//запрещаем изменение размера окна
this.setResizable(false);
//Создаем основное меню
JMenuBar menuBar = new JMenuBar();
//Создаем подменю
JMenu menuGame = new JMenu("Игра");
JMenu menuHelp = new JMenu("Помощь");
//Добавляем подменю в основное меню
menuBar.add(menuGame);
menuBar.add(menuHelp);
//Устанавливаем полученное меню на окно
this.setJMenuBar(menuBar);
//Создаем элементы подменю Game с обработчиками событий
JMenuItem item1 = new JMenuItem("Новая игра");
JMenuItem item2 = new JMenuItem("Выход");
//Создаем элемент подменю Help с обработчиками событий
JMenuItem item3 = new JMenuItem("О игре...");
//Добавляем обработчики событий по нажатию
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,
"Игра Пятнашки","Об игре",
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("Старт новой игры");
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("Хороший ход");
}else status.setText("Проигрыш");
}
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("Вы выиграли!!!");
int result = JOptionPane.showConfirmDialog(null,
"Вы выиграли!!!","Вы выиграли!!! Новая игра?",JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.YES_OPTION)newGame();
else gamePane.setVisible(false);
}
}
}
}
АППЛЕТЫ
Дата добавления: 2015-10-29; просмотров: 159 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Менеджеры компоновок | | | Пишем первый апплет |