¡1200 puntos, rogando por el código fuente del juego de rompecabezas digital JAVA!
1:
importar java.io.IOException;
importar javax.sound.sampled.LineUnavailableException;
importar javax.sound .sampled.UnsupportedAudioFileException;
// Juego de rompecabezas basado en el principio del taoísmo Huarong. Aproveche las aplicaciones de componentes ligeros.
importar java.awt.BorderLayout;
importar java.awt.Button;
importar java.awt.Choice;
importar java.awt.Color;
importar java.awt.Container;
importar java.awt.event.ActionEvent;
importar java.awt.event. ActionListener;
importar javax.swing.Icon;
importar javax.swing.ImageIcon;
importar javax.swing.JFrame;
importar javax.swing.JLabel;
importar javax.swing.JOptionPane;
importar javax.swing.JPanel;
la clase pública MyMainFrame extiende JFrame implementa ActionListener {
/**
*
*/
privado estático final largo serialVersionUID = 1L;
MyCanvas myCanvas;
JPanel panelNorth,panelPreview;
Botón de inicio, vista previa, establecer
Contenedor contenedor
public MyMainFrame(); {//Inicialización
contenedor=this.getContentPane();
start=new Button("Inicio");
start.addActionListener(this);
vista previa=nuevo Botón("Vista previa");
vista previa.addActionListener(this);
conjunto = nuevo Botón("Establecer"); p>
set.addActionListener(this);
panelPreview=new JPanel();
panelPreview.setLayout(null);
Icono icono= new ImageIcon ("images/pic_"+MyCanvas.pictureID+".jpg");
JLabel label=new JLabel(icon
label.setBounds(0,0,400,400);
panelPreview.add(label);
panelNorth=new JPanel();
panelNorth.setBackground(Color.amarillo);
panelNorth.add(inicio);
panelNorth.add(vista previa);
panelNorth.add(conjunto)
;
myCanvas=new MyCanvas();
contenedor.add(myCanvas,BorderLayout.CENTER);
contenedor.add(panelNorth,BorderLayout.NORTH) ;
this.setTitle("Juego de rompecabezas de moldeo-1212");
this.setLocation(300,200);
this.setSize(408,465); /p>
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(3);
} / /fin del constructor de inicialización
public void actionPerformed(ActionEvent e) {
Botón botón=(Botón)e.getSource();
if( botón= =inicio){
myCanvas.Start();
}else if(button==vista previa){
if(button.getLabel() == "Vista previa"){
contenedor.remove(myCanvas);
contenedor.add(panelPreview
panelPreview.updateUI();
p>
contenedor.repaint();
botón.setLabel("Return");
}else{
contenedor.remove (panelPreview) ;
contenedor.add(myCanvas);
contenedor.repaint();
button.setLabel("Vista previa");
}
}else if(button==set){
Elección pic = nueva Elección();
//pic.add( "QQ" );
pic.add("Belleza");
int i=JOptionPane.showConfirmDialog(this,pic,"Select Picture", JOptionPane.OK_CANCEL_OPTION);
//Utilice el cuadro de diálogo de selección para seleccionar imágenes.
if(i==JOptionPane.YES_OPTION){
MyCanvas.pictureID=pic.getSelectedIndex()+5;
myCanvas.reLoadPictrue();
Icono icono=nuevo ImageIcon("images/pic_"+MyCanvas.pictureID+".jpg");
JLabel label=nuevo JLabel(icono);
label.setBounds(0,0,400,400);
panelPreview.removeAll();
panelPreview.add(label);
panelPreview.repaint();
}
}
}
public static void main(String[] args) lanza UnsupportedAudioFileException, LineUnavailableException, IOException
{
new MyMainFrame();
} //fin de principal
}
2:
importar java.awt.Rectangle;
importar java.awt.event.MouseEvent;
importar java.awt.event.MouseListener;
importar javax.swing.Icon;
importar javax.swing.ImageIcon;
importar javax.swing.JOptionPane;
importar javax.swing.JPanel; p> p>
la clase pública MyCanvas extiende JPanel implementa MouseListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
boolean hasAddActionListener=false;// Establece la bandera del oyente de acción del cuadrado, TRUE significa que se ha agregado el evento de acción p>
Celda cell[];//Definir la celda cuadrada
Rectángulo cellNull;//Definir el área cuadrada vacía como una clase rectangular
public static int pictureID=4 ;//Selección actual Código de imagen
public MyCanvas() {
this.setLayout(null);
this.setSize(400,400);
cellNull=new Rectángulo(300,300,100,100);//El área del cuadrado vacío está en la tercera fila y cada tres columnas
cell=new Cell[16];
Icono icono;
for (int i = 0; i < 4; i++) {
for(en
t j=0;j<4;j++){
icon=new ImageIcon("images/pic_"+pictureID+"_"+(i*4+j+1)+".jpg");
celda[i*4+j]=nueva celda(icono);
celda[i*4+j].setLocation(j*100,i*100);
this.add(celda[i*4+j]);
}
}
this.remove(celda[15 ]);//Elimina el último cuadrado extra
} //Coloca 9 imágenes pequeñas y transpone la última
public void reLoadPictrue(){//Cuando Al seleccionar otros gráficos para rompecabezas, necesitas recargar la nueva imagen
Icon icon;
for (int i = 0; i < 4; i++) {
for(int j=0;j<4;j++){
icon=new ImageIcon("images/pic_"+pictureID+"_"+(i*4+j+1)+".jpg ");
celda[i*4+j].setIcon(icon);
}
}
} p>
public boolean isFinish(){//Determinar si la unión se realizó correctamente
for(int i=0;i<15;i++)
{ int x=cell[ i ].getBounds().x;
int y=cell[i].getBounds().y;
if(y/100*4+x/100!= i )
return false;
} //fin de for
return true;
}
public void Start(){//Reorganizar la cuadrícula e interrumpir el orden
while(cell[0].getBounds().x<=100&&cell[0].getBounds().y<= 100){ //Cuando el primer cuadrado está más cerca de la esquina superior izquierda
int x=cellNull.getBounds().x;
int y=cellNull.getBounds() .y;
int direction=(int)(Math.random()*4);//Produce 0-4, correspondiente al movimiento hacia arriba, abajo, izquierda y derecha del cuadrado vacío
if( dirección==0){//El cuadrado vacío se mueve hacia la izquierda, intercambia posiciones con el cuadrado de la izquierda y el cuadrado de la izquierda se mueve hacia la derecha
x-=100;
if ( prueba(x,y)){
for(int j=0;j<15;j++){
if((cell[j].getBounds().x = =x)&&(cell[j].getBounds().y==y)){//Busca los botones de la izquierda por turno
cell[j].move("RIGHT" ,100);
cellNull.setLocation(x,y);
> break;//Saltar del bucle for después de encontrarlo
}
}
}
}else if(dirección ==1) {//DERECHA
x+=100;
if(test(x,y)){
for(int j=0; j<15; j++){
if((celda[j].getBounds().x==x)&&(celda[j].getBounds().y==y)){
celda[j].move("LEFT",100);
cellNull.setLocation(x,y);
break;
}
}
}
}si no(dirección==2){//ARRIBA
y-=100 ;
if(test(x,y)){
for(int j=0;j<15;j++){
if((celda [j]. getBounds().x==x)&&(cell[j].getBounds().y==y)){
celda[j].move("DOWN",100 ); p>
cellNull.setLocation(x,y);
descanso;
}
}
}
}else{//DOWN
y+=100;
if(test(x,y)){
para (int j= 0;j<15;j++){
if((celda[j].getBounds().x==x)&&(celda[j].getBounds().y= =y)) {
celda[j].move("UP",100);
cellNull.setLocation(x,y);
romper ;
}
}
}
}
}
si( !hasAddActionListener)/ /Si el evento de acción aún no se ha agregado, agréguelo
for(int i=0;i<15;i++)//Agregue un evento de acción para el cuadrado número 1 para que que se puede mover haciendo clic en el botón p>
cell[i].addMouseListener(this);
hasAddActionListener=true;
}
prueba booleana privada(int x,int y ){
if((x>=0&&x<=200)||(y>=0&&y<=200))
devuelve verdadero;
else
devuelve falso;
}
public void mouseClicked(MouseEvent e)
{ }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void mousePressed(MouseEvent e) {
//El evento del mouse del cuadrado no se maneja en la clase Cell porque se usan algunos métodos en MyCanvas.
p >Cell button=(Cell)e.getSource();
int x1=button.getBounds().x;//Obtener las coordenadas del cuadrado en el que se hizo clic
int y1=button.getBounds().y;
int x2=cellNull.getBounds().x;//Obtener las coordenadas del cuadrado vacío
int y2=cellNull . getBounds().y;
if(x1==x2&&y1-y2==100)//Comparar e intercambiar si se cumplen las condiciones
button.move("UP ", 100);
else if(x1==x2&&y1-y2==-100)
button.move("DOWN",100);
else if(x1-x2==100&y1==y2)
botón.move("IZQUIERDA",100);
else if(x1-x2==-100&&y1= =y2 )
button.move("RIGHT",100);
else
return;//No se realizará ningún procesamiento si no se satisface
cellNull.setLocation(x1,y1);
this.repaint();
if(this.isFinish()){//Juzga si está completo
p>JOptionPane.showMessageDialog(this, "Jing Feng, felicidades por completar el rompecabezas, ¡vamos! ¿Quieres continuar al siguiente nivel?");
for(int i=0; i<15; i++)
cell[i].removeMouseListener(this);// Si se completa, cancele el evento del mouse y el clic del mouse en el cuadrado ya no funcionará
hasAddActionListener=false;
p>}
}
}
3:
importar javax .swing.Icon;
importar javax.swing.JButton;
clase pública Cell extiende JButton {
/**
*
*/
privado estático final largo serialVersionUID = 1L;
Celda(Icono icono){//en realidad ICON
super( icono);
this.setSize(100,100);
}
pu
blic void move(Dirección de la cuerda,int sleep){//Movimiento de cuadrados
if(direction=="UP"){
this.setLocation(this.getBounds() . x,this.getBounds().y-100);
}else if(direction=="DOWN"){
this.setLocation(this.getBounds(). x ,this.getBounds().y+100);
}else if(direction=="LEFT"){
this.setLocation(this.getBounds().x - 100,this.getBounds().y);
}else{
this.setLocation(this.getBounds().x+100,this.getBounds().y ) ;
}
}
}