CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 13 Dic 2017 21:58

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 3 mensajes ] 
Autor Mensaje
NotaPublicado: 16 Oct 2016 07:12 
Desconectado
Archivero
Archivero

Registrado: 05 Abr 2014 17:40
Mensajes: 264
Saludos. Espero que todo vaya bien.
De nuevo por aquí luego de fallos técnicos en la compatibilidad de lectores y Superglús.

Tengo esta rutina que no logro concretar. La misma es para poder recargar y disparar un arma de fuego almacenando en X flag la cantidad de balas para repartir entre las armas.
Aquí tengo dos armas: una pistola y una escopeta. El fallo es que al cargar la pistola (18) balas, la escopeta también se recarga. Ocurre lo mismo si recargo la escopeta (5) balas, la pistola se recarga (con mismo número de balas) si la escopeta necesita 5 balas, al recargar la pistola con 18 balas, la escopeta se recarga sola con 18 balas.

¿Cómo lo sé? Al recargar la pistola, sale el mensaje de que la he cargado y si intento recargar la escopeta, dice que ya está cargada (cuando ambas armas comienzan el juego descargadas).
No encuentro cómo hacer (solucionar) que solo el arma referenciada se cargue y la otra no, descontando las balas necesarias para esa arma dejando las balas necesarias para la otra arma.
De esta manera intento ahorrar una gran cantidad de banderas no teniendo que utilizar como 4 banderas por arma. Una para ver si está cargada, otra para ver si hay munición disponible ETC llamando cada flas por el nombre del arma: fPistolaCargada, fBalasPistola, fEscopetaCargada, fFusilCargado, fRevolverCargado ETC.

Esta es la rutina que funciona a medias faltando eso, que (no se recarguen) todas las armas a la misma vez.
Objetos.
Código:
/0 = objPistola
una pistola
/1 = objEscopeta
una escopeta


Objetos 2.
Código:
/0 CARRIED 1 PISTOLA _ ATTR aWeapon
/1 CARRIED 2 ESCOPETA _ ATTR aWeapon


Proceso 1.
Código:
; Inicializar banderas.

_ _
AT 0
LET fArmaEquipada 255
LET fNombreArmaEquipada 255
LET fMunicion 23; 18 balas para la pistola y 5 balas para la escopeta (solo de prueba. Más adelante si se soluciona se definirán muchas más balas)
ANYKEY
GOTO 2
DESC


Tabla de respuestas.
Código:
; Recargar el armamento.

RECARGAR _
COPYFF fArmaEquipada fArma; Guardo el nombre del arma que quiero consultar en el flag sArma
PROCESS 3
DONE

; Disparar el armamento.

DISPARAR _
COPYFF fArmaEquipada fArma; Guardo el nombre del arma que quiero consultar en el flag sArma
PROCESS 4
DONE


Proceso 3.
Código:
; Recargar el armamento.

; Pistola.
_ _
CARRIED objPistola
EQ fArma 0; Arma objeto número 0
ZERO fArmaCargada; El arma está descargada
NOTZERO fMunicion; Tenemos munición
WRITELN "Introduces un cargador con 18 balas en la pistola."
MINUS fMunicion 18; Restar 18 balas a la munición
PLUS fArmaCargada 18; Recargar 18 balas
DONE

_ _
CARRIED objPistola
EQ fArma 0; Arma objeto número 0
ZERO fArmaCargada; El arma está descargada
ZERO fMunicion; No tenemos munición
WRITELN "No tienes munición para la pistola."
DONE

_ _
CARRIED objPistola
EQ fArma 0; Arma objeto número 0
NOTZERO fArmaCargada; El arma está cargada
WRITELN "La pistola ya está cargada."
DONE

; Escopeta.
_ _
CARRIED objEscopeta
EQ fArma 1; Arma objeto número 1
ZERO fArmaCargada; El arma está descargada
NOTZERO fMunicion; Tenemos munición
WRITELN "Introduces 5 cartuchos en la corredera de la escopeta."
MINUS fMunicion 5; Restar 5 balas a la munición
PLUS fArmaCargada 5; Recargar 5 balas
DONE

_ _
CARRIED objEscopeta
EQ fArma 1; Arma objeto número 1
ZERO fArmaCargada; El arma está descargada
ZERO fMunicion; No tenemos munición
WRITELN "No tienes munición para la escopeta."
DONE

_ _
CARRIED objEscopeta
EQ fArma 1; Arma objeto número 1
NOTZERO fArmaCargada; El arma está cargada
WRITELN "La escopeta ya está cargada."
DONE


Proceso 4.
Código:
; Disparar el armamento.

; Pistola.
_ _
CARRIED objPistola
EQ fArma 0; Arma objeto número 0
NOTZERO fArmaCargada; El arma está cargada
WRITELN "Disparas la pistola desperdiciando munición."
MINUS fArmaCargada 1; Restar una bala de la carga del arma
DONE

_ _
CARRIED objPistola
EQ fArma 0; Arma objeto número 0
ZERO fArmaCargada; El arma está descargada
WRITELN "La pistola está descargada."
DONE

; Escopeta.
_ _
CARRIED objEscopeta
EQ fArma 1; Arma objeto número 1
NOTZERO fArmaCargada; El arma está cargada
WRITELN "Disparas la escopeta desperdiciando munición."
MINUS fArmaCargada 1; Restar una bala de la carga del arma
DONE

_ _
CARRIED objEscopeta
EQ fArma 1; Arma objeto número 1
ZERO fArmaCargada; El arma está descargada
WRITELN "La escopeta está descargada."
DONE


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


Arriba
 Perfil  
 
NotaPublicado: 16 Oct 2016 15:28 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1855
El testigo escribió:
De esta manera intento ahorrar una gran cantidad de banderas no teniendo que utilizar como 4 banderas por arma.

No creo que te puedas ahorrar usar flags por arma, especialmente el que guarda el número de balas cargadas, salvo que en el juego se den circunstancias concretas que según tu explicación no se dan. Por ejemplo, que el jugador no tuviera acceso a más de un arma a la vez.

¿Tan apurado estás de flags que ya estás pensando en optimizar su uso? Yo no pensaría en ello hasta realmente toparme con la limitación.

Hay un dicho en el mundillo de la programación: «La optimización prematura es la raíz de todos los males»

Si necesitases ahorrar algún flag, quizás podrías no crear el que indica si cada arma está cargada o descargada, porque creo que podrás saberlo consultando el número de balas del arma: si no hay cero es que tiene alguna y, por lo tanto, está cargada.


Arriba
 Perfil  
 
NotaPublicado: 16 Oct 2016 19:39 
Desconectado
Elfito
Elfito

Registrado: 17 Ago 2010 18:27
Mensajes: 24
Tambien creo te podrias ahorrar la bandera que almacena el nombre del arma equipada. Usando directamente sus referencias como objetos podrias comprobar cuales llevas y cuales no (CARRIED) si importar su nombre. Que Cual es cual, ya lo distingues en la tabla de nombres de objetos y teniendo cada uno un numero creo que es mas sencillo.


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 3 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

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


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM