Newsgroup: it.comp.giochi.avventure.testuali
Titolo: I7 - spostare un pg nella room "più distante"

Ok, arrivo anch'io con un quesito:
 
Ho creato un pg. Senza entrare nei particolari... egli si muove in autonomia nella mappa di gioco. Ma quando capita che si trovi nella stessa location del giocatore, devo far si che data una certa circostanza, questo pg si "trasferisca" nella location più distante da quella del giocatore, facendogli poi riprendere il suo girovagare random.
 
Per adesso le mie conoscenze sulle meccaniche di movimento dei pg sono: Muoversi a random nella mappa, seguire il giocatore, spostarsi nella location adiacente a quella del giocatore. Ma se capissi come fare ciò di cui sopra sarebbe fantastico...
 
Grazie a tutti in anticipo ;)

 poi riprendere il suo girovagare random.
 
Il codice dipende dalla circostanza. Se questa circostanza fosse innescata da un'azione del giocatore si potrebbe procedere come puoi vedere più sotto. Questa soluzione, però, mi sembra troppo semplice, visto quello che sei già riuscito a fare, perciò attendo precisazioni sulla circostanza.
 
In ogni caso, ecco il codice più semplice "azionato" da un'azione:
 
 
Include Italian Language by Massimo Stella.
 
The Radura is a room. "Un[']ampia radura. A nord c[']è il bosco."
The Bosco is a room. It is north of the Radura.
 
The anello is a wearable thing in the Radura.
 
Instead of taking the anello:
	if the location of the player is the Radura:
		say "Provi a prendere l[']anello, ma questo sparisce. Che sia riapparso nel bosco?";
		now the anello is in the Bosco;
	otherwise:
		continue the action;
 
Test me with "prendi l'anello / guarda / n / prendi l'anello / i / indossa l'anello / i / s / lascia l'anello / prendi l'anello".

 In ogni caso, ecco il codice più semplice "azionato" da un'azione...
 
Oops! Mi sembrava troppo facile! Mi sono accorto adesso che il problema era trovare la stanza "più distante".
 
Ci penso e ci riprovo.
 
Comunque la definizione di stanza "più distante" dipende anche da quanto è distante una stanza dall'altra. In mancanza di altre indicazioni, formulo l'ipotesi che le connessioni abbiano tutte la stessa lunghezza.

 Il giorno venerdì 27 giugno 2014 19:52:11 UTC+2, Leonardo Boselli ha scritto: > > In ogni caso, ecco il codice più semplice "azionato" da un'azione... Oops! Mi sembrava troppo facile! Mi sono accorto adesso che il problema era trovare la stanza "più distante". Ci penso e ci riprovo. Comunque la definizione di stanza "più distante" dipende anche da quanto è distante una stanza dall'altra. In mancanza di altre indicazioni, formulo l'ipotesi che le connessioni abbiano tutte la stessa lunghezza.
 
Non preoccuparti. In effetti mi rendo conto che la soluzione non è assolutamente così scontata e, forse, pure un pò atipica. Tanto che anche per me è difficile spiegare cosa ho in mente! :)
 
Preciso che "pg" non è corretto. PNG è corretto, dato che il personaggio che voglio far spostare nella mappa non è il giocatore. Facciamo finta di avere cinque rooms: 
Bosco1 is a room. Bosco2 is north of Bosco1. Bosco3 is north of Bosco2. Bosco4 is north-east of Bosco3. Bosco5 is northwest of Bosco3.
 
Adesso...il giocatore si trova in Bosco1. Il PNG, nel suo girare a random nella mappa, lo raggiunge nella medesima location. A questo punto se il giocatore, ad esempio, cambia stanza, il PNG scompare e riappare in Bosco4 OPPURE in Bosco5, che sono le due stanze più distanti da Bosco1, ovvero da dove si trovava prima. E' questo quello che ho in mente. Il problema è che spulciando il manuale e altre docs non ho trovato nulla che possa aiutarmi. Forse devo giocarte con i comparativi, purtroppo io non speak english very bene :)

Provo a stendere un ipotetico codice di come potrebbe funzionare, omettendo la stringa sconosciuta... 
Bosco 1 is a room. 
Bosco 2 is North of Bosco 1.
Bosco 3 is north of Bosco 2.
Bosco 4 is northeast of Bosco 3.
Bosco 5 is northwest of Bosco 3.
 
The Player is in Bosco 1.
Tizio is a man in Bosco 1. 
 
Instead of going:
        If Tizio is in The location of the Player:
                    Move tizio NELLA ROOM PIÙ DISTANTE;
        otherwise:
                    Continue the Action. 
 
La parte in italiano dovrebbe essere sostituita dalla stringa magica che muove il meccanismo. 
Scusate le maiuscole ma sono con il cellulare.

 Provo a stendere un ipotetico codice di come potrebbe funzionare, omettendo la stringa sconosciuta... 
 
Ho in mente una possibile soluzione generale che, appena avrò un po' di tempo, proverò a scrivere. Comunque se conosci la struttura delle stanze, sai già dall'inizio, per ogni stanza, qual è la più distante, perciò potresti aggiungere una proprietà a ogni stanza in cui memorizzare la stanza più distante per poi richiamarla quando serve.
 
La soluzione più generale richiede una ricerca sulle stanze, ma è preferibile perché non ti costringerebbe a ricalcolare le stanze più distanti nel caso ci fossero modifiche sostanziali alla mappa.

L'impostazione potrebbe essere tipo questa. Ora manca "solo" il codice per decidere qual è la stanza più distante dalla "location":
 
Include Italian Language by Massimo Stella.
 
Bosco 1 is a room.
Bosco 2 is north of Bosco 1.
Bosco 3 is north of Bosco 2.
Bosco 4 is northeast of Bosco 3.
Bosco 5 is northwest of Bosco 3.
 
The anello is a wearable thing in Bosco 1.
 
Instead of taking the anello:
		let s be the most distant room;
		say "Provi a prendere l[']oggetto, ma questo sparisce. Che sia riapparso [inp the s]?";
		now the anello is in s;
 
To decide which room is the most distant room:
	decide on Bosco 3;

Ecco! Più tardi provo a mettere in una lista tutte le stanze alla stessa distanza e ne estraggo una a caso. Se non posto la soluzione prima di mezzanotte... significherà che ti ho lasciato quel codice come esercizio ;)
-----
 
Include Italian Language by Massimo Stella.
 
Bosco 1 is a room.
Bosco 2 is north of Bosco 1.
Bosco 3 is north of Bosco 2.
Bosco 4 is northeast of Bosco 3.
Bosco 5 is northwest of Bosco 3.
 
The anello is a wearable thing in Bosco 1.
 
Instead of taking the anello:
		let s be the most distant room;
		say "Provi a prendere l[']oggetto, ma questo sparisce. Che sia riapparso [inp the s]?";
		now the anello is in s;
 
To decide which room is the most distant room:
	let found be location of player;
	let maxdist be 0;
	repeat with r running through rooms:
		let dist be the number of moves from location of player to r;
		if maxdist is less than dist:
			now maxdist is dist;
			now found is r;
	decide on found.
 
Test me with "prendi anello / n / n / ne / prendi anello"

Accidenti... Mi inchino :)  purtroppo adesso sono a lavoro e non posso provare... Ma appena riesco a metterci le mani ti so dire! Grazie! 

 Accidenti... Mi inchino :)  purtroppo adesso sono a lavoro e non posso provare... Ma appena riesco a metterci le mani ti so dire! Grazie!
 
Fammi sapere se funziona secondo le tue esigenze. Ecco la modifica per scegliere a caso tra le stanze più distanti:
 
------
Include Italian Language by Massimo Stella.
 
Bosco 1 is a room.
Bosco 2 is north of Bosco 1.
Bosco 3 is north of Bosco 2.
Bosco 4 is northeast of Bosco 3.
Bosco 5 is northwest of Bosco 3.
Bosco 6 is north of Bosco 3.
 
The anello is a wearable thing in Bosco 1.
 
Instead of taking the anello:
		let s be the most distant room;
		say "Provi a prendere l[']anello, ma questo sparisce. Che sia riapparso [inp the s]?";
		now the anello is in s;
 
To decide which room is the most distant room:
	let found be a list of rooms;
	let maxdist be 0;
	repeat with r running through rooms:
		let dist be the number of moves from location of player to r;
		if maxdist is less than dist:
			now maxdist is dist;
			now found is {};
			add r to found;
		otherwise if maxdist is dist:
			add r to found;
	sort found in random order;
	decide on entry 1 of found.


prendi anello
Provi a prendere l'oggetto, ma questo sparisce. Che sia riapparso nel Bosco1?
--------------------
 
Sembra che l'anello rimanga sempre nella location "Bosco1", quindi non si sposta in una delle room più distanti..vediamo se riesco a capire cosa non va, anche se ti confesso che questo tipo di codice va un po' oltre le mie conoscenze! Se anche tu hai qualche idea di dove sia l'inghippo... you're welcome!

 Sembra che l'anello rimanga sempre nella location "Bosco1"...
 
Tutto ciò è molto strano. A me funziona. Appena possibile controllerò il codice che ho postato, ma se l'hai copia-incollato correttamente dovrebbe funzionare.
 
Hai provato anche la versione "non random"?


Mmmh... tu stai usando Italian language by Massimo Stella... mi viene il sospetto che stiamo lavorando su due versioni differenti di Inform. Io sto usando le tue librerie "Italian by Leonardo Boselli (cioè quelle di Massimo riviste da te).
 
Ho provato anche la versione non random, in quel caso l'anello non si sposta nella stanza più lontana, ma in quella adiacente (Bosco2)

 "Italian by Leonardo Boselli (cioè quelle di Massimo riviste da te).
 
Aaah! Io sto usando "Italian Language" di Massimo Stella sul nuovo Inform 7 (la release 6L02). Non ho più la vecchia versione installata, perciò non ti so dire cosa dovresti cambiare sulla versione 6G60 che, probabilmente, stai usando tu.
Se non ci sono errori in compilazione, le frasi che ho usato non dovrebbero essere molto diverse e, con qualche piccolo aggiustamento, potrebbero funzionare.
 
Comunque, se usi solo l'estensione "Italian" e il codice che hai scritto finora non è tantissimo, ti conviene provare la nuova versione. C'è un nuovo "Italian Language" e ho già tradotto parecchie estensioni inglesi tra le più utili. Tuttavia, se hai già scritto molto codice, ti conviene finire il tuo gioco con la 6G60, perché i cambiamenti da apportare al codice esistente possono errere parecchi.
 
Fammi sapere se riesci ad apportare le modifiche da solo, in caso contrario potrei reinstallare la 6G60 per scoprire cosa c'è che non va.


Scusa il ritardo, purtroppo ora mi devo concentrare per gli orali che ho lunedì, sono un maturando ritardatario :) appena finita sta rogna mi butto sulla nuova versione e vediamo. In effetti da poco ho aggiunto due estensioni ad uno dei miei progetti: Multiple Sound e StartEnd...comunque faccio sicuramente una prova!