El testigo escribió:
******************************
Saludos aventureros. Espero que estén bien

Adaptando el código de recargar el arma en mi juego, el mismo funciona a la mar de bien.
Lo malo como explico abajo, es intentar recargar el arma teniendo pocas balas. La prueba la hago con 30 balas pidiendo el arma 15 balas:
*-. Empuñamos el arma:
<empuñar pistola
Empuñas una pistola.
*-. Intentamos empuñarla de nuevo para comprobar que no salte mensaje de que la vuelves a empuñar (OBVIAMENTE, PRUEBAS DEL PROGRAMADOR PARA VER SI EL CÓDIGO FINAL NO DA ERROR AL JUGADOR):
<empuñar pistola
Ya la tienes empuñada.
*-. Recargamos el arma:
<recargar
Introduces 15 balas en el cargador de la pistola.
*-. Intentamos recargarla de nuevo para comprobar que no salte mensaje de que la vuelves a recargar ya estando al tope (OBVIAMENTE, PRUEBAS DEL PROGRAMADOR PARA VER SI EL CÓDIGO FINAL NO DA ERROR AL JUGADOR):
<recargar
La pistola ya está cargada.
*-. Comprobamos que el arma está a su tope:
<@200
15
*-. Comprobamos cuántas balas nos quedan:
<@201
15
*-. Accionamos el arma:
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
*-. Comprobamos cuántas balas le quedan al arma:
<@200
8
*-. Comprobamos cuántas balas nos quedan:
<@201
15
<recargar
Introduces 7 balas en el cargador de la pistola.
<recargar
La pistola ya está cargada.
*-. Comprobamos que el arma está a su tope:
<@200
15
*-. Comprobamos cuántas balas nos quedan:
<@201
8
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
*-. Comprobamos cuántas balas le quedan al arma:
<@200
11
*-. Comprobamos cuántas balas nos quedan:
<@201
8
<recargar
Introduces 4 balas en el cargador de la pistola.
<recargar
La pistola ya está cargada.
*-. Comprobamos que el arma está a su tope:
<@200
15
*-. Comprobamos cuántas balas nos quedan:
<@201
4
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
<disparar
Disparas la pistola desperdiciando munición.
*-. Comprobamos cuántas balas le quedan al arma:
<@200
10
*-. Comprobamos cuántas balas nos quedan:
<@201
4
<recargar
<recargar
<
Como podemos ver, el código de recargar el arma funciona bien. El problema surge cuando intentamos recargar el arma cuando tenemos pocas balas.
Es decir, el código al comprobar el número de balas totales, y el arma al solicitar 15 balas, sirve si o si siempre que tengamos más balas de las que pide el arma (O las suficientes para que el arma tenga 15 balas).
Si la capacidad del arma es de 15 balas, si está vacía y tenemos justas 15 balas, las recarga.
Ahora, si la capacidad del arma es de 15 balas y solo tenemos 4 balas, no sucede nada.
((RESUMIDO: 'El arma pide 15 balas. Si tienes más de 15, la recarga.' 'Si tienes 14, 10, 7, o 2 balas, no pasa nada puesto que 14, 10, 7 o 2 balas, no cumplen el requerimiento del arma que es de 15 balas.')).
; Recargar el arma
_ _
CARRIED objPistola
EQ fArma 0
ONOTZERO objPistola aWeapon
NOTZERO fBalasDePistola
COPYFF fBalasDePistola fTotalDeBalas
PLUS fTotalDeBalas @fPistolaCargada
GT fTotalDeBalas 15
LET fTotalDeBalas 15
COPYFF fTotalDeBalas fBalasFaltantes
MINUS fBalasFaltantes @fPistolaCargada
WRITE "Introduces "
PRINT fBalasFaltantes
WRITELN " balas en el cargador de la pistola."
MINUS fBalasDePistola @fBalasFaltantes
LET fPistolaCargada @fTotalDeBalas
DONE
Sería de agradecer una solución que permita introducir en el arma las balas que te quedan.
Si el arma te pide quince balas y solamente te quedan 4, 7, o 2 balas, poder recargar el arma con esas 4, 7, o 2 balas.
Me despido pidiendo disculpas por lo extenso del mensaje y esperando que tengan un buen día tarde noche.
******************************
----------------------------
Saludos aventureros. Espero se encuentren bien.
Analizando el código de el compañero eltestigo vengo a resolver la duda.
Nota: Esto está desarrollado en "ngPaws" con mis propias variables/flags. Espero quede muy bien detallado, explicado y bien comprendido!
Cualquier duda me mandan algun mensaje o dejen comentario.
Buscamos meter balas en la pistola, solo hasta 15 balas admite la pistola, así como también buscamos mirar el número de balas que estamos recargando en la pistola X número de balas sin pasar el límite de las 15.
Se busca evitar meter mas balas de las deseadas 15.
queremos ebitar meter balas cuando tenemos 0 en inventario.
Queremos evitar se descontrole el recargar las balas como arriba en los demás comentarios se ha explicado.
Codigo:
En solapa Definiciones:
; mis flags.
#define flg fBalasPistola 100 ;serán las balas introducidas en la pistola (en la recámara o cargador.)
#define flg fBalasInventario 101 ;las balas que vamos recogiendo al recorrer la aventura.
#define flg fBalasPistolaSumadas 102 ; el resultado de una suma. (fBalasPistola+fBalasInventario)
#define flg fQuince 103 ; flag definido a 15, siempre será 15.
#define flg fBalasRecargadas 104 ;flag Auxiliar para hacer truco de cuantas balas metemos en pistola al recargar. Nos ayudará con una operación matemática...
En vocabulário:
PISTOLA 50 noun
ARMA50 noun
BALAS 51 noun
BALA 51 noun
RECARGAR 115 verb
DISPARAR 116 verb
DISPARA 116 verb
En datos de Objetos:
/0 CARRIED 1 PISTOLA _ ATTR aFemale
Vamos a lo bueno!
en pro0 o tabla de respuestas:
; ********************* [[[ Coloca aqui tus propias respuestas ]]] *********************
; MIS RESPUESTAS:
;veremos cuantas balas me quedan en mi inventario. (son las que he ido recogiendo a lo largo de la aventura...)
_ BALAS
WRITE "Tienes "
PRINT fBalasInventario
WRITELN " balas disponibles."
DONE
; recargamos la pistola.
; no hay balas en riñonera/Inventario.
RECARGAR PISTOLA
CARRIED oPistola ;comprobar el que nuestra pistola está en el inventario.
LT fBalasPistola 15 ;Comprobación para validar que nuestra pistola tenga menos de 15 balas.
ZERO fBalasInventario ;Comprobamos el que ya no hay balas en inventario.
WRITELN "No te quedan mas balas."
DONE
; intento de recargar al ya estar con las 15 balas en recámara.
RECARGAR PISTOLA
CARRIED oPistola ;comprobar pistola en el inventario.
SAME fBalasPistola fQuince ;comprobamos que la pistola tenga quince balas.
WRITELN "La pistola ya está cargada."
DONE
; recargar cuando hay balas en riñonera/inventario.
;Nota: este bloque nos ayuda para cuando las valas del Inventario/riñonera sean < o = 15.
RECARGAR PISTOLA
CARRIED oPistola ;comprobamos la pistola en el inventario.
LT fBalasPistola 15 ;hay menos de 15 balas en la pistola.
NOTZERO fBalasInventario ;todavía tenemos balas en el inventario.
COPYFF fBalasPistola fBalasPistolaSumadas ;copiamos el valor de las balas en la pistola para realizar operación matemática.
ADD fBalasInventario fBalasPistolaSumadas ;sumamos las balas del inventario mas las balas que tenemos en pistola.
LT fBalasPistolaSumadas @fQuince ;comprobamos que el resultado de las balas sumadas sea menor a 15.
LET fBalasPistola @fBalasPistolaSumadas ;metemos todas las balas obtenidas de la suma de la pistola y el inventario. (ver más arriba)
SUB fQuince fBalasPistolaSumadas ; restamos a 15 las balas que metimos en la suma de las balas de la pistola mas las del inventario.
COPYFF fBalasInventario fBalasRecargadas ; copiamos el lo que exista en el inventario al otro flag. (fBalasRecargadas)
COPYFF fBalasPistolaSumadas fBalasInventario ;copiamos el valor el valor de la suma en el inventario.
WRITE "Recargas la pistola ingresando "
PRINT fBalasRecargadas ;imprimimos el número de balas que ingresamos (aquí es el producto final del truco de todas las operaciones matemáticas realizadas arriba)
WRITELN " balas en la recámara."
DONE
;Este bloque recargará balas cuando tengamos mas de 15 en el Inventario/riñonera.
RECARGAR PISTOLA
CARRIED oPistola ;comprobamos que la pistola esté llevada en inventario.
LT fBalasPistola 15 ;balas de la pistola menor que quince.
NOTZERO fBalasInventario ;tenemos balas en inventario/riñonera.
COPYFF fBalasPistola fBalasPistolaSumadas ;copiamos las balas que tenga la pistola en la recámara. Valor que usaremos más abajo para operación matemática.
ADD fBalasInventario fBalasPistolaSumadas ; sumamos las balas del inventario/riñonera a las balas que tubiésemos en la pistola.
GE fBalasPistolaSumadas @fQuince ;balas sumadas mayor o igual a quince.
COPYFF fQuince fBalasRecargadas ;copiamos 15 en el flg fBalasRecargadas, para más abajo realizar operación matemática.
MINUS fBalasRecargadas @fBalasPistola restamos de 15 las balas que hubiese en la pistola cargada.
LET fBalasPistola @fQuince ;truco, ponemos el flag con valor a 15, simulando que el cargador de la pistola tenga 15 balas en la recámara.
SUB fQuince fBalasPistolaSumadas ;restamos el valor del segundo flag al primero guardando el resultado en el segundo flag.
COPYFF fBalasPistolaSumadas fBalasInventario ;copiamos las balas quedantes al inventario.
WRITE "Recargas la pistola ingresando "
PRINT fBalasRecargadas ; resultado del truco de todas las operaciones matemáticas más arriba.
WRITELN " balas en la recámara."
DONE
; veremos cuantas balas hay en la pistola para usar el comando "disparar"
EXAMINAR PISTOLA
PRESENT oPistola
WRITE "La pistola tiene "
PRINT fBalasPistola
WRITELN " balas en la recámara."
DONE
; validamos si la pistola tiene 0 balas en la recámara cargadas.
DISPARAR _
CARRIED oPistola
ZERO fBalasPistola
WRITELN "No tienes balas en la pistola."
DONE
; vamos a usar las balas que tiene la pistola en la recámara, decrementamos.
DISPARAR _
CARRIED oPistola
NOTZERO fBalasPistola
MINUS fBalasPistola 1 ;aquí es donde hacemos el decremento de las balas que tenga la pistola en la recámara.
WRITELN "Disparas al aire gastando munición."
DONE
pro1:
bajo el AT 0 colocamos lo siguiente:
LET fQuince 15 ;para realizar los trucos matemáticos.
LET fBalasPistola 15 ;iniciamos la aventura con 15 balas en la pistola.
LET fBalasInventario 30 ;Iniciaremos la aventura con solo 30 balas en el inventario/riñonera.
Hasta otra!
