¿Cómo escribir un pequeño juego en Java?
/*
*La idea general del algoritmo de Lianliankan: determinada por dos botones. Si el número de estos dos botones es igual, comienza a buscar la ruta que los conecta. Encuentra tu camino por aquí.
*Hay tres situaciones: (De las siguientes tres situaciones, podemos saber que se necesitan tres pruebas. Estas tres pruebas detectan una carretera recta respectivamente. Por lo tanto, habrá
* tres caminos Si los tres caminos son un botón vacío, entonces solo hay tres tipos de líneas rectas (dos puntos de giro) que conectan los dos botones
* 1. Adyacente
*
* 2. Si no son adyacentes, primero busque un botón vacío en el mismo nivel que el primer botón 1). Después de encontrarlo, mire horizontalmente el segundo botón para encontrar este botón vacío.
* Si hay botones en la columna. 2). Si no, vea si hay un botón entre el primer botón y el botón vacío que lo acompaña. 3). Si no, comience desde
*El botón vacío que está paralelo al primer botón es perpendicular al segundo botón para ver si hay un botón. Si no, el camino está despejado y puede eliminarse.
*
* 3. Si 2 falla, busque un botón vacío en la misma columna que el primer botón. 1). Después de encontrarlo, vea si el segundo botón es perpendicular a la línea donde se encuentra el botón vacío.
* 2). En caso contrario, compruebe si hay un botón entre el primer botón de la misma columna y el botón vacío. 3).Si no, está en la misma columna que el primer botón.
*El botón vacío está horizontalmente en la misma columna que el segundo botón para ver si hay un botón. Si no, el camino está despejado y puede eliminarse.
*
*Si los tres pasos anteriores fallan, estos dos botones no se pueden borrar.
*/
Importar javax .swing *;
Importar Java . . *;
La clase pública Lianliankan implementa ActionListener {
JFrame host; //Panel principal
Contenedor thisContainer
JPanel centerPanel, SouthPanel. , northPanel//Subpanel
JButton botón de diamantes[][]= new JButton[6][5]; //Matriz de botones del juego
JButton exitButton, resetButton,newButton/ /Botones salir, reordenar y reiniciar
JLabel fraccional able = new JLabel(" 0 "); // Etiqueta fraccionaria
JButton primerBotón, segundoBotón //Graba dos selecciones respectivamente.
//Almacena la posición del botón del juego (en realidad solo hay 6 filas y 5 columnas. Pero usamos 8 filas y 7 columnas. Es equivalente a rodear este botón del panel.
//Una capa de botones es 0, lo que elimina los dos botones cerca del borde del panel)
int grid[][]= new int[8][7];
Información de expresión booleana estática = False // Determina si el botón está seleccionado.
int x0 = 0, y0 = 0, x = 0, y = 0, firstMsg = 0, secondMsg = 0, validarLV//Las coordenadas de posición del botón del juego
int i, j, k, n; // Control del método de eliminación
public void init() {
MainFrame = new JFrame("JKJ Lianliankan");
este contenedor = mainframe . getcontentpane();
este contenedor .setlayout()
panel central = new JPanel(); > panel sur = nuevo JPanel();
panel norte = nuevo JPanel();
thisContainer.add(centerPanel, "Centro");
thisContainer add(southPanel, "South");
thisContainer.add(northPanel, "North");
panel central (new GridLayout(6, 5));
for(int cols = 0; cols lt6; cols ) {
for(int filas = 0; número de filas lt5; filas ) {
botóndiamantes [cols ][rows] = new JButton(String
.value of(grid[cols 1][rows 1]);
Botón de diamante [columna][fila].addActionListener (esto);
panel central agregar(botón de diamantes[cols][filas]);
}
}
salir. botón = nuevo JButton(" salir ");
botón de salida addactionlistener(this);
botón de reinicio = nuevo JButton(" reagrupar ");
botón de reinicio . addactionlistener(this);
NewlyButton = new JButton("Un juego más");
nuevo botón . panel .add(botón de salida);
panel sur .add(botón de reinicio);
panel sur .add(botón recién);
etiqueta de fracción. settext (cadena. valor de (entero. parse int(etiqueta de fracción
.
getText()))));
panel norte. add(fraccional capaz);
mainFrame.setBounds(280, 100, 500, 450);
mainframe .
int randoms, cols, rows
for(int twins = 1; twins lt= 15; Twins) {// a * * 15 pares de botones, 30.
randoms =(int)(math . random()* 25 1); //El número en el botón
for(int like = 1; similarlt= 2; like) {
cols =(int)(matemáticas. aleatorio()* 6 1);
filas =(int)(matemáticas. aleatorio()* 5 1); >
while (grid[cols][rows]!= 0) {//Igual a 0 significa que hay un botón en este espacio.
cols =(int)(math. random()* 6 1
filas =(int)(math. random()* 5 1);
}
este . grid[cols][rows]= aleatorios;
}
}
}
Fracción pública (){
etiqueta de fracción . settext(string . value of(integer . parse int(etiqueta de fracción
.getText()) 100)); /p>
}
Recarga de vacío público() {
int save[]= new int[30];
int n = 0, cols, filas
int grid[][]= new int[8][7];
for(int I = 0; i lt= 6; i) {< / p>
for(int j = 0; j lt= 5; j ) {
if (this.grid[i][j]!= 0) {
save[n]= this . grid[I][j]; //Anota el número de cada botón.
n; //Hay varios botones que no han sido eliminados.
}
}
}
n = n-1
this.grid = grid
while(n gt; = 0) {//Reemplaza el botón que no ha sido eliminado.
cols =(int)(math. random()* 6 1
filas =(int)(math. random()* 5 1);
while (grid[cols][rows]!= 0) {
cols =(int)(math . random()* 6 1);
filas =( int)(math . random()* 5 1);
}
this . grid[cols][rows]= save[n];
n-;
}
mainframe.set visible(false);
pressInformation = false//La información del clic del botón aquí debe clasificarse como inicial.
init();
for(int I = 0; i lt6; i) {
for(int j = 0; j lt5; j) {
if(grid[I 1][j 1]= = 0)
Botón rombo [i][j]. set visible(false);
}
}
}
estimación de anulación pública incluso(int placeX, int placeY, JButton bz ) {
if (pressInformation == false) {
x = lugarX
y = lugarY
segundo mensaje = grid[x ][y];
segundoBotón = bz
pressInformation = true
}else{
x0 = x;
y0 = y;
fristMsg = segundoMsg
primerBotón = segundoBotón
x = lugarX
y = lugarY
segundo mensaje = grid[x][y];
segundoBotón = bz
if(primer mensaje = = segundo mensaje amp; amp segundo botón! = primerBotón) {
xiao();
}
}
}
Vacío público xiao() {// ¿Se puede eliminar en las mismas circunstancias? Análisis cuidadoso, no notas.
if((x0 == x amp; amp(y0 == y 1 || y0 == y - 1))
| |((x0 == x 1 | |
for(j = 0;j lt7;j) {
If (grid[x0][j] == 0) {//Determina qué botón es igual el primer botón está vacío juntos.
// Si se encuentra un botón vacío, compare la posición del segundo botón y la posición del botón vacío de acuerdo con las tres condiciones del valor de la columna
If (y gtJ. ) {//El segundo botón está a la derecha del botón vacío.
for(I = y-1;i gt= j;I-){// Detecta si hay todos los espacios desde el lado izquierdo horizontal del segundo botón hasta la columna donde se encuentra el espacio.
if (grid[x][i]!= 0) {
k = 0;
Break //Salir si no hay espacios. . Esta salida es imposible cuando k==2, por lo que se mostrará la misma barra de juicio en la línea 215 en la parte inferior.
} De lo contrario {
k = 1;
} // K=1 significa que todos los espacios han pasado la primera verificación, es decir, desde la segunda botón a la columna donde están los espacios, quedan todos los espacios.
}
if (k == 1) {
line passone();//Ingrese la segunda verificación, es decir, juzgue el primer botón y su espacio entre botones de pares.
}
}
if(y lt; J) {//El segundo botón está a la izquierda del botón vacío.
for(I = y 1;i lt= j;I) {//Compruebe si hay todos los espacios desde el lado derecho horizontal del segundo botón hasta la columna donde se encuentra el espacio.
if (grid[x][i]!= 0) {
k = 0
Romper
} else; {
k = 1;
}
}
si (k == 1) {
line passone();
}
}
If (y == j) {//El segundo botón está en la misma columna que el botón vacío .
line passone();
}
}
//Compruebe la columna J por tercera vez para determinar si el botón está vacío Perpendicular al segundo botón para ver si hay un botón.
if (k == 2) {
If (x0 == x) {//El primer y segundo botón están en la misma fila.
Remove();
}
if (x0 ltX) {//El primer botón está debajo del segundo botón.
for(n = x0; n lt= x-1; N) {//Si hay un botón en la fila verticalmente desde el botón vacío hasta el segundo botón.
if (grid[n][j]!= 0) {
k = 0
Romper
}<; /p>
//No hay ningún botón que indique que este camino estará abierto.
if(grid[n][j]= = 0 amp; ampn == x - 1) {
remove();
}< / p>
}
}
If (x0 gtX) {//El primer botón está encima del segundo botón.
for(n = x0; n gt= x 1; n - ) {
if (grid[n][j]!= 0) {
k = 0;
Romper;
}
if(grid[n][j]= = 0 amp; ampn == x 1) {
Eliminar();
}
}
}
}
}// - for
//Cuando lo anterior no detecta que el botón en blanco está en la misma fila que el primer botón (no se puede encontrar la ruta de conexión al segundo botón), realice la siguiente ejecución .
//Detecta un botón en blanco en la misma columna que el primer botón.
for(I = 0;ilt8;i) {
If (grid[i][y0] == 0) {//Asegúrate de que esté en la misma posición que el primer botón Qué botón de la columna está vacío.
if(x gt; I) {//El segundo botón está debajo de este botón vacío.
for(j = x-1; j gt= I; j - ) {
if (grid[j][y]!= 0) {
k = 0;
Romper
} En caso contrario {
k = 1; >}
if (k == 1) {
rowPassOne();
}
}
if(x lt; I) {//El segundo botón está encima de este botón vacío.
for(j = x 1;j lt= I;j) {
if (grid[j][y]!= 0) {
k = 0;
Romper
} En caso contrario {
k = 1;
if (k == 1) {
rowPassOne();
}
}
Si (x == i) {//El segundo botón está equipado con este botón vacío.
rowPassOne();
}
}
if (k == 2) {
Si (y0 == y) {//El segundo botón está en la misma columna que el primer botón.
Remove();
}
if (y0 ltY) {//El segundo botón está a la derecha del primer botón.
for(n = y0; n lt= y-1; n ) {
if (grid[i][n]!= 0) {
k = 0;
Romper;
}
if(grid[I][n]= = 0 amp; ampn == y - 1) {
Eliminar();
}
}
}
if (y0 gtY) { / /El segundo botón está a la izquierda del primer botón.
for(n = y0; n gt= y 1; n - ) {
if (grid[i][n]!= 0) {
k = 0;
Romper;
}
if(grid[I][n]= = 0 amp; ampn == y 1) {
Eliminar();
}
}
}
}
}// - para
}// - else
}// -xiao
línea vacía públicaPassOne() {
Si (y0 gtJ) {//El primer botón está en la misma fila y el botón vacío está a la izquierda.
for(I = y0-1;I gt= j;I-){//Determina si hay un botón entre el primer botón y el botón vacío de la izquierda.
if(grid[x0][i]!= 0) {
k = 0;
Romper
} En caso contrario; {
k = 2;
} // K=2 indica que la segunda verificación ha pasado.
}
}
If (y0 ltJ) {//El primer botón está en la misma fila y el botón vacío está a la derecha.
for(I = y0 1;i lt= j;i) {
if(grid[x0][i]!= 0) {
k = 0;
Romper
} En caso contrario {
k = 2;
}
}
public void rowPassOne() {
If (x0 gtI) {//El primer botón está en Abajo el botón vacío en la misma columna que él.
for(j = x0-1; j gt= I; j - ) {
if (grid[j][y0]!= 0) {
k = 0;
Romper
} En caso contrario {
k = 2
}
}
}
If (x0 ltI) {//El primer botón está encima del botón en blanco en la misma columna.
for(j = x0 1;j lt= I;j) {
if (grid[j][y0]!= 0) {
k = 0;
Romper
} En caso contrario {
k = 2;
}
}
Eliminación de anulación pública() {
primer botón establecido visible(falso);
segundo botón establecer visible(false);
Puntuación();
pressInformation = false
k = 0;
Grid[x0][y0]= 0;
grid[x][y]= 0;
}
acción de anulación pública realizada (evento de acción e ){
if(e . getsource()= = nuevo botón){
int grid[][]= nuevo int[8][7];
this.grid = grid
construcción aleatoria();
mainframe establecido visible(false);
pressInformation = false
< p. >init();}
if (e.getSource() == exitButton)
sistema salida(0);
if (e.getSource() == resetButton)
Sobrecarga();
for(int cols = 0; cols lt6; cols ) {
for(int filas = 0; número de filas lt5; filas) {
if(e . getsource()= = botón de diamantes[cols][filas])
estimateEven ( columna 1, fila 1, botón de diamantes[columna][fila]);
}
}
}
Vacío estático público main(String[] args) {
Lianliankanllk = Nuevo Lianliankan();
llk . randombuild();
llk .init();
}
}