CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 16 Nov 2018 11:48

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 7 mensajes ] 
Autor Mensaje
NotaPublicado: 22 Dic 2004 23:31 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 13 Sep 2004 21:16
Mensajes: 604
Ubicación: Alginet - València
Quiero "emular" al pirata de la Aventura Original, que aleatoriamente aparecí­a y le robaba al jugador un objeto.

Para ello en Procesos 2 (que se ejecuta tras cada entrada introduzco el siguiente código):

_ _ atlt 18 ;si estamos en las localidades 17,18,19
atgt 14
chance 10 ;tenemos un 10% posibilidades de que aparezca el pirata
zero 87 ;si aun no hemos descubierto su guarida
write "¡De repente tras un recodo del camino aparece el malvado pirata!
"
let 89 1 ;el pirata nos está "robando"
doall 254 ;para todos los objetos cogidos ejecuta la siguiente instrucción

Aquí­ me salta a la Tabla de Respuestas, cuando yo creí­a que me debí­a seguir en la siguiente instrucción del mismo proceso...

_ _ eq 89 1 ;el pirata nos está robando
noteq @51 0 ;la vela no nos la puede robar
chance 10 ;tenemos un 10% posibilidades de que nos robe el objeto actual
let 89 2 ;si nos roba uno ya no nos puede robar más y se irá
write "¡El malvado pirata te roba _!
" ;informamos de que nos ha robado
place @51 22 ;y movemos el objeto a su guarida (localidad 22)
done

_ _ eq 89 1 ;si se trata de la vela (objeto 0) o no ha tenido exito el chance entrará aquí­
write "El chance para _ no ha tenido éxito!!
" ;esto lo pongo para probar
done

_ _ eq 89 2 ;aquí­ entrará si ha tenido éxito el chance (o sea, nos ha robado algo)
write "Tan rápidamente como vino el pirata desaparece del camino dejándote una extraña sensacion de deja vu.
"
clear 89 ;se acabó el robo
done

Si se da la condición de que nos roba algo no hay problema, nos informa de lo que nos roba, se lo lleva y sale el mensaje de que se larga...

El problema lo tengo si haciendo el "chance" para todos los objetos ninguno da positivo... entonces no se como decirle que la acción del robo se ha acabado y el pirata se va sin habernos robado nada... ¿hay alguna forma de saber cuándo se ha terminado el doall?

Es decir:
a) condición para que aparezca el pirata --> ok
b) si aparece el pirata:
- para cada objeto en poder del jugador (doall 254):
1) nos roba ese objeto?
Sí­ --> lo movemos a su guarida y termina el robo --> ok
No --> continuamos con el siguiente objeto
2) Si ha terminado con todos los objetos y no nos ha robado ninguno --> terminar robo

Es el punto 2 el que no consigo plasmar en código. ¿Alguna ayuda? ¿Me estoy complicando demasiado y hay otra forma más fácil de hacerlo?

Gracias.

_________________
Dwalin


Arriba
 Perfil  
 
NotaPublicado: 23 Dic 2004 11:38 
Desconectado
Momio
Momio
Avatar de Usuario

Registrado: 09 Mar 2004 16:14
Mensajes: 4628
Dwalin escribió:
Quiero "emular" al pirata de la Aventura Original, que aleatoriamente aparecí­a y le robaba al jugador un objeto.
que no consigo plasmar en código. ¿Alguna ayuda? ¿Me estoy complicando demasiado y hay otra forma más fácil de hacerlo?

Gracias.


Tengo que revisar lo de que el DOALL salte a la tabla de respuestas, pero mientras, decirte que usar el DOALL en el proceso 2 es poco menos que arriesgado, porque puedes solapar DOALLs cosa que esta prohibida (por ejemplo, si alguien hace un COGER TODO habra un DOALL y por cada objeto se ejecutará una orden de coger y se pasará por el proceso 2, donde se arrancará otro DOALL. Peligro peligro).

Opciones, la primera estructurar, pasar dichas rutinas a otro proceso, y la segunda, usar recursividad (que en PAW no se podia pero en Superglus sí­). La segunda ... usar txtpaws por lo mas sagrado :lol:


Parte de definiciones:

Código:
##define loc lInicial 0
##define loc lGuarida 1

##define flg fBucle 100
##define flg fContador_Robo 101
##define const ultimo_objeto 2



Objetos

Código:
/0
una antorcha
/1
una rata
/2
una hoz


Objetos[2]

Código:
/0    CARRIED        1        ANTORCHA        _         10000000000000000000000000000000 00000000000000000000000000000000
/1    CARRIED        1        RATA        _         00000000000000000000000000000000 00000000000000000000000000000000
/2    CARRIED        1        HOZ        _         00000000000000000000000000000000 00000000000000000000000000000000


Proceso 2

Código:
_ _
 AT 0 ; En otros casos seria ATGT y ATLT tal y cual
 WRITE "El malvado pirata aparece de entre las sombras."
 LET  fBucle 0
 LET  fContador_Robo 0
 PROCESS 3
 ZERO fContador_Robo
 WRITE "El pirata huye sin robarte nada.
"
_  _
 AT 0
 NOTZERO fContador_Robo
 WRITE "El pirata huye dejandote cierta sensacion de deja vu
"


Proceso 3

Código:

_        _
 GT fBucle ultimo_objeto 
 DONE               ; Si el bucle llegó a 3

; Aqui llegamos con un numero de objeto en fBucle
_        _
 CHANCE 10
 COPYFF fBucle 11
 WRITE "El pirata te roba #.
"
 PLUS fContador_Robo 1        ; Sumo 1 al contador de robos
 PLACE @fBucle lGuarida


_        _                ; Sumo 1 al bucle y vuelvo a llamar al proceso 3
 PLUS fBucle 1
 PROCESS 3


Con esto funciona, y ahora tengo un poco de prisa así­ que no lo voy a explicar más a fondo. Si tienes dudas, por favor, pregunta :)

_________________
Sígueme en twitter: @uto_dev
http://www.ngpaws.com


Arriba
 Perfil  
 
NotaPublicado: 23 Dic 2004 13:07 
Desconectado
Momio
Momio
Avatar de Usuario

Registrado: 09 Mar 2004 16:14
Mensajes: 4628
Ups! Me falta un CARRIED en el proceso 3:

Código:
_        _
 CHANCE 10
 CARRIED @fBucle
 COPYFF fBucle 11
 WRITE "El pirata te roba #.\n"
 PLUS fContador_Robo 1        ; Sumo 1 al contador de robos
 PLACE @fBucle lGuarida       



A ti incluso te faltaria un:

NOTEQ fBucle oVela

para evitar que roben la vela.

_________________
Sígueme en twitter: @uto_dev
http://www.ngpaws.com


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 24 Dic 2004 08:49 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 13 Sep 2004 21:16
Mensajes: 604
Ubicación: Alginet - València
Muchas gracias Uto. Me parece que ya lo he conseguido... aunque bueno... eso solo me lo dirá con seguridad un posible betatester de la aventura!

Ayer tras escribir el mensaje avancé un poco (eso creí­a yo!) y hoy tras leer el tuyo pues creo que lo he terminado, así­:

Flags:
- 88 --> "contador" del doall
- 89 --> si vale 1 es que estamos en el acto del robo, si vale 0 no lo estamos
- 90 --> si vale 0 es que todaví­a no nos ha robado nada (en esta aparición), si vale 1 es que ya nos ha robado un objeto.
- 73: guardará el total de objetos "cogidos" por el jugador.

El objeto 0 es la fuente de luz (vela) y no queremos que sea posible que le pirata nos la robe.


PROCESOS 2 (se ejecuta tras cada respuesta)

_ _ atlt 18 ;es decir se estamos en las localidades 15,16 o 17
atgt 14
chance 15 ;tenemos un 15% de posibilidades de que salga el pirata
zero 87 ; y aun no hemos descubierto su guarida (cuando la descubrimos ya no vuelve a salir)
write "¡De repente tras un recodo del camino aparece el malvado pirata!
"
let 89 1 ; comienza el robo
clear 88 ;ponemos el "contador" del doall a 0
clear 90 ;aun no nos ha robado nada
place 0 0 ;quitamos la vela de enmedio para que no estorbe (no queremos que el pirata nos la robe!)
objat 254 73 ;miramos a ver cuantos objetos tenemos cogidos en este momento
write "El número total de objetos cogidos es: "
print 73
newline
doall 254 ;para todos los objetos cogidos

Aquí­ salta a la Tabla de Respuestas, al principio de esta he puesto:

_ _ eq 89 1 ;estamos en pleno "intento" de robo
process 5
done

y en PROCESS 5:

_ _ plus 88 1 ;aumenta en 1 el contador del doall

_ _ zero 90 ;aun no nos ha robado nada en esta ocasión
notsame 88 73
write "Vamos a ver que pasa con el objeto: _
"
chance 20
write "Objeto: _ robado por el pirata!
"
let 90 1 ;el pirata nos ha robado snif snif
place @51 22


_ _ ;si entra aquí­ es que el chance no ha tenido éxito
zero 90
notsame 88 73
write "Objeto: _ no ha sido robado por el pirata.
"


_ _ same 88 73
notzero 90 ;y nos robó algo!
write "Estamos en el último objeto!
"
write "El pirata se marcha contento con su botí­n.
"
write "Se acabó la fiesta, el doall y todo.
"
place 0 254 ;le devolvemos la vela al jugador
clear 89
clear 88
done

_ _ same 88 73
write "Estamos en el último objeto!
"
zero 90 ;y no nos robó nada
write "El pirata se marcha un poco alicaido porqué no consiguió robarte nada.
"
write "Se acabó la fiesta, el doall y todo.
"
place 0 254 ;le devolvemos la vela al jugador
clear 89
clear 88
done

Cuestiones:
- No estoy utilizando txtPaws :oops: Es que empecé a trastear con el Superglús muy a lo loco... sin utilizar ni el write siquiera (message tal y mes tal) y después de tener programadas unas 10 o 12 localidades se me hací­a pesado ponerme a introducir definiciones y tal. Se que lo pagaré caro cuando aparezcan los bugs en el testeo... :cry:, pero bueno. Lo siento Baltasar! Para la próxima, ok??
- Pongo la llamada al doall en Procesos 2 porqué quiero que el pirata pueda aparecer en cualquier momento mientras permanezcamos en alguna de las localidades indicadas y se me ocurre que es aquí­ donde debo ponerlo... no se... en algún otro sitio. He probado a poner un COGER TODO y al menos aparentemente no se ha vuelto loco ni nada, a ver lo que pasa!
-Me sigue saltando de el DOALL 254 a la Tabla de Respuestas :?: De hecho si le pongo la misma entrada que pongo al principio de la Tabla de Respuestas tras la entrada del DOALL 254 pasa de mi.

Lo más gracioso (?) es que el pirata de marras no tiene ninguna importancia en la aventura, lo querí­a poner para dar ambiente y como homenaje a la Original... y ya ves lo por saco que me está dando.

Si a bote pronto ves observaras un fallo garrafal me avisas, vale? Tampoco pretendo que me estés corrigiendo el código (Dios me libre de querer darte más trabajo!), lo he puesto más que nada por curiosidad, ok?

Muchas gracias!

_________________
Dwalin


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 24 Dic 2004 09:27 
Desconectado
Momio
Momio
Avatar de Usuario

Registrado: 09 Mar 2004 16:14
Mensajes: 4628
Dwalin escribió:

Si a bote pronto ves observaras un fallo garrafal me avisas, vale? Tampoco pretendo que me estés corrigiendo el código (Dios me libre de querer darte más trabajo!), lo he puesto más que nada por curiosidad, ok?



Asi por encima no se ve ningun fallo, aunque estás 'parcheando' lo que evidentemente debe ser un fallo de DOALL, porque en las instrucciones dice clarisimo que seguirá por la siguiente instruccion, y si no lo hace algo anda mal.

Lo de que COGER TODO te funcione... pues supongo que será porque el DOALL no llama al proceso 2 tras cada iteracion, claro, y eso te libra.

Yo por la unica razon por la que lo pondrí­a de mi modo (aparte de que es es mas corto) es porque lo que estas haciendo es parchear como dije, y lo mismo si arreglo el DOALL tu aventura hace otra cosa al compilar en futuros Supergluses ;)

_________________
Sígueme en twitter: @uto_dev
http://www.ngpaws.com


Arriba
 Perfil  
 
 Asunto: Uso de txtPAWS
NotaPublicado: 27 Dic 2004 13:15 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 23 Abr 2004 08:49
Mensajes: 2909
Ubicación: España (Galicia)
Hola !

Citar:
- No estoy utilizando txtPaws Es que empecé a trastear con el Superglús muy a lo loco... sin utilizar ni el write siquiera (message tal y mes tal) y después de tener programadas unas 10 o 12 localidades se me hací­a pesado ponerme a introducir definiciones y tal.


Si tienes 30 segundos un dí­a de estos, me gustarí­a que revisaras la primera página del manual de txtPAWS. Si al llegar al final de la página no te has tirado de los pelos, entonces es que eres inasequible al desánimo.

Código:
/LTX
/1 = locCasa( casa.jpg )
Una casa verde en el bosque verde.
; ... más cosas
/OTX
/0 = objAntorcha
una antorcha
/1 = objRata
una rata
/2 = objHoz
una hoz


Esas son las costosas definiciones que tienes que poner. :?:
Es conveniente prefijarlas con "loc" para localidades, "obj" para objetos, "flg" para banderas, así­ no habrá confusiones.

Citar:
Se que lo pagaré caro cuando aparezcan los bugs en el testeo... , pero bueno. Lo siento Baltasar! Para la próxima, ok??


Yo lo siento por ti, por mi no te preocupes ... tú sigue con tu libreta (porque estarás anotando a qué cosa se corresponde cada flag, ¿no? [¡más te vale empezar si no lo has hecho!], cada localidad, cada objeto ...) ... como dije ya antes, no usar txtPAWS es como ver la tele, haciendo zapping frecuentemente, pero sin mando a distancia, levantándote para cambiar de canal de cada vez.

Salud !
[/code]

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
 Asunto: Uso de txtPAWS
NotaPublicado: 27 Dic 2004 13:15 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 23 Abr 2004 08:49
Mensajes: 2909
Ubicación: España (Galicia)
Hola !

Citar:
- No estoy utilizando txtPaws Es que empecé a trastear con el Superglús muy a lo loco... sin utilizar ni el write siquiera (message tal y mes tal) y después de tener programadas unas 10 o 12 localidades se me hací­a pesado ponerme a introducir definiciones y tal.


Si tienes 30 segundos un dí­a de estos, me gustarí­a que revisaras la primera página del manual de txtPAWS. Si al llegar al final de la página no te has tirado de los pelos, entonces es que eres inasequible al desánimo.

Código:
/LTX
/1 = locCasa( casa.jpg )
Una casa verde en el bosque verde.
; ... más cosas
/OTX
/0 = objAntorcha
una antorcha
/1 = objRata
una rata
/2 = objHoz
una hoz


Esas son las costosas definiciones que tienes que poner. :?:
Es conveniente prefijarlas con "loc" para localidades, "obj" para objetos, "flg" para banderas, así­ no habrá confusiones.

Citar:
Se que lo pagaré caro cuando aparezcan los bugs en el testeo... , pero bueno. Lo siento Baltasar! Para la próxima, ok??


Yo lo siento por ti, por mi no te preocupes ... tú sigue con tu libreta (porque estarás anotando a qué cosa se corresponde cada flag, ¿no? [¡más te vale empezar si no lo has hecho!], cada localidad, cada objeto ...) ... como dije ya antes, no usar txtPAWS es como ver la tele, haciendo zapping frecuentemente, pero sin mando a distancia, levantándote para cambiar de canal de cada vez.

Salud !

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 7 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 1 invitado


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