Compare commits

...

3 Commits

Author SHA1 Message Date
296ef1e709 canvi de pc 2025-07-21 12:03:26 +02:00
dbab3de3df acabat amb balloon_formations.txt 2025-07-21 00:56:17 +02:00
2e606bf160 treballant en el format del fitxer balloons_formations.txt 2025-07-21 00:30:19 +02:00
4 changed files with 260 additions and 256 deletions

View File

@@ -1,277 +1,277 @@
# Archivo de configuración de formaciones de globos
# Formato por línea: x, y, vel_x, tipo, tamaño, tiempo_creacion
# Formato por línea: x, desp, y, vel_x, tipo, tamaño, retraso_tiempo_creacion
# Variables disponibles:
# X1_0, X1_50, X1_100, X2_0, X2_100, X3_0, X3_100, X4_0, X4_100
# QUARTER1_X4, QUARTER3_X4, Y_BASE
# QUARTER1_X4, QUARTER3_X4, DEFAULT_POS_Y
# BALLOON_SIZE_0, BALLOON_SIZE_1, BALLOON_SIZE_2, BALLOON_SIZE_3
# VEL_POSITIVE, VEL_NEGATIVE
# RIGHT, LEFT
formation: 0
# Dos enemigos BALLOON4 uno a cada extremo
X4_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE4, 300
X4_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE4, 300
X4_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 0
X4_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 0
formation: 1
# Dos enemigos BALLOON4 uno a cada cuarto. Ambos van hacia el centro
QUARTER1_X4, Y_BASE, VEL_POSITIVE, BALLOON, SIZE4, 300
QUARTER3_X4, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE4, 300
QUARTER1_X4, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 0
QUARTER3_X4, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 0
formation: 2
# Cuatro enemigos BALLOON2 uno detrás del otro. A la izquierda y hacia el centro
X2_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 300
X2_0 + BALLOON_SIZE_1 + 1, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 290
X2_0 + BALLOON_SIZE_1 * 2 + 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 280
X2_0 + BALLOON_SIZE_1 * 3 + 3, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 270
X2_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 30
X2_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 20
X2_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 10
X2_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 0
formation: 3
# Cuatro enemigos BALLOON2 uno detrás del otro. A la derecha y hacia el centro
X2_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 300
X2_100 - BALLOON_SIZE_1 - 1, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 290
X2_100 - BALLOON_SIZE_1 * 2 - 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 280
X2_100 - BALLOON_SIZE_1 * 3 - 3, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 270
X2_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 30
X2_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 20
X2_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 10
X2_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 0
formation: 4
# Tres enemigos BALLOON3. 0, 25, 50. Hacia la derecha
X3_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 300
X3_0 + BALLOON_SIZE_2 * 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 290
X3_0 + BALLOON_SIZE_2 * 4, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 280
X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20
X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10
X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0
formation: 5
# Tres enemigos BALLOON3. 50, 75, 100. Hacia la izquierda
X3_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 300
X3_100 - BALLOON_SIZE_2 * 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 290
X3_100 - BALLOON_SIZE_2 * 4, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 280
X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20
X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10
X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0
formation: 6
# Tres enemigos BALLOON3. 0, 0, 0. Hacia la derecha
X3_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 300
X3_0 + BALLOON_SIZE_2 + 1, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 290
X3_0 + BALLOON_SIZE_2 * 2 + 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 280
X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20
X3_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10
X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0
formation: 7
# Tres enemigos BALLOON3. 100, 100, 100. Hacia la izquierda
X3_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 300
X3_100 - BALLOON_SIZE_2 - 1, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 290
X3_100 - BALLOON_SIZE_2 * 2 - 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 280
X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20
X3_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10
X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0
formation: 8
# Seis enemigos BALLOON1. 0, 0, 0, 0, 0, 0. Hacia la derecha
X1_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 300
X1_0 + BALLOON_SIZE_0 + 1, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 290
X1_0 + BALLOON_SIZE_0 * 2 + 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 280
X1_0 + BALLOON_SIZE_0 * 3 + 3, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 270
X1_0 + BALLOON_SIZE_0 * 4 + 4, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 260
X1_0 + BALLOON_SIZE_0 * 5 + 5, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 250
X1_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 50
X1_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 40
X1_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 30
X1_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 20
X1_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 10
X1_0, 5, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 0
formation: 9
# Seis enemigos BALLOON1. 100, 100, 100, 100, 100, 100. Hacia la izquierda
X1_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 300
X1_100 - BALLOON_SIZE_0 - 1, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 290
X1_100 - BALLOON_SIZE_0 * 2 - 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 280
X1_100 - BALLOON_SIZE_0 * 3 - 3, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 270
X1_100 - BALLOON_SIZE_0 * 4 - 4, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 260
X1_100 - BALLOON_SIZE_0 * 5 - 5, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 250
X1_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 50
X1_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 40
X1_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 30
X1_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 20
X1_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 10
X1_100, -5, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 0
formation: 10
# Tres enemigos BALLOON4 seguidos desde la izquierda. Hacia la derecha
X4_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE4, 300
X4_0 + BALLOON_SIZE_3 + 1, Y_BASE, VEL_POSITIVE, BALLOON, SIZE4, 285
X4_0 + BALLOON_SIZE_3 * 2 + 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE4, 270
X4_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 30
X4_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 15
X4_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 0
formation: 11
# Tres enemigos BALLOON4 seguidos desde la derecha. Hacia la izquierda
X4_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE4, 300
X4_100 - BALLOON_SIZE_3 - 1, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE4, 285
X4_100 - BALLOON_SIZE_3 * 2 - 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE4, 270
X4_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 30
X4_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 15
X4_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 0
formation: 12
# Seis enemigos BALLOON2 uno detrás del otro. A la izquierda y hacia el centro
X2_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 300
X2_0 + BALLOON_SIZE_1 + 1, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 290
X2_0 + BALLOON_SIZE_1 * 2 + 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 280
X2_0 + BALLOON_SIZE_1 * 3 + 3, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 270
X2_0 + BALLOON_SIZE_1 * 4 + 4, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 260
X2_0 + BALLOON_SIZE_1 * 5 + 5, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 250
X2_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 50
X2_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 40
X2_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 30
X2_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 20
X2_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 10
X2_0, 5, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 0
formation: 13
# Seis enemigos BALLOON2 uno detrás del otro. A la derecha y hacia el centro
X2_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 300
X2_100 - BALLOON_SIZE_1 - 1, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 290
X2_100 - BALLOON_SIZE_1 * 2 - 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 280
X2_100 - BALLOON_SIZE_1 * 3 - 3, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 270
X2_100 - BALLOON_SIZE_1 * 4 - 4, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 260
X2_100 - BALLOON_SIZE_1 * 5 - 5, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 250
X2_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 50
X2_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 40
X2_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 30
X2_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 20
X2_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 10
X2_100, -5, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 0
formation: 14
# Cinco enemigos BALLOON3. Hacia la derecha. Separados
X3_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 300
X3_0 + BALLOON_SIZE_2 * 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 290
X3_0 + BALLOON_SIZE_2 * 4, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 280
X3_0 + BALLOON_SIZE_2 * 6, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 270
X3_0 + BALLOON_SIZE_2 * 8, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 260
X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 40
X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 30
X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20
X3_0, 6, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10
X3_0, 8, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0
formation: 15
# Cinco enemigos BALLOON3. Hacia la izquierda. Separados
X3_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 300
X3_100 - BALLOON_SIZE_2 * 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 290
X3_100 - BALLOON_SIZE_2 * 4, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 280
X3_100 - BALLOON_SIZE_2 * 6, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 270
X3_100 - BALLOON_SIZE_2 * 8, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 260
X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 40
X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 30
X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20
X3_100, -6, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10
X3_100, -8, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0
formation: 16
# Cinco enemigos BALLOON3. Hacia la derecha. Juntos
X3_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 300
X3_0 + BALLOON_SIZE_2 + 1, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 290
X3_0 + BALLOON_SIZE_2 * 2 + 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 280
X3_0 + BALLOON_SIZE_2 * 3 + 3, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 270
X3_0 + BALLOON_SIZE_2 * 4 + 4, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 260
X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 40
X3_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 30
X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20
X3_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10
X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0
formation: 17
# Cinco enemigos BALLOON3. Hacia la izquierda. Juntos
X3_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 300
X3_100 - BALLOON_SIZE_2 - 1, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 290
X3_100 - BALLOON_SIZE_2 * 2 - 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 280
X3_100 - BALLOON_SIZE_2 * 3 - 3, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 270
X3_100 - BALLOON_SIZE_2 * 4 - 4, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 260
X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 40
X3_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 30
X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20
X3_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10
X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0
formation: 18
# Doce enemigos BALLOON1. Hacia la derecha. Juntos
X1_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 300
X1_0 + BALLOON_SIZE_0 + 1, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 290
X1_0 + BALLOON_SIZE_0 * 2 + 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 280
X1_0 + BALLOON_SIZE_0 * 3 + 3, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 270
X1_0 + BALLOON_SIZE_0 * 4 + 4, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 260
X1_0 + BALLOON_SIZE_0 * 5 + 5, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 250
X1_0 + BALLOON_SIZE_0 * 6 + 6, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 240
X1_0 + BALLOON_SIZE_0 * 7 + 7, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 230
X1_0 + BALLOON_SIZE_0 * 8 + 8, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 220
X1_0 + BALLOON_SIZE_0 * 9 + 9, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 210
X1_0 + BALLOON_SIZE_0 * 10 + 10, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 200
X1_0 + BALLOON_SIZE_0 * 11 + 11, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 190
X1_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 110
X1_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 100
X1_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 90
X1_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 80
X1_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 70
X1_0, 5, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 60
X1_0, 6, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 50
X1_0, 7, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 40
X1_0, 8, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 30
X1_0, 9, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 20
X1_0, 10, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 10
X1_0, 11, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 0
formation: 19
# Doce enemigos BALLOON1. Hacia la izquierda. Juntos
X1_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 300
X1_100 - BALLOON_SIZE_0 - 1, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 290
X1_100 - BALLOON_SIZE_0 * 2 - 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 280
X1_100 - BALLOON_SIZE_0 * 3 - 3, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 270
X1_100 - BALLOON_SIZE_0 * 4 - 4, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 260
X1_100 - BALLOON_SIZE_0 * 5 - 5, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 250
X1_100 - BALLOON_SIZE_0 * 6 - 6, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 240
X1_100 - BALLOON_SIZE_0 * 7 - 7, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 230
X1_100 - BALLOON_SIZE_0 * 8 - 8, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 220
X1_100 - BALLOON_SIZE_0 * 9 - 9, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 210
X1_100 - BALLOON_SIZE_0 * 10 - 10, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 200
X1_100 - BALLOON_SIZE_0 * 11 - 11, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 190
X1_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 110
X1_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 100
X1_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 90
X1_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 80
X1_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 70
X1_100, -5, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 60
X1_100, -6, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 50
X1_100, -7, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 40
X1_100, -8, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 30
X1_100, -9, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 20
X1_100, -10, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 10
X1_100, -11, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 0
formation: 20
# Cuatro enemigos BALLOON4 seguidos desde la izquierda/derecha. Simétricos
X4_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE4, 300
X4_0 + BALLOON_SIZE_3 + 1, Y_BASE, VEL_POSITIVE, BALLOON, SIZE4, 300
X4_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE4, 300
X4_100 - BALLOON_SIZE_3 - 1, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE4, 300
X4_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 0
X4_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 0
X4_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 0
X4_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 0
formation: 21
# Diez enemigos BALLOON2 uno detrás del otro. Izquierda/derecha. Simétricos
X2_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 300
X2_0 + BALLOON_SIZE_1 + 1, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 297
X2_0 + BALLOON_SIZE_1 * 2 + 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 294
X2_0 + BALLOON_SIZE_1 * 3 + 3, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 291
X2_0 + BALLOON_SIZE_1 * 4 + 4, Y_BASE, VEL_POSITIVE, BALLOON, SIZE2, 288
X2_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 300
X2_100 - BALLOON_SIZE_1 - 1, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 297
X2_100 - BALLOON_SIZE_1 * 2 - 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 294
X2_100 - BALLOON_SIZE_1 * 3 - 3, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 291
X2_100 - BALLOON_SIZE_1 * 4 - 4, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE2, 288
X2_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 12
X2_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 9
X2_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 6
X2_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 3
X2_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 0
X2_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 12
X2_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 9
X2_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 6
X2_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 3
X2_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 0
formation: 22
# Diez enemigos BALLOON3. Hacia la derecha/izquierda. Separados. Simétricos
X3_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 300
X3_0 + BALLOON_SIZE_2 * 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 290
X3_0 + BALLOON_SIZE_2 * 4, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 280
X3_0 + BALLOON_SIZE_2 * 6, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 270
X3_0 + BALLOON_SIZE_2 * 8, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 260
X3_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 300
X3_100 - BALLOON_SIZE_2 * 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 290
X3_100 - BALLOON_SIZE_2 * 4, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 280
X3_100 - BALLOON_SIZE_2 * 6, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 270
X3_100 - BALLOON_SIZE_2 * 8, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 260
X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 40
X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 30
X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20
X3_0, 6, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10
X3_0, 8, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0
X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 40
X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 30
X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20
X3_100, -6, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10
X3_100, -8, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0
formation: 23
# Diez enemigos BALLOON3. Hacia la derecha. Juntos. Simétricos
X3_0, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 300
X3_0 + BALLOON_SIZE_2 + 1, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 290
X3_0 + BALLOON_SIZE_2 * 2 + 2, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 280
X3_0 + BALLOON_SIZE_2 * 3 + 3, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 270
X3_0 + BALLOON_SIZE_2 * 4 + 4, Y_BASE, VEL_POSITIVE, BALLOON, SIZE3, 260
X3_100, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 300
X3_100 - BALLOON_SIZE_2 - 1, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 290
X3_100 - BALLOON_SIZE_2 * 2 - 2, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 280
X3_100 - BALLOON_SIZE_2 * 3 - 3, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 270
X3_100 - BALLOON_SIZE_2 * 4 - 4, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE3, 260
X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 40
X3_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 30
X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20
X3_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10
X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0
X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 40
X3_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 30
X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20
X3_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10
X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0
formation: 24
# Treinta enemigos BALLOON1. Del centro hacia los extremos. Juntos. Simétricos
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 300
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 305
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 310
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 315
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 320
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 325
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 330
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 335
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 340
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 345
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 350
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 355
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 300
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 305
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 310
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 315
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 320
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 325
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 330
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 335
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 340
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 345
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 350
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 355
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 360
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 360
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 365
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 365
X1_50, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 370
X1_50, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 370
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 0
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 5
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 10
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 15
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 20
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 25
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 30
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 35
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 40
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 45
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 50
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 55
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 60
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 65
X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 70
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 0
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 5
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 10
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 15
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 20
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 25
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 30
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 35
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 40
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 45
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 50
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 55
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 60
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 65
X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 70
formation: 25
# Treinta enemigos BALLOON1. Del centro hacia adentro. Juntos. Simétricos
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 300
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 295
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 290
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 285
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 280
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 275
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 270
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 265
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 260
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 255
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 250
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 245
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 300
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 295
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 290
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 285
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 280
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 275
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 270
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 265
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 260
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 255
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 250
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 245
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 240
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 240
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 235
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 235
X1_50 + 20, Y_BASE, VEL_NEGATIVE, BALLOON, SIZE1, 230
X1_50 - 20, Y_BASE, VEL_POSITIVE, BALLOON, SIZE1, 230
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 70
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 65
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 60
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 55
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 50
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 45
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 40
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 35
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 30
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 25
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 20
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 15
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 10
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 5
X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 0
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 70
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 65
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 60
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 55
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 50
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 45
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 40
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 35
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 30
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 25
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 20
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 15
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 10
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 5
X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 0

View File

@@ -9,23 +9,23 @@
#include <sstream>
#include <string>
void BalloonFormations::initBalloonFormations() {
void BalloonFormations::initFormations() {
// Calcular posiciones base
const int Y_BASE = param.game.play_area.rect.h - BALLOON_SPAWN_HEIGHT;
const int DEFAULT_POS_Y = param.game.play_area.rect.h - BALLOON_SPAWN_HEIGHT;
const int X4_0 = param.game.play_area.rect.x;
const int X4_100 = param.game.play_area.rect.w - BALLOON_SIZE[3];
const int X4_100 = param.game.play_area.rect.w - BALLOON_SIZE.at(3);
const int X3_0 = param.game.play_area.rect.x;
const int X3_100 = param.game.play_area.rect.w - BALLOON_SIZE[2];
const int X3_100 = param.game.play_area.rect.w - BALLOON_SIZE.at(2);
const int X2_0 = param.game.play_area.rect.x;
const int X2_100 = param.game.play_area.rect.w - BALLOON_SIZE[1];
const int X2_100 = param.game.play_area.rect.w - BALLOON_SIZE.at(1);
const int X1_0 = param.game.play_area.rect.x;
const int X1_50 = param.game.play_area.center_x - (BALLOON_SIZE[0] / 2);
const int X1_100 = param.game.play_area.rect.w - BALLOON_SIZE[0];
const int X1_50 = param.game.play_area.center_x - (BALLOON_SIZE.at(0) / 2);
const int X1_100 = param.game.play_area.rect.w - BALLOON_SIZE.at(0);
// Variables calculadas para posiciones especiales
const int QUARTER1_X4 = param.game.play_area.first_quarter_x - (BALLOON_SIZE[3] / 2);
const int QUARTER3_X4 = param.game.play_area.third_quarter_x - (BALLOON_SIZE[3] / 2);
const int QUARTER1_X4 = param.game.play_area.first_quarter_x - (BALLOON_SIZE.at(3) / 2);
const int QUARTER3_X4 = param.game.play_area.third_quarter_x - (BALLOON_SIZE.at(3) / 2);
// Mapa de variables para reemplazar en el archivo
std::map<std::string, float> variables = {
@@ -40,13 +40,13 @@ void BalloonFormations::initBalloonFormations() {
{"X4_100", X4_100},
{"QUARTER1_X4", QUARTER1_X4},
{"QUARTER3_X4", QUARTER3_X4},
{"Y_BASE", Y_BASE},
{"BALLOON_SIZE_0", BALLOON_SIZE[0]},
{"BALLOON_SIZE_1", BALLOON_SIZE[1]},
{"BALLOON_SIZE_2", BALLOON_SIZE[2]},
{"BALLOON_SIZE_3", BALLOON_SIZE[3]},
{"VEL_POSITIVE", BALLOON_VELX_POSITIVE},
{"VEL_NEGATIVE", BALLOON_VELX_NEGATIVE}};
{"DEFAULT_POS_Y", DEFAULT_POS_Y},
{"BALLOON_SIZE_0", BALLOON_SIZE.at(0)},
{"BALLOON_SIZE_1", BALLOON_SIZE.at(1)},
{"BALLOON_SIZE_2", BALLOON_SIZE.at(2)},
{"BALLOON_SIZE_3", BALLOON_SIZE.at(3)},
{"RIGHT", BALLOON_VELX_POSITIVE},
{"LEFT", BALLOON_VELX_NEGATIVE}};
balloon_formation_.reserve(NUMBER_OF_BALLOON_FORMATIONS);
@@ -71,7 +71,7 @@ auto BalloonFormations::loadFormationsFromFile(const std::string& filename, cons
line = trim(line);
// Saltar líneas vacías y comentarios
if (line.empty() || line[0] == '#') {
if (line.empty() || line.at(0) == '#') {
continue;
}
@@ -122,33 +122,38 @@ auto BalloonFormations::parseBalloonLine(const std::string& line, const std::map
tokens.push_back(trim(token));
}
if (tokens.size() != 6) {
if (tokens.size() != 7) {
return std::nullopt;
}
try {
float x = evaluateExpression(tokens[0], variables);
float y = evaluateExpression(tokens[1], variables);
float vel_x = evaluateExpression(tokens[2], variables);
int x = evaluateExpression(tokens.at(0), variables);
int desp = evaluateExpression(tokens.at(1), variables);
int y = evaluateExpression(tokens.at(2), variables);
float vel_x = evaluateExpression(tokens.at(3), variables);
BalloonType type = (tokens[3] == "BALLOON") ? BalloonType::BALLOON : BalloonType::FLOATER;
BalloonType type = (tokens.at(4) == "BALLOON") ? BalloonType::BALLOON : BalloonType::FLOATER;
BalloonSize size;
if (tokens[4] == "SIZE1") {
if (tokens.at(5) == "SIZE1") {
size = BalloonSize::SIZE1;
} else if (tokens[4] == "SIZE2") {
desp = desp * (BALLOON_SIZE.at(0) + 1);
} else if (tokens.at(5) == "SIZE2") {
size = BalloonSize::SIZE2;
} else if (tokens[4] == "SIZE3") {
desp = desp * (BALLOON_SIZE.at(1) + 1);
} else if (tokens.at(5) == "SIZE3") {
size = BalloonSize::SIZE3;
} else if (tokens[4] == "SIZE4") {
desp = desp * (BALLOON_SIZE.at(2) + 1);
} else if (tokens.at(5) == "SIZE4") {
size = BalloonSize::SIZE4;
desp = desp * (BALLOON_SIZE.at(3) + 1);
} else {
return std::nullopt;
}
int creation_time = evaluateExpression(tokens[5], variables);
int creation_time = CREATION_TIME + evaluateExpression(tokens.at(6), variables);
return BalloonFormationParams(x, y, vel_x, type, size, creation_time);
return BalloonFormationParams(x + desp, y, vel_x, type, size, creation_time);
} catch (const std::exception&) {
return std::nullopt;
}
@@ -158,7 +163,7 @@ auto BalloonFormations::evaluateExpression(const std::string& expr, const std::m
std::string trimmed_expr = trim(expr);
// Si es un número directo
if ((std::isdigit(trimmed_expr[0]) != 0) || (trimmed_expr[0] == '-' && trimmed_expr.length() > 1)) {
if ((std::isdigit(trimmed_expr.at(0)) != 0) || (trimmed_expr.at(0) == '-' && trimmed_expr.length() > 1)) {
return std::stoi(trimmed_expr);
}
@@ -174,7 +179,7 @@ auto BalloonFormations::evaluateExpression(const std::string& expr, const std::m
auto BalloonFormations::evaluateSimpleExpression(const std::string& expr, const std::map<std::string, float>& variables) -> float {
// Buscar operadores (+, -, *, /)
for (size_t i = 1; i < expr.length(); ++i) {
char op = expr[i];
char op = expr.at(i);
if (op == '+' || op == '-' || op == '*' || op == '/') {
std::string left = trim(expr.substr(0, i));
std::string right = trim(expr.substr(i + 1));
@@ -214,16 +219,16 @@ void BalloonFormations::createFloaterVariants() {
// Crear variantes flotantes de las primeras 50 formaciones
for (size_t k = 0; k < 50 && k < balloon_formation_.size(); k++) {
std::vector<BalloonFormationParams> floater_params;
floater_params.reserve(balloon_formation_[k].number_of_balloons);
floater_params.reserve(balloon_formation_.at(k).number_of_balloons);
for (int i = 0; i < balloon_formation_[k].number_of_balloons; i++) {
const auto& original = balloon_formation_[k].init[i];
for (int i = 0; i < balloon_formation_.at(k).number_of_balloons; i++) {
const auto& original = balloon_formation_.at(k).init.at(i);
floater_params.emplace_back(
original.x, original.y, original.vel_x, BalloonType::FLOATER, original.size, original.creation_counter);
}
balloon_formation_[k + 50] = BalloonFormationUnit(
balloon_formation_[k].number_of_balloons, floater_params);
balloon_formation_.at(k + 50) = BalloonFormationUnit(
balloon_formation_.at(k).number_of_balloons, floater_params);
}
}
@@ -234,42 +239,41 @@ void BalloonFormations::addTestFormation() {
{90, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE3, 200},
{140, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE4, 200}};
balloon_formation_[99] = BalloonFormationUnit(4, test_params);
balloon_formation_.at(99) = BalloonFormationUnit(4, test_params);
}
void BalloonFormations::loadDefaultFormations() {
// Código de fallback con algunas formaciones básicas hardcodeadas
// para que el juego funcione aunque falle la carga del archivo
const int Y_BASE = param.game.play_area.rect.h - BALLOON_SPAWN_HEIGHT;
const int DEFAULT_POS_Y = param.game.play_area.rect.h - BALLOON_SPAWN_HEIGHT;
const int X4_0 = param.game.play_area.rect.x;
const int X4_100 = param.game.play_area.rect.w - BALLOON_SIZE[3];
constexpr int CREATION_TIME = 300;
const int X4_100 = param.game.play_area.rect.w - BALLOON_SIZE.at(3);
// Formación básica #00
std::vector<BalloonFormationParams> basic_formation = {
BalloonFormationParams(X4_0, Y_BASE, BALLOON_VELX_POSITIVE, BalloonType::BALLOON, BalloonSize::SIZE4, CREATION_TIME),
BalloonFormationParams(X4_100, Y_BASE, BALLOON_VELX_NEGATIVE, BalloonType::BALLOON, BalloonSize::SIZE4, CREATION_TIME)};
BalloonFormationParams(X4_0, DEFAULT_POS_Y, BALLOON_VELX_POSITIVE, BalloonType::BALLOON, BalloonSize::SIZE4, CREATION_TIME),
BalloonFormationParams(X4_100, DEFAULT_POS_Y, BALLOON_VELX_NEGATIVE, BalloonType::BALLOON, BalloonSize::SIZE4, CREATION_TIME)};
balloon_formation_.emplace_back(2, basic_formation);
}
// Inicializa los conjuntos de formaciones
void BalloonFormations::initBalloonFormationPools() {
void BalloonFormations::initFormationPools() {
// Reserva espacio para cada pool de formaciones
balloon_formation_pool_.resize(NUMBER_OF_SETS_PER_POOL);
// Set #0
balloon_formation_pool_.at(0) = {
&balloon_formation_.at(0),
&balloon_formation_.at(1),
&balloon_formation_.at(2),
&balloon_formation_.at(2),
&balloon_formation_.at(2),
&balloon_formation_.at(2),
&balloon_formation_.at(2),
&balloon_formation_.at(2),
&balloon_formation_.at(2),
&balloon_formation_.at(2),
&balloon_formation_.at(2),
&balloon_formation_.at(2)};
&balloon_formation_.at(3),
&balloon_formation_.at(4),
&balloon_formation_.at(5),
&balloon_formation_.at(6),
&balloon_formation_.at(7),
&balloon_formation_.at(8),
&balloon_formation_.at(9)};
// Set #1
balloon_formation_pool_.at(1) = {

View File

@@ -9,10 +9,6 @@
#include <vector>
// --- Constantes de configuración ---
constexpr int NUMBER_OF_BALLOON_FORMATIONS = 100;
constexpr int MAX_NUMBER_OF_BALLOONS_IN_A_FORMATION = 50;
constexpr int NUMBER_OF_SETS_PER_POOL = 10;
constexpr int NUMBER_OF_STAGES = 10;
// --- Estructuras de datos ---
struct BalloonFormationParams {
@@ -50,8 +46,8 @@ class BalloonFormations {
public:
// --- Constructor y destructor ---
BalloonFormations() {
initBalloonFormations();
initBalloonFormationPools();
initFormations();
initFormationPools();
}
~BalloonFormations() = default;
@@ -63,14 +59,18 @@ class BalloonFormations {
private:
// --- Constantes ---
static constexpr int BALLOON_SPAWN_HEIGHT = 208; // Altura desde el suelo en la que aparecen los globos
static constexpr int CREATION_TIME = 200; // Tiempo base de creación de los globos para las formaciones
static constexpr int NUMBER_OF_BALLOON_FORMATIONS = 100;
static constexpr int MAX_NUMBER_OF_BALLOONS_IN_A_FORMATION = 50;
static constexpr int NUMBER_OF_SETS_PER_POOL = 10;
// --- Datos ---
std::vector<BalloonFormationUnit> balloon_formation_; // Vector con todas las formaciones enemigas
std::vector<BalloonFormationPool> balloon_formation_pool_; // Conjuntos de formaciones enemigas
// --- Métodos internos de inicialización ---
void initBalloonFormations(); // Inicializa la lista principal de formaciones de globos disponibles
void initBalloonFormationPools(); // Prepara las estructuras de agrupamiento o reutilización de formaciones (pools)
void initFormations(); // Inicializa la lista principal de formaciones de globos disponibles
void initFormationPools(); // Prepara las estructuras de agrupamiento o reutilización de formaciones (pools)
auto loadFormationsFromFile(const std::string& filename, const std::map<std::string, float>& variables) -> bool; // Carga las formaciones desde un archivo, evaluando variables dinámicas
auto parseBalloonLine(const std::string& line, const std::map<std::string, float>& variables) -> std::optional<BalloonFormationParams>; // Parsea una línea individual del archivo y genera parámetros de formación
auto evaluateExpression(const std::string& expr, const std::map<std::string, float>& variables) -> float; // Evalúa expresiones matemáticas con variables definidas (complejas)

View File

@@ -1,7 +1,7 @@
// IWYU pragma: no_include <bits/std_abs.h>
#pragma once
#include <SDL3/SDL.h> // Para Uint8, SDL_FRect, SDL_FPoint, SDL_Renderer
#include <bits/std_abs.h> // Para abs
#include <algorithm> // Para max, min
#include <array> // Para array