Red de conocimiento informático - Aprendizaje de código fuente - El último código fuente del buscaminas

El último código fuente del 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 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

}

}

/* *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ú

}

/* *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.