Forum MUGENATION: Apparire in una posizione casuale compresa in un'area stabilita da me - Forum MUGENATION

Salta al contenuto

  • 3 Pagine +
  • 1
  • 2
  • 3
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

Apparire in una posizione casuale compresa in un'area stabilita da me Più difficile...

#1 L   Menjoso 

  • Sensei
  • Gruppo: Membro Speciale
  • Messaggi: 3995
  • Iscritto: 16-August 07

  Inviato 17 June 2008 - 17:15

Mi servirebbe sapere se c'è un modo per far apparire un Proj/Explod in una posizione a caso ma in limiti di spazio stabiliti da me.

Non so se sia possibile, ma mi piacerebbe molto.

E' rimasto qualche valido programmatore in grado di risolvere questo enigma? :ph34r:
0

#2 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 17 June 2008 - 18:18

Sto fatto mi intriga, ci lavorerò un pò su, e poi ti farò sapere :)

a presto XD

Saluti

Squall


EDIT: ok, forse ho trovato una soluzione, le care vecchie varXD

dunque, supponiamo di settare una varrandom in questo modo:

[State 0, 0]
type = VarRandom
trigger1 = Time = [0,200]
v = 30
range = 50,150


e ancora

[State 0, 0]
type = VarRandom
trigger1 = Time = [0,200]
v = 31
range = 0,250


ora, nel nostro proiettile, possiamo delineare la loro posizione, in base a queste var:

offset = Var(30),Var(31)


In questo modo, l'asse X sarà delimitata dai valori [50,150], e l'asse Y dai valori [0,250]

ho sparato valori a ca**o, e var messe 30 e 31 in modo casuale.

Non ne sono sicuro, ma in questo modo dovrebbe funzionare (nell'explod, invece del comando offset, trovi il pos, ma dovrebbe essere la stessa cosa).

spero di esserti stato d'aiuto.

Saluti

Squall
0

#3 L   Menjoso 

  • Sensei
  • Gruppo: Membro Speciale
  • Messaggi: 3995
  • Iscritto: 16-August 07

Inviato 17 June 2008 - 19:59

Squall, purtroppo... non funziona :(

...

...

Scherzavo, va alla grande!!

Ecco come ho fatto:

[State 0, 0]
type = VarRandom
trigger1 = Time%5 = 0
v = 5
range = 50,150

[State 0, 0]
type = VarRandom
trigger1 = Time%5 = 0
v = 6
range = 0,-50

[State 0, Helper]
type = Helper
trigger1 = time%5 = 0
triggerall = time <= 200
helpertype = normal 
name = "..."
ID = 63159996305
stateno = 6315
pos = Var(5),Var(6)
postype = p1	
facing = 1
keyctrl = 0
ownpal = 1
supermove
pausemove


E ho ottenuto proprio quello che volevo.

Rulli un casino, grazieee :D XD

(E io che ho sempre detto che non valevi una cicca :rotfl: :rotfl: :rotfl: :rotfl: :rotfl:)

PS: Non rivelare su cosa lo utilizzerò, mi raccomando :P
0

#4 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 17 June 2008 - 20:14

mi hai fatto prendere un colpo, e la mia mente già vagava alla ricerca di nuove soluzioni XD

mi fa piacere... x questo ora io sono programmatore del tuo char (di nome), e tu il mio co-co(de)programmatore U_U
XDXDXD

Saluti

Squall
0

#5 L   Menjoso 

  • Sensei
  • Gruppo: Membro Speciale
  • Messaggi: 3995
  • Iscritto: 16-August 07

Inviato 17 June 2008 - 20:16

Adesso sei tu l'usurpatore XDXDXD

Comunque molto bravo. Ingegnoso come metodo :rulez:
0

#6 L   Nobun 

  • Horse Rider Skull Phantom. Rarely Here.
  • Gruppo: SuperModeratore
  • Messaggi: 4898
  • Iscritto: 11-July 04

Inviato 18 June 2008 - 21:14

comunque, lo si poteva fare senza scomodare alcuna var, sfruttando adeguatamente il trigger random (così come io faccio quando programmo una AI e devo decidere le probabilità di realizzazione di un colpo di AI... il principio è lo stesso).

PS Come al solito, bravo Squall :lol:

PS2: Il codice sarebbe stato questo (considerando che x deve produrre un valore da 50 a 150 ed y deve produrre un valore da 0 a - 50, e considerando che RANDOM produce un valore da 0 a 999).


pos = (51+(random/10)), (-1*((random%51)-1))

vediamo se capite questa formula PERCHE' l'ho scritta così (non l'ho testata, ma non dovrei aver fatto errori).
PATOS non può rispondere perché è troppo bravo :P
Devono indovinare Squall e Menjoso (soprattutto Menjoso che deve imparare... scherzo :rotfl: )
0

#7 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 18 June 2008 - 21:46

Dunque, prendiamo in esame la X:

(51+(random/10))

nel codice che hai fatto tu, la X può assumere un valore che varia da 51 (51 + 0/10) a 151(150,99) (51 + 999/10).

A meno che non ho capito male, sarebbe stato meglio utilizzare "50", anziché 51 :)

(-1*((random%51)-1))

qui, invece, varia da un valore minimo che è... qua è + tostoXD

allora... dunque, la forma %numero non mi è nuova, in quanto la utilizzo con time (es. (time%10), vuol dire ogni 10 ticks).
con il random non l'ho mai usato/visto, ma ragionando sul COSA serve, credo mi generi un numero DA 0 a 51.
Potrei sparare stronzate, ma la scienza va per tentativiXD
supponendo sia così. il valore massimo del random, che poi sarebbe il minimo dell'equazione, che può assumere è 51, però, meno 1 fa 50, *(-1) fa -50 :)
invece, il massimo dell'equazione è quando il random assume 0, e quindi 0 -1 = -1 * (-1) = 1

da -50 a 1.

nobun non tenermi sulle spine, dimmi se ho detto cazzate XD

Saluti

Squall
0

#8 L   Menjoso 

  • Sensei
  • Gruppo: Membro Speciale
  • Messaggi: 3995
  • Iscritto: 16-August 07

Inviato 18 June 2008 - 21:48

Visualizza MessaggiNobun, su Jun 18 2008, 22:14, detto:

PS2: Il codice sarebbe stato questo (considerando che x deve produrre un valore da 50 a 150 ed y deve produrre un valore da 0 a - 50, e considerando che RANDOM produce un valore da 0 a 999).
pos = (51+(random/10)), (-1*((random%51)-1))

vediamo se capite questa formula PERCHE' l'ho scritta così (non l'ho testata, ma non dovrei aver fatto errori).
PATOS non può rispondere perché è troppo bravo :P
Devono indovinare Squall e Menjoso (soprattutto Menjoso che deve imparare... scherzo :rotfl: )


Beh, ma è vero. Non sono ancora bravo come Squallido, però ci provo :rotfl:

Allora, non avendo mai formulato una espressione del genere non l'ho capita troppo. Ma vediamo se riesco:

X assume un valore che è il risultato di 51+999/un numero che varia casualmente da zero a 10?

Y invece è -1 * un valore a caso compreso tra 0 e 51, e poi -1?
0

#9 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 18 June 2008 - 21:58

Vorrei sottolineare che, nonostante si noti che le nostre risposte sono diverse, io e il Menjo abbiamo stretto un solenne patto di lealtà su una sfida costruttiva, tesa ad apprendere.
ergo, il secondo che postava, non avrebbe guardato il primo :) in questo modo si tentava di superare l'altro (in modo costruttivo), e di raggiungere la risposta esatta :)

(naturalmente non è una gara, non mi importa vincere, era solo x spronarci :D)

Saluti

Squall
0

#10 L   Nobun 

  • Horse Rider Skull Phantom. Rarely Here.
  • Gruppo: SuperModeratore
  • Messaggi: 4898
  • Iscritto: 11-July 04

Inviato 18 June 2008 - 22:23

In effetti, nella fretta, ho fatto un errore di approssimazione in entrambi i valori. Squall ha visto giusto. Del primo me ne ero accorto, ma ho potuto rispondere solo ora. Il secondo invece proprio mi è sfuggito. la formula corretta quindi diventerebbe

pos = (50+(random%101)),(-1*(random%51))

scusate, anch'io sbaglio quando vado di fretta 0:)

PER SQUALL....

se avessi invece scritto

50+(random/10)

non avrei potuto ottenere il valore di 150.

----

Ci siete vicinissimi... se il range è dato in 101 il valore prodotto è da 0 a 100... avevo messo un -1 di troppo frutto di una brutta abitudine da programmatore (quando si produce un valore random da 1 ad x bisogna infatti aggiungere un +1)...

Ma PERCHE' si fa un valore random da 0 a 100 con random%101 ? (visto che random restituisce un valore da 0 a 999)... guardate la risposta è molto semplice (così capite pure come funziona gametime%6) e la potete pure trovare agevolmente leggendo i tutorial.
0

#11 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 18 June 2008 - 22:38

Beh, avremmo ottenuto 149,9, che era più vicino a 150 di 150,9 XD
la mia mente era tutta a trovare la soluzione, non ci ho pensato a cambiare totalmente il codice, ho solo pensato a migliorare quello attuale, se ho capito beneXD

però, ora mi stai dicendo che random%N, mi da valori da 0 a (N-1), e non da 0 ad N... il perché? XD

Ora sparo una stupidaggine, ma davvero non so xkè non legga N compreso... l'unica cosa che mi viene da pensare è che una scrittura del genere : [0,100], matematicamente, ha le parentesi quadre chiuse, che stanno ad indicare la comprensione dei valori scritti, nel range.
è possibile (ma improbabileXD) che le parentesi tonde di (random%101), essendo tonde, valgano come la seguente scrittura matematica : ]0,101[, che nega la comprensione dei valori nel range... alcuni libri di matematica portano le parentesi tonde al posto delle quadre "aperte", quindi posso supporre che sia così, ma ne dubito fortemente XD

l'altra spiegazione che posso dare (peggiore della precedenteXD) è che l'helper logico "%" funziona così e basta XDXDXD

Saluti

Squall
0

#12 L   Nobun 

  • Horse Rider Skull Phantom. Rarely Here.
  • Gruppo: SuperModeratore
  • Messaggi: 4898
  • Iscritto: 11-July 04

Inviato 18 June 2008 - 22:47

Sbagliato :P

Comunque (come capita sempre in informatica) quando indicizzo un valore di contenimento, esso si intende espresso tra 0 e l'estremo massimo sottratto di 1.

Se in programmazione C faccio una matrice intera

int a[10];

io ho dato spazio ad una matrice di 10 interi con indice compresi da 0 a 9 (e non da 1 a 10).

----

Però, qui l'informatica non c'entra. C'è un ragionamento puramente matematico, se volete ve lo dico io, ma se non siete pigri trovate la risposta nei tutorial ufficiali elecbyte (non vi dico quale sennò è troppo facile, ma ci potete arrivare :lol:).
Comunque mi piacciono questi approcci. D'altronde anch'io dico sempre che la programmazione è innanzitutto ragionamento. Siete stati entrambi molto bravi. Mi compiaccio di voi.
(va bhe... non è che sia questa sorta di Guru onnipotente che può dare la sua benedizione... sono un programmatore Mugen di medio livello).

--------------

EDIT PER NON FARE CONFUSIONE.

La cosa non c'entra con i simboli [ ed ] usati in matematica (ed anche nel Mugen) per indicare un intervallo di valori.

Effettivamente, come dice squall, se io scrivo

x = [1,10]

significa che x assume un valore compreso tra 1 e 10 estremi compresi (sia 1 che 10)
0

#13 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 18 June 2008 - 23:08

Dunque, ho capito, o meglio, ho trovato la spiegazione.

il % è il RESTO della divisione X/Y

quindi, 20%2 = 0, se ho capito bene :)

Dunque, se prendo 101/101 il resto è 0, + 50 è 50 U_U valore minimo
se prendo invece 0/101 il resto è 101, + 50, 151, e siamo sempre lì, non capisco XD

Saluti

Squall
0

#14 L   Menjoso 

  • Sensei
  • Gruppo: Membro Speciale
  • Messaggi: 3995
  • Iscritto: 16-August 07

Inviato 18 June 2008 - 23:19

Quote

Però, qui l'informatica non c'entra. C'è un ragionamento puramente matematico, se volete ve lo dico io, ma se non siete pigri trovate la risposta nei tutorial ufficiali elecbyte (non vi dico quale sennò è troppo facile, ma ci potete arrivare ).


Ma forse, essendo un operatore di divisione, non si può dividere per 0, e quindi si comincia da 1 (?).

Ho trovato questo in un tutorial:

Quote

It is an error to use the % operator on float values, or to compute x%0. The result of such operations will be discussed in the section on SC values.


Vabbè, sto riempendo il topic di cazzate, ma ci provo.
0

#15 L   Nobun 

  • Horse Rider Skull Phantom. Rarely Here.
  • Gruppo: SuperModeratore
  • Messaggi: 4898
  • Iscritto: 11-July 04

Inviato 18 June 2008 - 23:31

No, non ti è sfuggito nulla, Squall, tranquillo! ;)

Si l'operatore % è sempre un operatore di divisione, ma a differenza di / non restituisce il risultato (quoto o quoziente) della divisione, ma il resto.

Quindi 55%50 mi produrrà come risultato 5 (55/50 = 1 con il resto di 5. E l'operatore percentuale mi restituirà per l'appunto 5 che è il valore di resto).

Se quindi opero una divisone su un gap di 51 valori posso produrre un resto che va da 0 (divisibile esattamente per 51) a 50 (che è il resto massimo, ovvero N-1).

Si potrebbe osservare che un metodo del genere (che è lo stesso concetto che sta dietro ad espressioni come ((gametime%5) = 0 ) non divide esattamente le probabilità per il range desiderato. Ma, in informatica, la generazione casuale dei numeri non è mai del tutto casuale e c'è sempre qualche forma di approssimazione che non fa rendere esattamente uguali tutte le probabilità (anche l'uso delle var con VarRandom non si sottrarrebbe a questa regola).

X Menjo... è ovvio che ad esempio 500%0 dia errore. Perché non è possibile calcolare il resto della divisione 500/0 (che essendo divisione per 0 è impossibile). Comunque una giusta osservazione ;)

PS scusatemi ma sto avendo grossi problemi di connessione.
0

#16 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 18 June 2008 - 23:38

Quindi era tutto esatto, solo che, essendo comunque informatica, devo considerare (N-1) XD

io non l'avevo considerato per questa ragione, xkè tu avevi detto che in questo caso non c'entrava l'essere informatico o meno, era solo ragionamento matematico XD

ps. notiamo il tuo apparire/svanire, ma non preoccuparti, fa nulla ;)

Saluti

Squall

ps2 sempre più divertenti ste coseXD
0

#17 L   Nobun 

  • Horse Rider Skull Phantom. Rarely Here.
  • Gruppo: SuperModeratore
  • Messaggi: 4898
  • Iscritto: 11-July 04

Inviato 18 June 2008 - 23:42

Infatti qui l'informatica non c'entra (che poi si basa su principi matematici... basti pensare che il sistema binario ha i valori 0 e 1, il sistema ottale da 0 a 7, il sistema decimale da 0 a 9, il sistema esadecimale da 0 a F)...

Perché in una divisione per 51 i 51 resti possibili sono da 0 a 50... se ci pensi è logico ed è una cosa puramente matematica. :rulez:
0

#18 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 18 June 2008 - 23:45

D'oh, è vero :D

matematica :rulez:

Saluti

Squall
0

#19 L   Menjoso 

  • Sensei
  • Gruppo: Membro Speciale
  • Messaggi: 3995
  • Iscritto: 16-August 07

Inviato 18 June 2008 - 23:47

No, matematica non rulez, io la odio XD

Comunque mi divertono ste cose, anche se forse non sono ancora troppo bravo con questo genere di codici :D
0

#20 L   PaToS 

  • Kohai
  • PuntoPunto
  • Gruppo: Membro
  • Messaggi: 117
  • Iscritto: 17-May 08

Inviato 18 June 2008 - 23:55

Bhè Menjo, mi sa che se te piacciono ste cose hai da fare pace con la matematica! Io per fare il codice della discussione sull'hyper (che comunque non so se funziona) sono prima dovuto risalire alla formula necessaria dalle equazioni del moto rettilineo uniformemente accelerato!! E non è stato affatto semplice!
Poi magari qualcuno mi smonta usando uno state che non conosco bene, ma vabbè!! E' bello anche questo!

PS: volevo partecipare anch'io ma ho visto ora la discussione!!
PSS: però sarei partito avvantaggiato, sapevo già del %! :rotfl: :rotfl:
0

Condividi questa discussione:


  • 3 Pagine +
  • 1
  • 2
  • 3
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

2 utenti stanno leggendo questa discussione
0 utenti, 2 ospiti, 0 utenti anonimi