Apparire in una posizione casuale compresa in un'area stabilita da me Più difficile...
#1
Inviato 17 June 2008 - 17:15
Non so se sia possibile, ma mi piacerebbe molto.
E' rimasto qualche valido programmatore in grado di risolvere questo enigma? :ph34r:
#2
Inviato 17 June 2008 - 18:18
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
#3
Inviato 17 June 2008 - 19:59
...
...
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
#4
Inviato 17 June 2008 - 20:14
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
#5
Inviato 17 June 2008 - 20:16
Comunque molto bravo. Ingegnoso come metodo :rulez:
#6
Inviato 18 June 2008 - 21:14
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: )
#7
Inviato 18 June 2008 - 21:46
(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
#8
Inviato 18 June 2008 - 21:48
Nobun, su Jun 18 2008, 22:14, detto:
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?
#9
Inviato 18 June 2008 - 21:58
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
#10
Inviato 18 June 2008 - 22:23
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.
#11
Inviato 18 June 2008 - 22:38
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
#12
Inviato 18 June 2008 - 22:47
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)
#13
Inviato 18 June 2008 - 23:08
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
#14
Inviato 18 June 2008 - 23:19
Quote
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
Vabbè, sto riempendo il topic di cazzate, ma ci provo.
#15
Inviato 18 June 2008 - 23:31
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.
#16
Inviato 18 June 2008 - 23:38
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
#17
Inviato 18 June 2008 - 23:42
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:
#19
Inviato 18 June 2008 - 23:47
Comunque mi divertono ste cose, anche se forse non sono ancora troppo bravo con questo genere di codici :D
#20
Inviato 18 June 2008 - 23:55
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:

Aiuto










