Finalizar juego al recolectar 4 objetos (tiles) diferentes

For all things Churrera. ¿Estás haciendo un juego? ¿quieres proponer un cambio? ¿tienes alguna duda? ¡Cuéntanoslo!

Moderador: na_th_an

Avatar de Usuario
Fabio
Mensajes: 44
Registrado: Vie, 17 Ene 2014, 21:52

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

Mensajepor Fabio » Mié, 19 Mar 2014, 01:19

Genial. Ahi lo cambie y anda a la perfeccion. Se soluciono. Mil gracias.
Avatar de Usuario
Fabio
Mensajes: 44
Registrado: Vie, 17 Ene 2014, 21:52

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

Mensajepor Fabio » Mié, 19 Mar 2014, 01:28

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


na_th_an escribió:Hay 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:

Código: Seleccionar todo

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:

Código: Seleccionar todo

IF FLAG 10 = 4
THEN
    WIN
END


Por ejemplo :)
Avatar de Usuario
elborra
Mensajes: 209
Registrado: Dom, 12 Ene 2014, 14:37

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

Mensajepor elborra » Mié, 19 Mar 2014, 10:29

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:

Código: Seleccionar todo

# 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
Avatar de Usuario
Fabio
Mensajes: 44
Registrado: Vie, 17 Ene 2014, 21:52

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

Mensajepor Fabio » Mié, 19 Mar 2014, 14:18

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.
Avatar de Usuario
Fabio
Mensajes: 44
Registrado: Vie, 17 Ene 2014, 21:52

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

Mensajepor Fabio » Jue, 20 Mar 2014, 23:36

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.
Adjuntos
Sin título.png
Sin título.png (54.49 KiB) Visto 1653 veces

Volver a “La Churrera”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados