Oppure

Loading
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