Página 5 de 5

Re: Finalizar juego al recolectar 4 objetos (tiles) diferentes

Publicado: Mié, 19 Mar 2014, 01:19
por Fabio
Genial. Ahi lo cambie y anda a la perfeccion. Se soluciono. Mil gracias.

Re: Finalizar juego al recolectar 4 objetos (tiles) diferentes

Publicado: Mié, 19 Mar 2014, 01:28
por Fabio
Con el IF PLAYER_TOUCHES x, y no se si andaba porque los objetos que voy a recolectar ocupan 2 tiles. Al final lo hice con el siguiente script y anda barbaro. Tal vez derroche lineas pero funciona.



# Isidoro - Ninja
# Copyleft 201X tu grupo roneón soft.
# Churrera 3.99.1

# flags:
# 1 - Arma 1
# 2 - Objetos en su sitio.
# 3 - Arma 2
# 4 - Arma 3
# 5 - Arma 4
# 6 - Arma 5
# 7 - Contador Objetos

# ARMA 1 ---------------------------------------------------------------------------------------------------------------------------------------------------

ENTERING GAME
IF TRUE
THEN
SET FLAG 1 = 0
SET FLAG 2 = 0
SET FLAG 3 = 0
SET FLAG 4 = 0
SET FLAG 5 = 0
SET FLAG 6 = 0
SET FLAG 7 = 0
#WARP_TO 12 1, 3
END
END
#----


ENTERING SCREEN 27

IF FLAG 2 = 0
THEN
SET TILE (13, 4) = 22
SET TILE (7, 1) = 30
SET TILE (7, 2) = 31
SET TILE (3, 6) = 23
SET TILE (3, 7) = 21
END
IF FLAG 1 = 0
THEN
SET TILE (6, 3) = 41
SET TILE (7, 3) = 42
SET_FIRE_ZONE 81, 33, 127, 63
END
END

PRESS_FIRE AT SCREEN 27
# Detectar Arma1.
# Lo detectamos definiendo un rectángulo de píxels.
IF PLAYER_IN_X 81, 127
IF PLAYER_IN_Y 33, 63
THEN
SET_FIRE_ZONE 0, 0, 0, 0
SET TILE (6, 3) = 0
SET TILE (7, 3) = 0
INC FLAG 1, 1
INC FLAG 7, 1
SOUND 7
PRINT_TILE_AT (5, 21) = 32
END
IF FLAG 7 = 5
THEN
WIN GAME
END
END

# ARMA 2 ------------------------------------------------------------------------------------------------------------------------------------------------


ENTERING SCREEN 31
IF FLAG 2 = 0
THEN
SET TILE (1, 7) = 23
SET TILE (1, 8) = 21
SET TILE (11, 2) = 28
SET TILE (11, 3) = 29
END
IF FLAG 3 = 0
THEN
SET TILE (6, 8) = 43
SET TILE (7, 8) = 44
SET TILE (8, 8) = 45
SET_FIRE_ZONE 81, 113, 143, 143
END
END

PRESS_FIRE AT SCREEN 31
# Detectar Arma2.
# Lo detectamos definiendo un rectángulo de píxels.
IF PLAYER_IN_X 81, 143
IF PLAYER_IN_Y 113, 143
THEN
SET_FIRE_ZONE 0, 0, 0, 0
SET TILE (6, 8) = 0
SET TILE (7, 8) = 0
SET TILE (8, 8) = 0
INC FLAG 3, 1
INC FLAG 7, 1
SOUND 7
PRINT_TILE_AT (7, 21) = 33
END
IF FLAG 7 = 5
THEN
WIN GAME
END
END


# ARMA 3 --------------------------------------------------------------------------------------------------------------------------------------------------


ENTERING SCREEN 7
IF FLAG 2 = 0
THEN
SET TILE (4, 1) = 30
SET TILE (4, 2) = 31
SET TILE (1, 8) = 21
SET TILE (1, 7) = 22
END
IF FLAG 4 = 0
THEN
SET TILE (9, 4) = 46
SET TILE (10, 4) = 47
SET_FIRE_ZONE 129, 49, 175, 79
END
END

PRESS_FIRE AT SCREEN 7
# Detectar Arma3.
# Lo detectamos definiendo un rectángulo de píxels.
IF PLAYER_IN_X 129, 175
IF PLAYER_IN_Y 49, 79
THEN
SET_FIRE_ZONE 0, 0, 0, 0
SET TILE (9, 4) = 0
SET TILE (10, 4) = 0
INC FLAG 4, 1
INC FLAG 7, 1
SOUND 7
PRINT_TILE_AT (10, 21) = 34
END
IF FLAG 7 = 5
THEN
WIN GAME
END
END


#ARMA 4 ----------------------------------------------------------------------------------------------------------------------------------------------------


ENTERING SCREEN 1
IF FLAG 2 = 0
THEN
SET TILE (5, 1) = 30
SET TILE (5, 2) = 31
SET TILE (4, 7) = 23
SET TILE (5, 7) = 21
SET TILE (5, 6) = 23
SET TILE (12, 1) = 24
SET TILE (1, 1) = 24
SET TILE (2, 8) = 22
END
IF FLAG 5 = 0
THEN
SET TILE (11, 3) = 39
SET TILE (12, 3) = 40
SET_FIRE_ZONE 161, 33, 207, 63
END
END

PRESS_FIRE AT SCREEN 1
# Detectar Arma4.
# Lo detectamos definiendo un rectángulo de píxels.
IF PLAYER_IN_X 161, 207
IF PLAYER_IN_Y 33, 63
THEN
SET_FIRE_ZONE 0, 0, 0, 0
SET TILE (11, 3) = 0
SET TILE (12, 3) = 0
INC FLAG 5, 1
INC FLAG 7, 1
SOUND 7
PRINT_TILE_AT (12, 21) = 35
END
IF FLAG 7 = 5
THEN
WIN GAME
END
END


#ARMA 5 ----------------------------------------------------------------------------------------------------------------------------------------------------


ENTERING SCREEN 12
IF FLAG 2 = 0
THEN
#SET TILE (5, 1) = 30
#SET TILE (5, 2) = 31
#SET TILE (4, 7) = 23
#SET TILE (5, 7) = 21
#SET TILE (5, 6) = 23
#SET TILE (12, 1) = 24
#SET TILE (1, 1) = 24
#SET TILE (2, 8) = 22
END
IF FLAG 6 = 0
THEN
SET TILE (7, 4) = 37
SET TILE (8, 4) = 38
SET_FIRE_ZONE 97, 49, 143, 79
END
END

PRESS_FIRE AT SCREEN 12
# Detectar Arma5.
# Lo detectamos definiendo un rectángulo de píxels.
IF PLAYER_IN_X 97, 143
IF PLAYER_IN_Y 49, 79
THEN
SET_FIRE_ZONE 0, 0, 0, 0
SET TILE (7, 4) = 0
SET TILE (8, 4) = 0
INC FLAG 6, 1
INC FLAG 7, 1
SOUND 7
PRINT_TILE_AT (15, 21) = 36
END
IF FLAG 7 = 5
THEN
WIN GAME
END
END


$this->bbcode_second_pass_quote('na_th_an', 'H')ay varias opciones para hacerlo. La que se te ocurre a tí va bien encaminada.

¿Se pueden recolectar los objetos en cualquier orden, y el juego debe terminarse al recoger el último de ellos? En ese caso tienes que hacer las comprobaciones luego de recoger cada objeto.

Imaginate que usas el flag 10 para ir haciendo el conteo. Cuado cojas un objeto estarás haciendo algo parecido a esto:

$this->bbcode_second_pass_code('', 'IF PLAYER_TOUCHES x, y
IF FLAG N = 0
THEN
# marcar objeto como cogido.
SET FLAG N = 1
# Borrar de la pantalla
SET TILE (x, y) = 0
# Pintar en el marco
PRINT_TILE_AT (xx, yy) = t
# Incrementar el contador
INC FLAG 10, 1
END')

Pues justo después de cada uno de estos trozos de código, debes añadir la comprobación de que ya tienes cuatro:

$this->bbcode_second_pass_code('', 'IF FLAG 10 = 4
THEN
WIN
END')

Por ejemplo :)

Re: Finalizar juego al recolectar 4 objetos (tiles) diferentes

Publicado: Mié, 19 Mar 2014, 10:29
por elborra
Yo no lo veo mal, es verdad que hay cosas que se podrían organizar de otra manera algo más eficiente, pero si cumple su cometido .... :D

Las flags al principio del juego siempre valen 0. Así que la parte de ENTERING GAME (al menos la inicialización a 0 de una flag) no es necesaria.

Lo único que si que veo raro es que uses SET_FIRE_ZONE 0,0,0,0 cuando has cogido el objeto para "borrar" la zona de disparo. Lo lógico sería que en las comprobaciones para recoger el objeto pusieras como condición que no tengas el objeto, puesto que luego incrementas la flag y además en la sección de entering screen también realizas dicha comprobación para pintar la zona de disparo o no. De la otra forma sigues definiendo una zona de disparo (aunque sea en 0,0,0,0) cuando tu no quieres tenerla. Además ahorrarás algún byte que otro XD

Ejemplo:$this->bbcode_second_pass_code('', '# ARMA 2 --------------------------------------------------------------------------------------
ENTERING SCREEN 31
IF FLAG 2 = 0
THEN
SET TILE (1, 7) = 23
SET TILE (1, 8) = 21
SET TILE (11, 2) = 28
SET TILE (11, 3) = 29
END

IF FLAG 3 = 0
THEN
SET TILE (6, 8) = 43
SET TILE (7, 8) = 44
SET TILE (8, 8) = 45
SET_FIRE_ZONE 81, 113, 143, 143
END
END

PRESS_FIRE AT SCREEN 31
# Detectar Arma2.
# Lo detectamos definiendo un rectángulo de píxels.
IF PLAYER_IN_X 81, 143
IF PLAYER_IN_Y 113, 143
IF FLAG 3 = 0 // <-- ESTA LINEA EN LUGAR DE SET_FIRE_ZONE 0,0,0,0 DENTRO DE LAS ACCIONES
THEN
SET TILE (6, 8) = 0
SET TILE (7, 8) = 0
SET TILE (8, 8) = 0
INC FLAG 3, 1
INC FLAG 7, 1
SOUND 7
PRINT_TILE_AT (7, 21) = 33
END

IF FLAG 7 = 5
THEN
WIN GAME
END
END')

Re: Finalizar juego al recolectar 4 objetos (tiles) diferentes

Publicado: Mié, 19 Mar 2014, 14:18
por Fabio
El tema del SET_FIRE_ZONE 0,0,0,0 es porque , si el objeto se borraba, igualmente si volvia a pasar por ese lugar en donde estaba, se volvia a escuchar el sonido que le puse (sound 7). Entonces supuse que poniendo 0,0,0,0, se desactivaba. Y como me funciono lo deje. Hice tantas modificaciones que tal vez este sobrando. Voy a ver si sacandolo ahora, ya deja de hacerlo.
Y lo del flag en cero al principio lo voy a borra si no es necesario.
Bueno igualmente, le voy a seguir agregando cosas al juego. La idea es que una vez recolectados los objetos haya que llevarlos a alguna pantalla del mapa.

Re: Finalizar juego al recolectar 4 objetos (tiles) diferentes

Publicado: Jue, 20 Mar 2014, 23:36
por Fabio
Una nueva consulta muchachos. Desactivo las llaves y objetos en el config.h, porque mi juego como sabran no los utiliza.
//#define DEACTIVATE_KEYS // If defined, keys are not present.
//#define DEACTIVATE_OBJECTS // If defined, objects are not present.
Pero me muestra este mensaje de error cuando trata de compilar y obviamente no me genera el respectivo archivo .tap. Los errores parecen estar relacionados con los archivos printer.h, engine.h y mainloop.h.