18/06/14 3:24
Shark
public sub CPUgaming
CPUplay = dstr.Next(1, 3)
Select Case CPUplay
Case 1
if label3.Visible =True then
Else
CPUgaming() <<---------- se la label è nascosta ripeti la sub da capo..
End if
Case 2
UGUALE MA CON LABEL SUCCESSIVA
end select
end sub
mi da, quando deve fare l'operazione "CPUgaming" :
Impossibile intercettare l'eccezione. Il programma in debug non può proseguire e le espressioni non possono essere valutate.
System.StackOverflowException
non ho trovato nulla su internet ne inglese ne italiano,
perfavore oltre ai link che sicuro mi arriveranno, scrivetemi il comando/procedura direttamente please, giuro i link li vado a vedere!
Ultima modifica effettuata da Shark 18/06/14 3:25
aaa
18/06/14 5:39
mattia1481
L'eccezione System.StackOverflowException si verifica poiché nella tua procedura viene a mancare la condizione che ne permette l'uscita, praticamente va in loop.
aaa
18/06/14 8:37
nessuno
Il problema è che non ha senso, in questo caso, eseguire la funzione da sè stessa.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
18/06/14 11:43
Shark
perchè non ha senso? il numero di casi è gestito random, nel caso (come da esempio) il caso fosse 2, e la label nascosta riparta da capo, dove magari fa 1, la label è visibile e ci fa su le sue operazioni...
aaa
18/06/14 11:51
nessuno
Allora ... cerca di chiarire il problema più generale perché la chiamata ricorsiva di una funzione è utilizzata per scopi specifici e segue regole precise.
Non si applica a tutto e magari non a quello che vorresti fare tu.
Quindi, spiega il perché ti serve la ricorsione ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
18/06/14 13:57
Shark
ok allora, ci sono tot label visibili con dei valori all'interno,(che si nascondono e prendono valore zero se il numero all'interno è < 0) il computer deve scegliere una label e sottrargli un valore random da uno a label.text.
io ho provato con il comando select case, dove in base a un numero random da uno al totale delle caselle visibili, fa: SE la casella è visibile sottraile un numero da uno a label.text
volevo mettere appunto un else che nel caso in cui la label non sia visibile rifacesse partire la procedura sopra descritta...
aaa
18/06/14 14:22
nessuno
E non si fa così ! Hai usato la ricorsione al posto di un ciclo (come pensavo) ... ed è un grave errore ...
All'interno della funzione devi usare un ciclo che ripeta quello che vuoi fare sulla label da cui esci solo se l'operazione è stata fatta su una label visibile.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
18/06/14 18:04
Shark
Grazie mille! ho risolto così!
Dim arrai As Integer()
arrai = New Integer (11) {a1, b1, c1, d1, k1, f1, g1, h1, i1, l1, m1, n1}
For Each valore In arrai
if label3.Visible =True then
a1 -=(chgrnd.Next(1, a1+1))
Label3.text = CStr(a1)
If label3.text <= 0 Then
label3.hide
Label3.text = 0
tot -=1
End If
exit For
End if
if label4.Visible =True then
b1 -=(chgrnd.Next(1, b1+1))
Label4.text = CStr(b1)
If label4.text <= 0 Then
label4.hide
Label4.text = 0
tot -=1
End If
exit For
End if
If label5.Visible = True Then
c1 -=(chgrnd.Next(1, c1+1))
Label5.text = CStr(c1)
If label5.text <= 0 Then
label5.hide
label5.Text = 0
tot -=1
End If
exit For
End If
e così via fino all'ultima label
ultima quest, ma se volessi fare in modo che la la scelta della label su cui agire fosse casuale?
aaa