Pregunta

Así que estoy construyendo el juego pacman en Java para enseñarme a mí mismo a programar juegos.

Tengo la ventana del juego básico con el sprite pacman y los sprites fantasma dibujados, el pacman se mueve con las teclas de flecha, no se mueve más allá de las paredes de la ventana, etc. Ahora estoy tratando de construir el laberinto, como en esta imagen:

Pacman maze

Sin darme la solución directa / completa a esto, ¿puede alguien guiarme sobre cómo se puede construir esto? Estoy hablando solo de los límites y las tuberías (marcas 'T') aquí que no puedes atravesar y tienes que dar la vuelta. No son los puntos que el pacman come todavía.

Aquí están mis preguntas:

1) ¿Cuál es el algoritmo / método más eficiente para crear este laberinto? ¿Deberá dibujarse cada vez que se llame al método paint () o hay una forma de dibujarlo solo al inicio del juego y nunca más?

2) ¿Cómo se dibujará esto en la pantalla? Supongo que se utilizará fillRect () ?

3) Cualquier sugerencia sobre la detección de colisiones (para que los pacman / fantasmas no puedan atravesar las paredes) sería útil.

4) Cualquier sugerencia sobre cómo se calculará el espacio vacío entre las tuberías para que los puntos se puedan llenar entre ellas también será muy útil.

Gracias

¿Fue útil?

Solución

No lo haría de esa manera.

Dibujaría el mapa gráfico y luego crearía una matriz de datos 2D que representa el mapa. El mapa de datos sería responsable de determinar las colisiones, comer puntos, dónde están los dulces y dónde están los fantasmas. Una vez que se maneja toda la lógica para todo, simplemente use la matriz 2D para mostrar todo en sus coordenadas de píxeles adecuadas sobre el mapa gráfico.

Por ejemplo, el usuario está presionando la tecla izquierda. Primero, determine que pacman está en el elemento 3, 3. El elemento 3, 2 contiene información que denota un muro para que pueda implementar el código para hacer que ignore el comando.

EDITAR:

Cada elemento representaría alrededor de donde podría estar un punto. Por ejemplo:

No, mirando el tablero, diría que la matriz se vería así.

d,d,d,d,d,d,d,d,d,d,d,d,w,w,d,d,d,d,d,d,d,d,d,d,d,d
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d
p,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,p    
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d    
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d

Y así sucesivamente. Sin embargo, es posible que desee elegir una estructura de datos más flexible que solo caracteres, ya que algunas áreas deben contener mucha información diferente. Es decir, a pesar de que el área de reproducción de fantasmas está en blanco, pacman no está permitido allí. El movimiento de los fantasmas y el pacman es diferente para los escapes laterales, el punto de generación de caramelos es un punto vacío, pero si desea permanecer flexible, querrá indicar dónde se encuentra esto por mapa.

Otra cosa que querrás recordar es que pacman y los fantasmas suelen estar entre puntos, por lo que contienen información que representa un porcentaje del espacio que ocupan entre 1,2 y 1,3; es importante para la detección de colisiones, ya que además de determinar cuándo quieres eliminar puntos, mejoras y dulces del tablero.

Otros consejos

Aquí hay una pista para ti:

texto alternativo http://www.freeimagehosting.net/uploads/66e4131f59.jpg

Esta sugerencia, utilizada correctamente, te permitirá manejar la detección de colisiones y el procesamiento, y también te permitirá representar el laberinto de manera compacta.

  1. Puedes pintar el mapa en un BufferedImage y simplemente dibujar una imagen en cada pintura (). Obtendrá un rendimiento bastante razonable de esta manera.

  2. Si está satisfecho con que las paredes sean sólidas, puede dibujar cada bloque de pared cuadrado con fillRect. Si desea obtener el mismo aspecto que en la imagen, debe averiguar cómo dibujar las líneas de la manera correcta y usar arcos para esquinas.

  3. El mapa del juego de Pacman está hecho de cuadrados y Pacman y los fantasmas siempre se mueven de un cuadrado al cuadrado vecino en un paso animado (es decir, si presionas a la derecha, el pacman se mueve un cuadrado a la derecha). Eso significa que la detección de colisiones es fácil: simplemente no permita movimientos a cuadros que no estén vacíos.

  4. No entiendo lo que intenta preguntar aquí.

1) Solo para dar mi consejo sobre redibujar. Algo que puede hacer si encuentra que volver a dibujar toda la imagen es lenta, es determinar solo los elementos que han cambiado en la pantalla y volver a dibujarlos. Un enfoque para esto sería el siguiente: Determinar los sprites que se han movido. Determine (aproximadamente) un rectángulo alrededor de esos sprites. Redibuje esos rectángulos solamente. De esta manera, solo está actualizando partes de la pantalla y no toda la pantalla. Esto debería dar como resultado un aumento en el rendimiento al volver a dibujar toda la pantalla.

Las otras respuestas han sido razonables para las otras preguntas que ha formulado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top