(Java) 1.1 Desarrollar un juego de Tetris. El jugador mueve y rota los bloques que caen en la ventana. Después de que los bloques se apilen en una fila, se pueden eliminar y se obtendrá la puntuación correspondiente. Si los bloques se apilan hasta la parte superior de la ventana, perderán; . 1.2 En el programa del juego, podemos considerarlo como tres objetos, a saber, el objeto de clase principal del formulario del programa, el objeto de gestión de datos de bloque, el objeto de hilo del temporizador que controla la caída automática del juego y tres objetos de música de fondo. Objeto de clase principal del formulario: Objeto de gestión de datos de bloque: Objeto de hilo de temporizador que controla la caída automática del juego: Tres objetos de música de fondo: 1.3 Herramientas de desarrollo: Sun NetBeans IDE 6.1 NetBeans IDE es una integración gratuita de código abierto proporcionada para desarrolladores de software entorno de desarrollo. Obtendrá todas las herramientas que necesita para crear aplicaciones profesionales de escritorio, empresariales, web y móviles en Java, C/C++ e incluso Ruby. Este IDE se ejecuta en una variedad de plataformas, incluidas Windows, Linux, Mac OS X y Solaris. Es fácil de instalar y muy cómodo de usar; La versión 6.0 incluye mejoras significativas y nuevas características, incluida una infraestructura de editor completamente reescrita, soporte para lenguajes extendidos, nuevas características de productividad y un proceso de instalación simplificado que le permite instalar y configurar el IDE según sus necesidades. 2.1 Los datos del juego están separados de la visualización de la interfaz. Los datos de la estructura del juego se utilizan para describir el estado del juego. Cuando el jugador opera o el juego da un paso por sí solo, el programa se refleja modificando los datos del juego. , cada vez que se da un paso, el programa modificará los datos del juego actual. La determinación de si el juego ha terminado también se basa en el análisis de los datos del juego. La interfaz del juego se dibuja en función de los datos del juego en ese momento. Cuando los datos cambian, los gráficos originales deben borrarse y volverse a dibujar. En resumen, el diseño lógico del juego se centra en los datos del juego, no en la interfaz del juego. La interfaz solo muestra indirectamente los resultados al jugador. Por lo tanto, al diseñar funciones, se pueden dividir aproximadamente en dos categorías: funciones de procesamiento de datos relacionadas con eventos de operación del jugador y funciones de dibujo de gráficos relacionadas con efectos de interfaz. El diagrama de flujo principal del proceso de ejecución del juego controlado por los eventos del teclado monitoreados por el formulario es el siguiente: Control y método para crear una nueva tecla de dirección de bloque IsCanChangeTo() Música de fondo del juego de clase Anthem Comenzó cuando se inicia el juego Clase RussionGame clearblock() makeblock() moveright() movedown() moveleft() turnleft() turnright() El sonido de las teclas de clase de Anthem2 responde cuando se activa el método de tecla de dirección formKeyPressed() inicia otra música después de que termina el juego Defina una clase de hilo para presionar automáticamente la velocidad del juego en el fondo, mueve el bloque. CheckAndCutLine() IsOver() La clase Anthem3 comprueba si una determinada línea está completamente llena. Si es así, la cancela y devuelve 1. IsHitBottom() determina si el bloque actual ha tocado fondo y procesa el objeto de gestión de datos del juego TimerRuner: gestiona principalmente dos. Aspectos de los datos: bloques de datos de coordenadas y datos del espacio de juego. Utilice variables de matriz de miembros para describir el estado del espacio del juego y determine si el juego ha terminado en función del estado del espacio del juego. Utilice sus variables miembro para guardar los datos de forma y los datos de coordenadas del bloque, y defina el método de procesamiento para el cambio de datos del bloque cuando el bloque se mueve. Además, también se utilizan varios datos de atributos del juego como variables miembro. El objeto de hilo del temporizador que controla la caída automática del juego: es un objeto derivado similar a un hilo que se ejecuta de forma independiente y controla la caída del bloque de vez en cuando. Objeto de clase principal de la interfaz del formulario: Responsable de dibujar imágenes del juego, varios controles, incluidas las configuraciones del juego (como: cuadros de texto para configurar la velocidad, etiquetas para mostrar puntuaciones, botones de inicio y pausa) y responsable de leer varios datos de atributos del juego y mostrar salida. Lo más importante es: también es una clase de procesamiento de eventos de teclado que monitorea las operaciones del teclado del jugador, procesa eventos de teclado y llama al método del objeto de administración de datos del juego en la función de procesamiento de eventos de teclado para controlar la ejecución. juego.
También utilizamos el objeto de gestión de datos del juego y el objeto de hilo del temporizador que controla la caída automática del juego como sus variables miembro. Agregue los controles requeridos (2 Jlables, 2 JcomboBoxes, 4 Jbottuns) al panel, organice sus posiciones y cambie el nombre de las variables del objeto de control, como se muestra arriba: 2.3 1. Primero, para el análisis estructural del bloque, puede Representado por una matriz tridimensional, el bloque tiene cuatro formas básicas. Se pueden obtener otras formas girando estas cuatro formas básicas, como se muestra a continuación: class RussionBlockGame { final int sp_WIDTH = 20 // final int sp_HIGHT = 20; tipos de caja[4][4][2]={ {{-1,0},{0,0},{1,0},{2,0}}, {{-1,0},{ 0, 0},{1,0},{1,-1}}, {{-1,0},{0,0},{1,0},{0,-1}}, {{- 1, 0},{0,0},{1,0},{-1,-1}} };/* */ int box[4][2] /* */ int cx, cy / * * / int tipo; /* (0,1,2,3)*/ int block_box[][]=new int[4][2]; /* */ int block_cx, block_cy; * ( 0,1,2,3)*/ int gamespace[][] = new int[sp_HIGHT][sp_WIDTH] ; void makeblock()// { block_type = (int)(Math.random()*100 )% 4;// Genera un número aleatorio del 1 al 4 for(int i=0; i<4;i++) block_box[i] = tipos[block_type][i]; block_cx=sp_WIDTH/2; block_cy=0; WIDTH (cx,cy)= (11,4) (WIDTH-1,HIGHT-1) Se puede considerar que el espacio del juego consta de sp_WIDTH × sp_HIGHT pequeñas cuadrículas cuadradas, cada cuadrícula tiene una coordenada relativa a la esquina superior izquierda. El espacio del juego se puede representar mediante una matriz bidimensional de sp_WIDTH × sp_HIGHT. De la siguiente manera: int gamespace[sp_WIDTH][sp_HIGHT]; el valor del elemento de matriz correspondiente a una determinada cuadrícula es 1, lo que significa que la cuadrícula se ha llenado con cuadrados y 0 significa que no se ha llenado. En el espacio del juego, las cuadrículas llenas de bloques son de color gris oscuro y las cuadrículas vacías son blancas (color de fondo). Cuando las cuadrículas grises tocan la parte superior del espacio, el juego termina. Es decir, cuando el valor de un elemento en gamespace[0] (la primera fila de la matriz bidimensional) es 1, el juego termina. El siguiente es el programa para determinar si el juego ha terminado: boolean IsGameOver() { boolean flag=false for(int i=0; i=sp_WIDTH || y>=sp_HIGHT|| (y>0 && gamespace[y] [x]= =1)) { IsCan = false; break;} } return IsCan } 4. Determinar si el bloque ha caído al fondo es determinar si la posición directamente debajo de cada pequeño cuadrado en el bloque se ha llenado. o fuera del límite inferior.
Si ha llegado al final, llene la posición (cuadrícula) donde está el bloque (correspondiente al espacio de juego 1). También verifique si una determinada fila se ha llenado por completo, elimine las filas completamente llenas y otorgue puntos al usuario. es el siguiente: boolean IsHitBottom( ) / { boolean flag =false ; int i, x, y; for (i=0; i<4; i++) { x= block_cx + block_box[i][0]; + block_box[i ][1] + 1 ; if ( y>=sp_HIGHT|| gamespace[y][x]==1) { flag = true } } if( flag ) { for (i=0; i<4; i++) { x= block_cx + block_box[i][0] ; y= block_cy + block_box[i][1] ; } for (i =0; i<4; i++) { y= block_cy + block_box[i][1] ; while(y>=0 && CheckAndCutLine(y)) m_score += } isplaying = ! ; } return flag ; } La música se ha reproducido en un bucle w1.audioClips.loop(); Anthem2 w2 = new Anthem(); Cuando se activa el evento clave, el método formKeyPressed se ejecutará automáticamente cada vez. momento en que el sistema obtiene el código clave de una determinada clave w2.audioClips2.play(); Anthem2 w3 = new Anthem(); Cuando se activa el método game.IsOver, demuestra que el juego ha finalizado. En este momento, el programa llamará a w1.audioClips.stop(); La música de fondo desaparece y comienza la música final.
6. En la vista de diseño del formulario del juego, seleccione el botón "Iniciar juego", luego haga clic derecho en el botón "Iniciar juego", seleccione "Eventos" -> tipo de evento "Acción" -> método de interfaz "acción realizada" del menú, y serás redirigido a En el código de procesamiento de eventos en la vista fuente, agrega nuestro código de procesamiento para iniciar el juego, de la siguiente manera: private void jButton_startActionPerformed(java.awt.event.ActionEvent evt) { game.isplaying=true; this.requestFocusInWindow(); new TimerRuner(this } Utilice el mismo método para escribir el código de procesamiento de eventos de clic para "pausar el juego", "finalizar el juego" y "salir del juego". El código es el siguiente: private void jButton_stopActionPerformed( java.awt.event.ActionEvent evt) { game.isplaying=false System .exit(0); 2.4 Funciones: Tiene una función de nivel y la dificultad del juego es diferente en diferentes niveles. y puedes obtener puntos eliminando filas; Tiene sonidos, sonidos de fondo y aparecen diferentes sonidos cuando realizas diferentes operaciones. Tiene La función de configuración se puede usar para establecer el nivel inicial, el número de líneas iniciales, configuraciones clave, etc. 3. /número2 Bloquear hacia abajo/número4: Bloquear hacia abajo/número3: Bloquear hacia la derecha AvPág Girar el bloque hacia la derecha Fin Pasar el bloque hacia la izquierda Iniciar el juego Iniciar el juego cambiar música de fondo Detener Pausar el juego Detener el juego Velocidad: Ajustar la velocidad: Seleccionar el bloque El color de fondo (el valor predeterminado es azul claro). La mayoría de los resultados de ejecución del programa son los esperados, pero la respuesta al cambiar el color de fondo a veces es demasiado lenta y debe presionar la tecla de inicio nuevamente cada vez que enciende la música. Es uno de los defectos del juego. En vista de esto, se han realizado algunas correcciones. Aunque aún no ha hecho que el juego sea más fácil de usar, básicamente puede satisfacer las necesidades del juego en muchos aspectos.