CAAD
http://foro.caad.es/

Superglús: Cómo recargar un número x en el arma
http://foro.caad.es/viewtopic.php?f=6&t=6310
Página 1 de 1

Autor:  El testigo [ 14 Ago 2018 20:53 ]
Asunto:  Superglús: Cómo recargar un número x en el arma

Saludos aventureros. Espero que todo vaya bien.
Estoy por aquí de nuevo en mis andanzas. Al fin tengo nuevamente red fija en casa.


Si bien he avanzado en mis proyectos, también he estado muy mal físicamente, hasta el grado de permanecer en cama días enteros y utilizando collarín.
Lo que me da gusto, es que estoy casi seguro de que para diciembre a mas tardar, podré enviar algo para que todos puedan jugar, disfrutar y opinar.


En esta oportunidad necesito ayuda acerca de llevar un control de cantidades. Tengo esta entrada que me permite recargar el arma.
Comprueba que tenemos el arma, que el arma esta equipada, que tenemos balas y que el arma esta descargada.


; Tabla de Respuestas
RECARGAR _
NOTEQ fArmaEquipada 255
COPYFF fArmaEquipada fArma
PROCESS 14
DONE


; Proceso 14
_ _
CARRIED objPistola
EQ fArma 2
EQ fArmaEquipada objPistola
NOTZERO fPistolaBalas
ZERO fPistolaCargada
WRITELN "Introduces un cargador con 15 balas en la pistola."
MINUS fPistolaBalas 15
LET fPistolaCargada 15
DONE


Como se puede ver, la entrada permite recargar el arma con un número predefinido de balas, en este caso, 15.
Ahora bien, sería interesante que el jugador pueda recargar el arma independientemente de cuántas balas le quedan al arma.


Es decir, que el jugador va disparando y digamos que le quedan 3 balas en el arma, pues bien, sería genial que al enviar la orden de RECARGAR, el sistema le rellene el arma tomando en cuenta de cuántas balas tiene de espacio el arma.
En este caso, que rellene tan solo 12 balas así quedando MAS + las 3 que quedan, el arma llena con sus 15 balas. Obviamente, habrá que hacer una comprobación para que el arma no se recargue indefinidamente pudiendo tener 20, 48, 79 balas.


De igual manera, si dispara tan solo una vez quedando 14 balas en el arma, al enviar la orden RECARGAR el sistema le recargue solo 1 bala para que se llene de nuevo a 15.
Por otra parte, también se debe hacer eso con la bandera que contiene las balas para dar coherencia. Si el jugador tiene 44 balas, al recargar el arma que recte x unidades sean 3, 15 o 1. Sobre todo cuidar que si apenas se tiene 1 bala en el total, cuando recargue el arma recte esa única bala y no se vea la bandera luego con MENOS -9 balas.


Me despido esperando que tengan un buen día tarde noche

Autor:  Uto [ 15 Ago 2018 12:05 ]
Asunto:  Re: Superglús: Cómo recargar un número x en el arma

Hola!

Si he entendido bien el flag fPistolaBalas contiene el número de balas "sueltas" que tienes para recargar, mientras que fPistolaCargada contiene el número de balas en el cargador de la pistola.

en ese caso:

Código:
_ _
CARRIED objPistola
EQ fArma 2
EQ fArmaEquipada objPistola
NOTZERO fPistolaBalas
ZERO fPistolaCargada
WRITELN "Introduces un cargador con 15 balas en la pistola."
MINUS fPistolaBalas 15
PLUS fPistolaBalas @fPistolaCargada
LET fPistolaCargada 15
DONE


Es casi lo mismo que tenías, solo que le restamos 15 a las balas sueltas, pero luego le sumamos el numero de balas que aun quedaban en el cargador.

En cualquier caso esta operación no es correcta en todos los casos, porque tanto antes como ahora, si el total de balas en el cargador mas las sueltas no llega a 15, este sistema no funciona bien.

Autor:  Uto [ 15 Ago 2018 12:19 ]
Asunto:  Re: Superglús: Cómo recargar un número x en el arma

Así creo que lo hará bien en todos los casos. Es un poco enrevesado porque Superglús no soporta colon/sharp condacts como ngPAWs, pero creo funciona:

Código:
_ _
COPYFF fPistolaBalas fAux         ; Copio el numero de balas que tengo en flag auxiliar
PLUS fAux @fPistolaCargada  ; le sumo el número de balas en la pistola
GT fAux 15
LET fAux 15                            ; Calculo cuantas balas habrá al final en el cargador, como máximo 15

_ _
COPYFF fAux fAux2               ; Copio el dato final de balas en otro flag auxiliar
MINUS fAux2 @fPistolaCargada ; Calculo cuantas balas voy a cargar realmente

_ _
CARRIED objPistola
EQ fArma 2
EQ fArmaEquipada objPistola
NOTZERO fPistolaBalas
ZERO fPistolaCargada
WRITE "Introduces  "
PRINT fAux2
WRITELN " balas en la pistola."
MINUS fPistolaBalas @fAux2
LET fPistolaCargada @fAux
DONE

Autor:  El testigo [ 16 Ago 2018 21:05 ]
Asunto:  Re: Superglús: Cómo recargar un número x en el arma

Saludos amigo Uto. Muchas gracias por las entradas.
En efecto, la bandera "fPistolaBalas" actúa como si fuera una caja o riñonera donde meto todas las balas sueltas que vaya consiguiendo:


REGISTRAR CUERPO
AT locEntrada; En la entrada del complejo
PRESENT objSoldadoMuerto; Comprobar que el soldado ya no representa ninguna amenaza
NOTZERO fBalasSoldado; Vemos que aún no se ha cogido la munición
WRITELN "Registras el cuerpo del soldado consiguiendo 70 balas."
PLUS fPistolaBalas 70; Sumamos +70 balas a la cuenta total que contiene la bandera "fPistolaBalas"
SET fBalasSoldado; Marcamos que ya se ha cogido la munición
DONE


Y la bandera "fPistolaCargada" hace las veces del cargador del arma pudiendo contener un máximo de 15 balas
Al momento de disparar, simplemente se le resta 1 a la bandera que se supone es el cargador del arma:


DISPARAR _
(...); Todas las comprobaciones necesarias de que el arma está cargada, de que está equipada ETC
WRITELN "Disparas la pistola desperdiciando munición."
MINUS fPistolaCargada 1
DONE


Ahora bien, tu código a buenas y primeras sirvió. Al momento de coger el arma y dar RECARGAR, se imprimió el mensaje:
Introduces 15 balas en el cargador de la pistola.

Pero... (Que baile que nunca falta un pero...) cuando disparo el arma restando su cantidad de munición y doy nuevamente RECARGAR, no sucede nada.
Falta alguna línea o algo que compruebe que sin importar que el arma tenga las balas que sea, sean 1 o 14, se pueda recargar las balas necesarias para sumar de nuevo el total de 15 balas en el cargador.


_ _
COPYFF fPistolaBalas fAux; Copio el numero de balas que tengo en flag auxiliar
PLUS fAux @fPistolaCargada; Le sumo el número de balas en la pistola
GT fAux 15
LET fAux 15; Calculo cuantas balas habrá al final en el cargador, como máximo 15

_ _
COPYFF fAux fAux2; Copio el dato final de balas en otro flag auxiliar
MINUS fAux2 @fPistolaCargada; Calculo cuantas balas voy a cargar realmente

_ _
CARRIED objPistola
EQ fArma 2
EQ fArmaEquipada objPistola
NOTZERO fPistolaBalas
ZERO fPistolaCargada
WRITE "Introduces "
PRINT fAux2
WRITELN " balas en el cargador de la pistola."
MINUS fPistolaBalas @fAux2
LET fPistolaCargada @fAux
DONE


Y pues eso, cargo las 15 primeras balas en el arma, disparo las que sea (sin llegar a 0), doy de nuevo RECARGAR pero nada, no sucede nada de nada. Te obliga a que el arma esté vacía.

Autor:  El testigo [ 20 Ago 2018 02:17 ]
Asunto:  Re: Superglús: Cómo recargar un número x en el arma

Saludos espero que estén bien. :)
Solucionado el fallo (que ni fallo era, sino descuido por mi parte). :(


Hasta hoy me pude poner a revisar las entradas y se me cae la cara de vergüenza de ver que el detalle estaba en la línea seis de la tercera entrada. (Ciego tenía que estar para no verla).
La línea que comprueba de que el arma está completamente descargada (0 balas en su interior): ZERO fPistolaCargada


No había caído en cuenta puesto que copié el código entero y lo pegué íntegramente en mi proyecto y pues eso, se coló esa comprobación.
Pero lo dicho, hoy que me pude meter en ello, y viendo que en el juego el arma solo se puede recargar cuando está su carga a 0. Abrí código, eliminé esa línea y bien! todo funciona bien.


Muchísimas gracias amigo Uto por tu ayuda.
Me despido esperando que tengan buen día tarde noche.

Página 1 de 1 Todos los horarios son UTC + 1 hora
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/