Red de conocimientos turísticos - Conocimientos sobre calendario chino - Villanos de la programación de códigos

Villanos de la programación de códigos

Uso de VC ++ para escribir un juego buscaminas

Este artículo analiza las características funcionales del juego buscaminas de Windows, utiliza el lenguaje de programación visual orientado a objetos visual c++, proporciona los métodos de implementación específicos de cada módulo funcional y proporciona métodos. para escribir programas de juegos pequeños y algunos consejos para usar Visual C++.

Primero se analizan las funciones más básicas del buscaminas.

Haz clic con el botón izquierdo del ratón en un área desconocida. Si hay minas en un área desconocida, el juego se detendrá y se mostrarán todas las minas. Si no hay truenos, se mostrará la cantidad de truenos circundantes. Si no hay truenos, verifique si hay truenos en ocho áreas circundantes hasta que haya truenos y se mostrará. En realidad, este es un proceso recursivo.

Haga clic con el botón derecho del mouse en un área desconocida y se configurará en Thunder independientemente de si es Thunder real o no. Puede elegir niveles primarios, intermedios o avanzados, y puede personalizar la cantidad de minas y el tamaño del área.

La esquina superior izquierda del campo minado muestra el número total de minas menos el número de campos minados marcados.

Se muestra un botón en el medio de la parte superior del campo minado para abrir y mostrar los resultados de las acciones del mouse.

El tiempo de limpieza de minas se muestra en la parte superior derecha del campo minado.

Después de eliminar todos los truenos, aparecerá un cuadro de diálogo para registrar tu nombre en la tabla de clasificación. Ordenar por tiempo.

Para completar las funciones anteriores, los detalles técnicos específicos de la aplicación de Visual C++ son los siguientes:

1. Utilice appwizard para crear una aplicación cbombapp basada en SDI, elimine el soporte para impresión y barra de estado, y Modificar el menú y las teclas de aceleración correspondientes en el editor de recursos para que sean consistentes con el juego Buscaminas de Windows. Específicamente, son inicio (id-game-begin), junior (id-game-junior), intermedio (id-game-middle), senior (id-game-senior), personalizado (id-game-custom), Color (id-game-color) y lista de héroes (id-game).

2.13 Los atributos correspondientes de cada área pequeña en el campo minado en el editor de recursos. Utilice un pincel u otras herramientas de dibujo para dibujar los mapas de bits de 13 10 16 colores correspondientes, tres mapas de bits de 16 colores de 20 por 20 correspondientes a la expresión del villano y un conjunto de mapas de bits monocromáticos correspondientes a los primeros 16 al cambiar de color. tiempo y número de trueno.

El cuadro de diálogo personalizado del cliente contiene tres controles de texto estático y tres controles de edición. Los tres controles de edición corresponden a los miembros M_I Rownum, M_iColumnum y M_Ibombnum respectivamente. Este cuadro de diálogo se utiliza para personalizar el número de truenos, filas y columnas, y su clase mfc correspondiente es ccustomer. El cuadro de diálogo de clasificación personalizada contiene 9 controles de texto estático, 6 de los cuales muestran el nombre y la hora de la lista de clasificación. La clase mfc correspondiente es csort. Cuadro de diálogo de entrada personalizado que contiene un control de texto estático y un control de edición. El control de edición se utiliza para ingresar el nombre cuando el juego finaliza con éxito y su clase mfc correspondiente es Qinput.

3. Definir bombas y resumir los atributos relevantes de cada mina.

Bomba de clase

{

Público:

int isbomb//Decide primero si es una mina o no.

Bull Iser; // Determina si la zona ha sido tratada y si hay minas a su alrededor.

bool isdone//Determina si la recursividad ha sido procesada.

int num//Número de minas circundantes

bool findbomb//Cuando los desminadores piensen que son minas, serán minas (pero no necesariamente minas).

} ;

4. Sobrecargue la ventana precreate en cmainframe y establezca los atributos correspondientes para fijar el tamaño del formulario, fijando así el tamaño inicial del área de visualización y trueno a 10 veces 10. área de control por encima del área. Parte del código es el siguiente.

cs .estilo = ws _ superpuesto | ws _ sysmenu | ws _ borde | ws _ minimizar cuadro

cs . p>cs . CX = 10 * 15+60; //6 y 60 son valores adicionales horizontales y verticales respectivamente, utilizados para bordes, menús, barras de título y áreas de control.

5. El trabajo principal del juego es presentar gráficos o animaciones cambiantes y mostrarlos de forma interactiva según la entrada del usuario. La función de Windows en el marco de ventanas de documentos de Windows es aceptar la entrada del usuario y ser responsable de la visualización, por lo que la clase cview completa la mayor parte del trabajo de remoción de minas. Defina las siguientes variables miembro en cbombview para registrar los resultados de operaciones relacionadas o el estado del objeto.

Bomb m_bomb[30][30]; //Área máxima de extracción

cstring m_currenttime//Se utiliza para registrar y mostrar el tiempo de remoción de minas.

ctime m_begintime//Registra la hora en que comienza el juego.

bool m _ timerbegin//¿Está encendido el temporizador?

int m _ ibomnum//El número de minas

int m _ irow//El número de filas de truenos

int m _ icolumn//El filas de truenos Número

int m _ ibombfound//Indica el número de minas consideradas.

cbitmapbutton m _ bitbutton//Botón de mapa de bits en el área de control

int m _ currentlevel//Indica el nivel del juego actual.

bool m_biscolor//Indica si el color actual es color o monocromático.

cbit map m _ BM bomb[12] //Se utiliza para almacenar 12 mapas de bits pequeños.

int m_igameover//Establece 0 antes de que termine el juego. Todas las minas han sido eliminadas. Se establece en 2 cuando muere.

Vuelva a cargar la función oncreate en cbombview para crear un botón de mapa de bits. Los dos mapas de bits de este botón de mapa de bits corresponden a los estados correctos normal y buscaminas respectivamente. Cuando desee mostrar el estado eliminado, debe destruir dinámicamente el botón, volver a crear un mapa de bits correspondiente a los estados normal y eliminado y establecer el número de identificación de este botón de mapa de bits en id_game_begin, de modo que cuando se haga clic en el botón, se puede reiniciar el juego. Parte del código es el siguiente.

crect rcclient

getclientrect(& cliente RC

crect rect(rcclient.cx/2-8, 10, rcclient.cx/2 +8); , 20);

m_button.create("new ", bs_defpushbutton | ws_visible |

bs_ownerdraw, rect, this, id_game_begin);

m_button . cargar mapas de bits (IDB _ cara 1, IDB _ cara 2);

La función de mostrar el tiempo es relativamente simple. Al responder al primer mensaje wm_lbuttomdown, inicie el cronómetro y registre la hora de inicio del juego. Obtenga la hora actual en la función de respuesta ontimer del mensaje wm_time, reste la hora cuando comienza el juego y muestre la diferencia horaria obtenida en el área del cliente que muestra la hora (usando un mapa de bits digital). Cuando termine el juego (trueno o muerte), apague el cronómetro y deje de mostrar.

La función de respuesta de mensajes wm_lbuttomdown onlbuttomdown es el ejecutor principal para procesar la entrada del usuario.

Esta función primero determina si la posición en el punto es trueno. Si es así, cierra el temporizador, destruye el botón de mapa de bits original, crea un nuevo botón de mapa de bits correspondiente al estado normal y al estado de ráfaga, y llama a setstate para configurarlo en pushdown. (el estado de llanto del villano) y configure m_bgameover, configúrelo en verdadero para marcar el final del juego; de lo contrario, primero llame a setstate para configurar el botón de mapa de bits en pushdown, y configure el botón de mapa de bits en estado normal en onlbuttomup, y luego llame al calcula la función para registrar el número de minas circundantes y finalmente llama a invalidar para invalidar el área del cliente y forzar a la función ondraw a volver a dibujar el área del cliente. Al llamar a Invalidar, no vuelva a dibujar el fondo para evitar parpadeos, a fin de completar la acción de respuesta de presionar el botón izquierdo en el campo minado.

La función de respuesta de mensaje wm_rbuttomdown onlbuttomdown establece m_ibombnum.findbomb, que se considera que tiene una ubicación de mina, para reducir la cantidad de minas en la esquina superior izquierda, y luego determina si todas las minas han sido eliminadas. Si es así, el juego finaliza y aparece un cuadro de diálogo de entrada que permite al buscaminas ingresar un nombre y escribirlo en el registro en respuesta al código de notificación idok. Si no se drenaron todas las minas, el área del cliente no será válida, lo que obligará a la función ondraw a volver a dibujar el área del cliente y presionar el botón derecho en el campo minado.

Cada vez que hagas clic en el botón izquierdo o derecho, se llamará la función ondraw al campo minado pesado y al área de control. Debido a la complejidad de la situación del clic y la diversidad de atributos míos, la función ondraw debe diseñarse cuidadosamente.

La función calcular calcula el número de minas alrededor de una determinada mina. Según el análisis anterior, calcular el número de minas alrededor de una determinada mina es un proceso recursivo. Preste atención a las condiciones límite de recursividad al compilar. Si no le presta atención, caerá en una recursión infinita y agotará los recursos del sistema.

6. La respuesta a los comandos del menú es otra forma importante de interacción en el juego. Las siguientes nueve funciones de respuesta de comando corresponden a nueve elementos de menú respectivamente, que se utilizan para completar los comandos de actualización y configuración del usuario.

Ongamebegin completa el trabajo de limpiar el tiempo inicial, colocar minas aleatoriamente, cargar 12 mapas de bits pequeños según las instrucciones de color y llamar a ondraw para volver a dibujar el campo minado. La minería aleatoria consiste en llamar a rand() varias veces para determinar el valor de m_bomb[i][j]. Está encuadrado según su valor de retorno.

Ongamecustom primero muestra el cuadro de diálogo ccustomer. Cuando el usuario ingresa la configuración y responde al código de notificación idok, asigne la cantidad de minas ingresadas por el usuario, la cantidad de filas y la cantidad de columnas a los miembros de datos m_ibombnum, m_irow y m_icolumn de cview respectivamente, obtenga el puntero de la ventana del marco y utilícelo para llamar a movewindow para ajustar la ventana al tamaño requerido, destruya el botón de mapa de bits en su posición original y reste 8 del ancho de la nueva ventana a la mitad de la coordenada del eje X. Finalmente, llama a ongamebegin para reiniciar el juego.

Las tres funciones ongamejunior, ongamemiddle y ongamesenior son similares a ongamecustom, excepto que a los miembros de datos m_ibombnum, m_arrow y m_icolumn asignados a cview se les asignan valores fijos y el programador puede determinar sus tamaños. El autor los define como primarios (20, 8, 8) e intermedios (40, 65438+).

La función ongamecolor destruye el botón de mapa de bits original y crea un nuevo mapa de bits de acuerdo con la bandera m_iscolor del mapa de bits recargado. Botón de imagen, invierte el logotipo de carga de 12 mapas de bits monocromáticos, llama a ongamebegin para reiniciar el juego.

La función ongamesort lee la clasificación del registro según el nivel actual del juego y muestra el cuadro de diálogo de clasificación. Para mostrar los resultados, hasta ahora, el juego de buscaminas que he escrito se ha completado básicamente. Después de compilar unos cientos de líneas de código, encontrar errores menores y finalmente reconstruirlo, aparecerá un hermoso juego de buscaminas frente a ti. peor que Microsoft y puedes dibujar pequeños mapas de bits de varias maneras. Por supuesto, debes reconocerlo tú mismo.

>