El último código fuente del 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 he jugado desde que aprendí JAVA. El juego y el programa pueden tener 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<99;i++)</p>
* <p>Copyright: Copyright (c) 2006 </p>
*
* <p>Company:Private</p>
*
* @author cqp
* @versión de demostración
*/
La clase pública Shao Lei extiende JFrame {
/* *Propiedades de clase y creación de instancias de controles*/
Icono del botón ImageIcon //; Imagen del botón;
Mapa HashMap = new HashMap(); // Trueno y estado digital, la clave es la posición (0-479), el valor es el estado, 0-6 es el número, 7 es el trueno;
HashMap flag _ minel = new HashMap(); // La marca marcada en el botón, como signo de interrogación, marca de verificación, cancelar, 8 puntos trueno, 9 puntos signo de interrogación, 10 está vacío por defecto;
JMenuBar file = new JMenuBar(); //Barra de menú;
JMenu game = new JMenu(); //Botón de menú; p>JMenuItem start = new JMenuItem(); //Elemento del menú;
JMenuItem record = new JMenuItem(); //Elemento del menú;
JMenuItem quit = new JMenuItem(); //Elemento de menú;
JMenuItem clearReocrd = new JMenuItem(); //Elemento de menú;
JMenu help = new JMenu(); p>JButton[]cardsBtn = nuevo JButton[480]; //480 botones;
JButton comenzar BTN = nuevo JButton() ; //Botón de inicio;
JPanel panel = nuevo JPanel(); //Panel de campo minado;
JPanel paneTime = new JPanel(); //El panel donde se encuentra el contador;
JOptionPane save record = new JOptionPane(); //Cuadro de diálogo para guardar registro;
JTextField landmineTally = new JTextField(" 99 "); //Contador de mina restante
JTextField time tly = new JTextField(" 0 "); // Contador de tiempo;
GridLayout GridLayout 1 = new GridLayout(); //Diseño de cuadrícula;
Temporizador de tiempo; //Instalación de subprocesos
Cadena[ ]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[]button click = new sl frame _ button _ actionAdatper[480]; // Clase de evento del botón de campo minado;
int mouse key = 0; //Presiona el mouse primero Qué tecla se usa 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( ){
Probar{
p>
JB init();
} catch(Exception){
excepción . printstacktrace();
}
< p. >}/* *Configuración de interfaz*/
El vacío privado jbInit() genera 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( " Times New Roman ", fuente. negrita, 20));
landminetally establece borde(fábrica de bordes. createbevelborder(1));
landminetally establece editable(false);
timeTally.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 (Nueva Java). awt.Font("Times New Roman", fuente.
Negrita, 20));
conteo de tiempo . set border(border factory . createbevelborder(0));
conteo de tiempo editable(false);
< p. >beginBtn.setBounds(new rectángulo(250, 5, 25, 25));begin BTN . set border(border factory . createbevelborder(0));
begin BTN . addactionlistener(new sl frame _ comenzar BTN _ actionAdatper(this));
begin seticon(createImageIcon(" imágenes/risa . jpg "));
paneTime.setBounds ( nuevo rectángulo (0, 0, 585, 35));
tiempo del panel set border(border factory. createetchedborder());
paneTime.setLayout(empty);
paneTime.setLayout(empty);
p>panetime . add(landmineTally);
paneTime.add(time);
panetime . setBounds(nuevo rectángulo (0, 35, 590, 320));
pane .diseño de cuadrícula 1;
diseño de cuadrícula 1 . >
diseño de cuadrícula 1. establecer filas(16);
file.add(juego);
file.add(ayuda);
juego. agregar(inicio);
juego.add(grabar);
juego.add(salir);
ayuda .add(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<480;I++) //Crea una instancia de 480 botones pequeños y agrega al 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);
Devolver nulo p>
}
}
/* *Evento del botón de menú, iniciar el juego*/
inicio de vacío público _ acción realizada (evento de acción e) {
start(); //Inicialización;
Arithmetic(); //Calcular la ubicación de la mina
Calcular(); de la mina Distribución;
timer . start(); //Hora de inicio del hilo
}
/* *Evento del botón de inicio del juego*/
public void start BTN _ clic del mouse (evento de acción e){
inicio _ acción realizada (e); // Llama directamente al evento del menú
} p>
/* *Método definido por el usuario, donde comienza el juego, donde se inicializan las propiedades y el estado del botón */
void start(){
<; p>time count = 0; // El tiempo comienza desde 0;landminetally . settext(" 99 "); // El número restante de minerales es
for(int). I = 0; I & lt480;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(calendar.segundo); //Obtener los segundos de la hora actual;
Random rand = new Random(LEED); //Usar segundos como semilla del número aleatorio;
int tempRand//Número aleatorio temporal;
int landmintally = 0; //Obtiene un contador de cuántas minas hay
Booleano; flag = false; // marca si se debe repetir;
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; )).toString());
if (tempNum == 7) continuar; //Si un número se ejecuta repetidamente
Landmine [landmintally] = integer(tempRand). ); //Pon la posición obtenida en la cadena;
map . put(integer . tostring(tempRand), integer . tostring(7)); //Pon la posición obtenida en el atlas el valor es 7, lo que indica que hay una mina;
landmintally++; // Contador más
}
}
/* * Calcula la división del trueno, indicando que hay cuantas minas;*/
cálculo vacío()
{
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<480;i++)
{
izquierda arriba = I-31;
arriba = I -30;
derecha arriba = I-29;
izquierda = I-1; izquierda abajo = I+29;
abajo = I+30;
derecha abajo = I+31
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 listener(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, salte al siguiente. botón;
p>
}
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 el contador Thunder, agrega 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 Siguiente;
p>}else if (i == 29) {//El primer trueno en la esquina superior derecha;
if(integer) . parse int(map . get(integer . tostring(left))).toString ())= = 7)sum++;
if(integer . parse int(map . get(integer . tostring(left. abajo)).toString())== 7)sum++;
if(integer . parse int(map . get(integer . tostring(abajo)).toString())== 7)sum++;
map.put(Integer.toString(i), entero . tostring(suma));
suma = 0
Continuar;
}else if (i == 450) {//Esquina inferior izquierda Yi Lei;
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)sum++;
map.put(Integer.toString(i),integer.tostring(sum));
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 )sum++;
if(integer . parse int(map . get(integer . tostring(up)).toString())= = 7)sum++;
mapa .put( Integer.toString(i), entero .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(integer . tostring(izquierda abajo)).toString())== 7)sum++;
if(integer . parse int(map . get( entero . tostring(abajo)). toString())== 7)sum++;
if(integer . parse int(map . get(entero . tostring(derecha)).toString()) == 7)sum++;
if(integer . parse int(map . get(integer . tostring(derecha abajo)).toString())== 7)sum++;
map. 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 (entero . tostring(izquierda)).
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; else if ((i%30) == 0 ){ //Primera columna;
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 ( entero . parse int(map . get(entero . tostring(derecha)). toString())== 7)sum++;
if(entero . parse int(map . get(entero . tostring( abajo) )). toString())== 7)sum++;
if(integer . parse int(map . get(integer . tostring(derecha abajo)). toString())== 7)sum++ ;
map.put(Integer.toString(i),integer.tostring(suma));
suma = 0;
Continuar;
} else if((I+1)% 30)== 0){//Última columna;
if(integer . parse int(map . get(integer . tostring(leftUp) ) toString())= = 7)sum++;
if(integer . parse int(map . get(integer . tostring(up)).toString())== 7)sum++;
p>if(entero. parse int(mapa. get(entero. tostring(izquierda)). toString())= = 7)sum++;
if(integer . parse int(map . get(integer . tostring(izquierda abajo)).toString())== 7)sum++;
if(integer . parse int(map . get(integer . tostring(down)).toString())== 7)sum++;
map.put(Integer.toString(i) , entero . tostring(sum));
sum = 0;
Continuar;
}else{ //Eliminar el resto
if(entero. parse int(mapa. get(entero. tostring(izquierdaArriba)).
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 (entero. tostring(izquierda)). toString())== 7)sum++;
if(entero. parse int(map. get(entero. tostring(derecha)).toString())= = 7)sum++;
if(integer . parse int(map . get(integer . tostring(izquierda abajo)).toString())= = 7)sum++;
if (entero . parse int(mapa . get(entero . tostring(abajo)). toString())== 7)sum++;
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 minas; = entero. analizar int(mapa. get(entero. tostring(I)). toString()); //El estado del botón actual;
int flag = integer . parse int(flag _ Ming . get(integer . tostring(I)). toString()); El estado actual de la marca del botón;
if((mKey == 3)& amp; & amp(cardsBtn[i].getBorder()!= null)){ //Haga clic con el botón derecho del mouse, el el borde no está vacío (Vacío significa que ha sido resaltado);
If (flag == 10){ //Si no está marcado, márquelo;
flag _ Ming put(. entero . tostring(I) , entero . tostring(8));
Icono de botón = createImageIcon(" imágenes/8 . jpg ");
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 está marcado El el mio numero es 99;
completeGame(). //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) // Si la marca es El número de mina 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)
landminetally . settext(integer . tostring(landmineNum+1));
p>
}
icono del botón = createImageIcon(" imágenes /0 . jpg ");
Pulsador de tarjeta[i]. 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].
establecer borde(nulo);
}
}
if((tecla del mouse = = 1 & & ampmKey = = 3)| |(tecla del mouse = = 3 & amp; & ampMKey == 1) ){ //Haga clic en los botones izquierdo y derecho del mouse al mismo tiempo
Abrir (1);
}
tecla del mouse = 0;
}
/* *Método definido por el usuario, utilizado para determinar si se ilumina botones circundantes*/
void open(int i){
cantidad de minas terrestres int = 0; //Número real de minas terrestres;
cantidad de bandera int = 0 ; //Cantidad de minas marcadas;
int mine_from left=0, mine_from top=0, mine_from right=0, mine_from left=0, mine_from right=0,
mine_bottom left= 0, mine_bottom=0, mine_bottom right=0; // Define 8 posiciones de minas reales.
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. ( ));
If (i & gt30)mine _ up = integer . 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<479)mineral _ right = parse int(map . get(integer .tostring(I+1)).toString());
if (i<450)mineral_left down = entero .parse int(map .get(integer .tostring(I +29)). toString());
if(i<449)mine_down = integer . parse int(map . get(integer . tostring(I+30)).toString()) ;
if (i<448)mineral_right down = entero. parse int(map. get(integer. tostring(I+31)).
toString());
If (i & gt31)flag _ left up = integer .toString());
If (i & gt30)flag _ up = integer . parse int(flag _ Ming . get(integer . tostring(I-30)).toString());
If (i & gt29)flag _ right up = integer . parse int(flag _ mine . get(integer . tostring(I-29)).toString());
If (i & gt1)flag _ izquierda = entero . parse int(flag _ Ming . get(integer . tostring(I-1)).toString());
if (i<479)flag _right = entero . Ming get
Es demasiado largo para terminar. Te enviaré el paquete comprimido. Por consultas llama al 49905518.