Red de conocimiento informático - Aprendizaje de código fuente - Código fuente de entretenimiento del juego Buscaminas

Código fuente de entretenimiento del juego Buscaminas

importar java.awt.*;

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 ;

*

* 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);

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){

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.