Código fuente del juego Buscaminas
importar java.util.*;
importar java.io.*;
importar javax.swing.*;
Importar javax.swing.timer;
Importar Java.awt.event.*;
Importar javax.swing.border.*;
/**
* ltp gtTítulo: Buscaminas
*
* ltp gtDescripción: El primer juego que jugué desde que aprendí JAVA, el programa puede existir Hay algunos errores. Espero que puedas plantearlo para debatirlo.
*Si quieres probar el archivo de registro, puedes cambiar el número de minas para que sea menor.
* while(land
*If ((landmineNum-1)==0), hay tres dígitos, que indican el número restante de truenos.
* for(int I = 0;i lt99;i) lt;/p gt;
* ltp gtCopyright: Copyright (c) 2006 lt;/p gt ; p>
*
* ltp gt empresa: privado lt/p gt;
*
* @author cqp
* Demostración de @Version
*/
La clase pública Shao Lei extiende JFrame {
/* *Propiedades de clase y creación de instancias de control*/
ImageIcon icon; // Imagen del botón;
HashMap map = new HashMap(); // El estado del trueno y los números, la clave es la posición (0-479), el valor. es el estado, 0-6 es el número, 7 es un trueno;
HashMap flag _ minel = new HashMap() // La marca marcada en el botón, como signo de interrogación, marca de verificación, cancelar , 8 marca trueno, 9 está marcado con un signo de interrogación, 10 está vacío por defecto
JMenuBar file = new JMenuBar(); //Menu bar; JMenu(); //Botón de menú;
JMenuItem start = new JMenuItem(); //Elemento de menú;
JMenuItem record = new JMenuItem(); /p>
JMenuItem quit = new JMenuItem(); //Elemento del menú;
JMenuItem clearReocrd = new JMenuItem(); //Elemento del menú;
JMenu help = new; JMenu(); //Botón de menú;
JButton[]cardsBtn = nuevo JButton[480]; //480 botones;
JButton comienza BTN = nuevo JButton(); Botón de inicio;
JPanel pane = new JPanel(); //Panel de campo minado;
JPanel paneTime = new JPanel(); //El panel donde se encuentra el contador;
JPanel pane = new JPanel(); p>
JOptionPane save record = new JOptionPane(); //Guardar cuadro de diálogo de registro;
JTextField landmineTally = new JTextField(" 99 "); p>JTextField time tly = new JTextField(" 0 "); // Contador de tiempo;
GridLayout GridLayout 1 = new GridLayout(); //Diseño de cuadrícula; // Instalaciones de subprocesos;
String[]mine = new String[99]; //Almacena la ubicación de la mina, utilizada para determinar si la ubicación de la mina se repite;
sl frame _ button _ actionAdatper[]click en el botón = new sl frame _ button _ actionAdatper[480]; //Clase de evento del botón de campo minado;
int mouse key = 0; Ratón presionado primero, usado para determinar.
Si los botones izquierdo y derecho del mouse se presionan al mismo tiempo;
int time count = 0; //Contador de tiempo;
/* *Método de construcción*/
Público Shao Lei (){
Prueba {
JB init();
} catch(Exception){
excepción . printstacktrace() ;
}
}
/* *Configuración de interfaz*/
Private void jbInit() lanza una excepción. {
getContentPane(). establecer diseño(nulo);
this.setJMenuBar(archivo);
juego . settext(" juego ");
iniciar settext(" apertura "). );
start . addactionlistener(new sl frame _ start _ action adaptor(this));
Record.setText("lista de clasificación"); record . addactionlistener(nuevo marco sl _ record _ adaptador de acción(this));
salir . settext(" salir ");
salir . adaptador de acción (este));
help . settext(" ayuda ");
ClearReocrd.setText("borrar registro"); (nuevo marco sl _ clearReocrd _ actionAdapter(this));
landmineTally.setBounds(nuevo rectángulo (5, 5, 40, 25));
landmineTally.setBackground (nuevo color) (0, 0, 0));
landminetally.setForeground(new color(255,0,0));
landminetally set Font(New Java . awt . Font( Fuente "Times New Roman".
Negrita, 20));
landminetally .set border(border factory. createbevelborder(1));
landminetally set editable(false); .setBounds(nuevo rectángulo(520,5,50,25));
timeTally.setBackground(nuevo color(0,0,0));
timeTally.setForeground( nuevo color(255, 0, 0));
cuenta de tiempo. alineación horizontal(4);
cuenta de tiempo establecida Fuente(Nueva Java. awt. Fuente(" Times New Roman. ", fuente. Negrita, 20));
cuenta de tiempo . set border(border factory . createbevelborder(0));
cuenta de tiempo . set editable(false); p>
beginBtn.setBounds(new rectángulo(250, 5, 25, 25));
begin set border(border factory. createbevelborder(0)); >comenzar BTN . addactionlistener(nuevo marco sl _ comenzar BTN _ actionAdatper(this));
comenzar BTN (createImageIcon(" imágenes/risa . jpg ")); paneTime.setBounds(nuevo rectángulo (0, 0, 585, 35));
pane time.set border(border factory. createetchedborder());
paneTime.setLayout (vacío) );
panetime . add(landmineTally);
paneTime.add(time);
add(begin BTN);
panetime .add(begin BTN);
paneTime.add(time); p>
pane.setBounds(nuevo rectángulo (0, 35, 590, 320));
panel establecer diseño (gridlayout 1);
gridlayout 1 . establecer columnas (30);
gridlayout 1. establecer filas (16);
file.add(juego);
file.add(ayuda);
file.add(ayuda);
p>
juego. agregar(inicio);
juego.add(grabar);
juego.add(salir);
ayuda agregar (clearReocrd);
este.getContentPane(). agregar(panel);
this.getContentPane().
add(paneTime);
escucha de acción oyente = nueva acción oyente(){//Hilo personalizado
acción de anulación pública realizada (evento de acción e){
recuento de tiempo;
recuento de tiempo . settext(integer . tostring(recuento de tiempo));
}
};
temporizador = new Timer(1000, listener); //Agrega un hilo y ejecútalo cada 1 segundo;
for(int I = 0; I lt480; I) //Crea una instancia de 480 botones pequeños y agrégalos al panel. panel
{
tarjetas BTN[I] = nuevo JButton();
Tarjetas Btn[i]. setText(" "); //El texto del botón se elimina;
Tarjeta Btn[i]. set border(null); //El borde del botón se elimina
pane . / p>
/* *Método principal*/
Public static void main(String[] args) {
Shaolei frame = new Shaolei();
frame.setSize(580, 410);
Frame.setTitle("Buscaminas");
frame show(); .setresizable (false); //El tamaño del formulario no se puede modificar.
frame . setdefaultcloseoperation(JFrame. EXIT _ ON _ CLOSE); // Una línea recta cuando se hace clic en el botón cerrar.
}
/* *Método definido por el usuario para agregar una imagen a un botón*/
Icono de imagen estática protegida createImageIcon(ruta de cadena){< / p>
Java net .URL imgURL = Clase Shao lei .obtener recurso (ruta);
If (imgURL!= null) {
Devolver nuevo icono de imagen( imgURL);
}En caso contrario {
System.err.println("Archivo no encontrado: " ruta);
Devuelve nulo
}
}
/* *Evento del botón de menú, iniciar el juego*/
inicio de anulación pública _ acción realizada (evento de acción e){ p>
start(); //Inicialización;
Arithmetic(); //Calcular la ubicación de las minas
Calcular(); ;
timer . start(); //Hora de inicio del hilo;
}
/* *Evento del botón de inicio del juego*/
public void comenzar BTN _ clic del mouse (evento de acción e){
inicio _ acción realizada (e); llamar directamente al evento del menú
}
/* *Método definido por el usuario, donde comienza el juego, donde se inicializan las propiedades y el estado del botón */
void start(){
recuento de tiempo; = 0; //El tiempo comienza desde 0;
landminetally. settext(" 99 "); //El número de mineral restante es 99;
for(int I = 0; Ilt480 ; i ){
Pulsador de tarjeta[i]. setIcon(null); //Borrar la imagen en el botón;
map.put(Integer.toString(i), integer.tostring(10)); //El estado de distribución es 10, lo que indica vacío ;
flag _ Ming . put(integer . tostring(I), integer . tostring(10)); //El estado de la bandera es
Card Btn[ i] . eliminar el oyente del mouse(clic en el botón[I]);//Eliminar los eventos del mouse de todos los botones en el campo minado;
}
}
/* * Cálculo Método personalizado para la ubicación de distribución de rayos*/
void arithmetic(){
calendar time = calendar. getinstance() //La clase Calendar obtiene la hora actual;
int leed = time.get(calendario.
Second); //Obtiene los segundos de la hora actual;
Random rand = new Random(LEED); //Usa segundos como semilla del número aleatorio;
int tempRand; // Número aleatorio temporal;
int landmintally = 0; //Obtiene un contador de cuántas minas hay
Boolean flag = false;
int tempNum
while(landmintally lt; 99){ //Solo puede haber 99 minas como máximo;
tempRand =(int)(rand . next float()* 480);/ /Obtener un número aleatorio;
tempNum = integer . parse int(map . get(integer . tostring(tempRand)).toString()
);if (tempNum == 7 )Continue; //Si un número se ejecuta repetidamente;
Landmine[landmintally]= integer.tostring(tempRand);//Coloca la posición obtenida en la cadena;
map . put(integer . tostring(tempRand), integer . tostring(7)); // Coloca la ubicación obtenida en el atlas. p>
landmintally; //El contador aumenta 1;
}
}
/* *Calcula la división de minas, indicando cuántas minas. están alrededor de un botón;*/
void cálculo()
{
int num//Estado del botón;
int suma = 0;//Contador, cuenta cuántas minas hay alrededor;
int izquierdaArriba, Arriba, derechaArriba, izquierda, derecha, izquierdaAbajo, Abajo, derechaAbajo//Se definen 8 posiciones.
for(int I = 0; i lt480; i )
{
izquierda arriba = I-31;
arriba = I-30;
derecha arriba = I-29;
izquierda = I-1;
derecha = I 1;
izquierda abajo = I 29;
abajo = I 30;
derecha abajo = I
Tarjeta Btn[i]. set border(border factory . createbevelborder(0)); //Establece el estilo del borde del botón
clic en el botón[I]= new sl frame _ button _ actionAdatper(this, I); Clase de evento de creación de instancias;
Card Btn[i]. addmouse listening(button click[I]); //Agrega eventos del mouse al botón actual;
num = integer . parse int(map . get(integer . tostring(I)).
toString()); //Obtener el estado del botón actual;
if (num == 7){
Continuar; //Si el estado de este botón es Trueno, saltar al siguiente botón A;
}
If (i == 0) {//La primera mina en la esquina superior izquierda;
num = entero . parse int(map . get(entero . tostring(I)). toString());
if(entero . parse int(map . get(entero . tostring(derecha)).toString( ))== 7)sum ;//Si es un contador de truenos, suma 1;
if(integer . parse int(map . get(integer . tostring(down)).toString()) = = 7)sum ;
if(integer . parse int(map . get(integer . tostring(derecha abajo)).toString())== 7)sum;
map.put(Integer.toString(0), integer. tostring(sum)); //Coloca el número obtenido en la posición actual
sum = 0; >
Continuar; //Botón de un paso siguiente;
}else if (i == 29) {//El primer trueno en la esquina superior derecha;
if( entero . parse int(map . get(entero . tostring( izquierda)). toString())== 7)sum;
if(entero . parse int(map . get(entero . tostring(izquierda) abajo)). toString())== 7)sum ;
if(integer . parse int(map . get(integer . tostring(down)).toString())== 7)sum ;
map.put(Integer. toString(i), integer . tostring(suma));
suma = 0
Continuar;
}else if (i == 450) { //La primera mina en la esquina inferior izquierda;
if(integer . parse int(map . get(integer . tostring(right))) . toString())= = 7)sum ;
if(integer . parse int(map . get(integer . tostring(up)).toString())== 7)sum ;
if(integer . parse int(map . get(integer . tostring(derecha arriba)).
toString())= = 7)suma;
map.put(Integer.toString(i),integer.tostring(suma));
suma = 0;
Continuar;
}else if (i == 479) {//La primera mina en la esquina inferior derecha;
if(integer . parse int(map . get(integer . tostring(left)). toString())== 7)sum;
if(integer . parse int(map . get(integer . tostring(leftUp)). toString()) == 7 )suma ;
if(entero . parse int(map . get(entero . tostring(arriba)).toString())= = 7)suma ;
mapa .put( Integer.toString(i),integer.tostring(suma));
suma = 0;
Return;
} else if(I lt; 29 ){ //Primera línea;
if(integer . parse int(map . get(integer . tostring(left)).toString())= = 7)sum ;
if(integer . parse int(map . get(entero . tostring(izquierda abajo)).toString())== 7)sum ;
if(integer . parse int(map . get (entero. tostring(abajo)). toString())== 7)sum;
if(entero. parse int(map. get(entero. tostring(derecha)). toString())= = 7 )suma ;
if(entero . parse int(map . get(entero . tostring(derecha abajo)).toString())== 7)suma ;
mapa .put (Integer.toString(i),integer.tostring(suma));
suma = 0;
Continuar;
} else if(I gt; 450){ //Última línea;
if(integer . parse int(map . get(integer . tostring(leftUp)). toString())= = 7)sum ;
if(integer . parse int(map . get(integer . tostring(up)).toString())== 7)sum ;
if(integer . parse int(map . get(integer . tostring(derecha arriba)).
toString())= = 7)sum ;
if(integer . parse int(map . get(integer . tostring(left)).toString())== 7)sum ;
if(integer . parse int(map . get(integer . tostring(right)).toString())== 7)sum;
map.put(Integer.toString(i), entero . tostring(suma));
suma = 0
Continuar
}si no ((i30) == 0 ){ //th Una columna;
if(integer . parse int(map . get(integer . tostring(up)). toString())== 7)sum ;
if(integer . parse int(map . get(entero . tostring(derecha arriba)).toString())== 7)sum;
if(entero . parse int(map . get(entero . tostring(derecha) ). toString())= = 7)sum;
if(integer . parse int(map . get(integer . tostring(down)). toString())== 7)sum ;
p> p>
if(integer . parse int(map . get(integer . tostring(derecha abajo)).toString())== 7)sum;
map.put(Integer. toString( i), entero . tostring(suma));
suma = 0;
Continuar
} else if((I 1) 30) = = 0){//La última columna;
if(integer . parse int(map . get(integer . tostring(leftUp)).toString())= = 7)sum ;
if(entero. parse int(mapa. get(entero. tostring(arriba)). toString())= = 7)sum ;
if(integer . parse int(map . get(integer . tostring(left)).toString())== 7)sum ;
if(integer . parse int(map . get(entero . tostring(izquierda abajo)).toString())== 7)sum;
if(integer . parse int(map . get (entero . tostring(abajo)).
toString())= = 7)suma;
map.put(Integer.toString(i),integer.tostring(suma));
suma = 0;
Continuar;
}else{ //Eliminar el resto;
if(integer . parse int(map . get(integer . tostring(leftUp))). toString())= = 7)sum ;
if(integer . parse int(map . get(integer . tostring(up)).toString())== 7)sum ;
if(integer . parse int(map . get(entero . tostring(derecha arriba)).toString())== 7)sum;
if(integer . parse int(map . get (entero . tostring(izquierda)). toString())= = 7)sum;
if(entero . parse int(map . get(entero . tostring(derecha)).toString())= = 7)suma ;
if(entero . parse int(map . get(entero . tostring(izquierda abajo)).toString())= = 7)suma ;
if (entero . parse int(mapa . get(entero . tostring(abajo)). toString())== 7)suma ;
if(entero . parse int(mapa . get(entero . tostring( hacia abajo)). toString())= = 7)sum;
map.put(Integer.toString(i), integer.tostring(sum));
sum = 0;
Continuar
}
}
}
/* *Evento de clic del mouse, parámetros I es la posición del botón en el que se hizo clic*/
botón de anulación pública _ clic del mouse (evento del mouse e, int i){
int mKey = e. /Single Qué tecla se presionó;
int landmineNum = integer . parse int(landminetally . gettext(). toString()); //El número restante de minerales;
int num = integer . parse int(map . get(integer . tostring(I)).toString()); Estado;
int bandera = entero . parse int(bandera _ Ming . get(entero . tostring(I)).
toString()); //El estado de marcado del botón actual;
if((mKey == 3) amp; amp(cardsBtn[i].getBorder()!= null)){ // Haga clic con el mouse Haga clic derecho, el borde no está vacío (vacío significa que ha sido resaltado);
If (flag == 10){ //Si no está marcado, simplemente márquelo;
flag _ Ming. put (entero . tostring(I), entero . tostring(8));
Icono de botón = createImageIcon(" imágenes/8 . jpg "); Botón de tarjeta[i]. setIcon(icono de botón);
landminetally . settext(integer . tostring(landmineNum-1));
If ((landmineNum-1) == 0) //Si está marcado El el mio numero es 99;
completeGame(). //Completa el juego;
}else if (flag == 8){ //Si está marcado, cambia a signo de interrogación;
flag _ Ming put(integer . tostring( I ), entero . tostring(9));
Icono de botón = createImageIcon(" imágenes/9 . jpg "); setIcon(icono del botón);
landminetally . settext(integer . tostring(landmineNum 1));
If ((landmineNum 1) == 0) //Si el número de mina marcado es 99;
juego completo(). //Completa el juego;
}else if (flag == 9){ //Si es un signo de interrogación, no se marcará;
flag _ Ming put. (entero . tostring(I ), entero . tostring(10));
Tarjeta Btn[i]. setIcon(null);
}
}else if (mKey == 1){ //Si se hace clic con el botón izquierdo del mouse;
marcar _ Ming . put (integer . tostring(I), integer . tostring(10)); //Primero borre el estado de marca del botón en el que se hizo clic
If ((landmineNum 1) == 0) //If la mina marcada El número es 99;
completeGame(). //Completa el juego;
If (num == 7){ //Si el estado del botón de amonio es trueno, el juego termina;
Juego excesivo (1);
}else if (num == 0){ //Si Thunder está vacío.
If (flag == 8 ){ //Si se ha marcado como Trueno, el contador aumenta en 1;
landminetally settext(integer . tostring(landmineNum 1)) ;
}
icono del botón = createImageIcon(" imágenes/0 . jpg "); setIcon(icono de botón);
Btn de tarjeta[i]. set border(null);
Display(1); //Abre los botones circundantes;
}else {//El número está entre 1 y 6. Abre el botón y muestra la imagen correspondiente al número;
If (flag == 8){ //Si se ha marcado como Trueno, el contador aumenta en 1;
landminetally . settext(integer . tostring (landmineNum 1));
}
icono de botón = createImageIcon(" imágenes/" num ".jpg");
Pulsador de tarjeta[i]. setIcon(icono de botón);
Btn de tarjeta[i]. set border(null);
}
}
if((tecla del mouse = = 1 amp; ampmKey = = 3)| |(tecla del mouse = = 3 amp; ampMKey == 1) ){ //Haga clic en los botones izquierdo y derecho del mouse al mismo tiempo;
Abrir (1); //Abra los botones circundantes (juzgue primero); p>
}
tecla del mouse = 0;
}
/* *Método definido por el usuario, utilizado para determinar si se iluminan los botones circundantes. */
void open(int i){
int cantidad de minas terrestres = 0; //Número real de minas terrestres;
int cantidad de bandera = 0; /El número de minas terrestres marcadas;
p>
intmine_from left=0,mine_from top=0,mine_from right=0,mine_from left=0,mine_from right=0,
mine_ lower left = 0, mine_lower = 0, mine_lower right = 0 // Define 8 posiciones de la mina real.
int flag_leftUp=0, flag_up=0, flag_rightUp=0, flag_left=0, flag_right=0,
flag_leftDown=0, flag_down=0, flag_right abajo = 0 //; Se definieron 8 ubicaciones de minas marcadas.
//Ocho ubicaciones de minas reales y ocho ubicaciones de minas marcadas. Si no se juzga, la colección hashMap cruzará la línea;
If (i gt31)mineral _ left up = integer .toString(map . get(integer . tostring(I-31)).toString(. ) );
Si (i gt30)mío _ up = entero . parse int(map . get(integer . tostring(I-30)).
toString());
If (i gt29)mineral _ right up = entero . parse int(map . get(integer . tostring(I-29)). toString()
If (i gt1)mineral_left = entero . parse int(map . get(integer . tostring(I-1)).toString());
If (i lt479)mineral_ right = entero . parse int(map . get(integer . tostring(I 1)).toString());
if(ilt450)mineral_left down = integer . parse int(map . get (integer . tostring(I). 29)). toString());
if(ilt449)mine_down = integer . parse int(map . get(integer . tostring(I 30)).toString ());
If (I lt448)mineral _ right down = integer . parse int(map . get(integer . tostring(I 31)).toString();
If(i gt31)flag _ left up = entero . parse int(flag _ Ming . get(integer . tostring(I-31)).toString());
If(i gt30)flag _ up = entero . _ Ming get(integer . tostring(I-30)). toString());
if (i gt29)flag _ right up = integer . I-29)).toString());
If (i gt1)flag_left = integer.parse int(flag_Ming.get(integer .tostring(I-1)). toString());
if (I lt479) flag _ right = integer . parse int(flag _ Ming . get
Es demasiado largo para terminar. Lo comprimiré. El paquete se le enviará por favor llame al 49905518.