Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-06-2009, 14:56   #1
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
[VB.NET] Generare numeri casuali a scorrimento

Salve a tutti!!vorrei sapere se in visual basic.net è possibile creare ,ad esempio in una textobox, un effetto di scorrimento di numeri casuali dall'alto verso il basso, stile slot machine!grazie a tutti!attendo risposta!
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2009, 15:49   #2
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
divide et impera!

scomponi il problema in sottoproblemi meno complessi:

1) generare numeri casuali
2) realizzare effetto slot machine

Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2009, 15:53   #3
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
ma l'effetto slot come si realizza??
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2009, 16:38   #4
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Puoi usare le GDI+, oppure con un po' di "furbizia" alcuni controlli standard, come picturebox e labels ( giocando sulla disposizione in primo piano e sullo sfondo... ). In più, sicuramente uno o più Timers, per regolare l'effetto di movimento ( con accelerazioni / decelerazioni )... Insomma, una bella divertita.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2009, 16:58   #5
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
Il problema che sono all'inizio con il vb.net, non saprei proprio da dove partire...primo piano, sfondo, accelerazioni ,decelerazioni...come fare?
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2009, 18:44   #6
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da ozzy19 Guarda i messaggi
Il problema che sono all'inizio con il vb.net, non saprei proprio da dove partire...primo piano, sfondo, accelerazioni ,decelerazioni...come fare?
Allora è un ottimo modo per iniziare a farsi le ossa con le Forms, i controlli, i Timer ecc... Forza e coraggio !
Comunque non è una cosa certo "elementare". Che tu sia un neofita o sviluppatore senior, per realizzarla bisogna prima pensarla bene, oltretutto possono esserci molte strade possibili, non è una procedura "guidata", come inserire un record in un DB...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2009, 21:17   #7
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da ozzy19 Guarda i messaggi
Salve a tutti!!vorrei sapere se in visual basic.net è possibile creare ,ad esempio in una textobox, un effetto di scorrimento di numeri casuali dall'alto verso il basso, stile slot machine!grazie a tutti!attendo risposta!
Ripensandoci ( ci stavo giusto giochicchiando ), con una TextBox la vedrei dura ( e poi bruttino da vedersi ).
Ce la si può fare con : 1 Panel / N Labels ( o meglio controlli personalizzati ) / 1 Timer per "ruota"... Perciò a monte il mio precedente consiglio su GDI+ ( che è cmq sempre una valida alternativa ) o gestione dello ZOrder ( porta in primo piano, porta in secondo piano )...

Ultima modifica di MarcoGG : 22-06-2009 alle 21:23.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2010, 17:46   #8
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Riporto in alto questa discussione, perchè si da il caso che abbia appena realizzato per altri scopi qualcosa di utile e "divertente". Almeno lo è per me.

Un mio generatore un po' avanzato di numeri interi casuali,
con un funzionamento "accattivante", stile Slot-Machine, o Video-Poker se preferite :

1. Descrizione :
Il progetto è di tipo Windows Forms, e le Classi essenziali
alla compilazione sono le seguenti :
- Casella.vb : Controllo UserControl ( Controllo Utente ).
- Ruota.vb : Controllo UserControl ( Controllo Utente ).
- ModuloPublics.vb : Modulo.
- FormMain.vb : Form ( Form di avvio ).

Ho incluso nelle immagini che seguono le proprietà che è utile impostare a Design affinchè il progetto possa essere riprodotto fedelmente.

2. Casella.vb :
E' l'elemento base. Ogni Ruota può contenere N Oggetti Casella.
Nel presente progetto ho limitato N in modo opportuno :
- N minimo = 2 ( per ovvi motivi ).
- N massimo = 10 ( da 0 a 9 ).

La struttura di Casella è semplice :


- lbl_valore : Label.

Codice per Casella.vb :
Codice:
Public Class Casella

    'Dimensioni Fisse
    Private m_w As Integer = 200
    Private m_h As Integer = 200

    Private m_valore As Integer

    Public Property valore() As Integer
        Get
            Return m_valore
        End Get
        Set(ByVal value As Integer)
            m_valore = value
            Me.lbl_valore.Text = m_valore
        End Set
    End Property

    Protected Overrides Sub SetBoundsCore(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal specified As System.Windows.Forms.BoundsSpecified)

        MyBase.SetBoundsCore(x, y, m_w, m_h, specified)

    End Sub

End Class
3. Ruota.vb :
La Ruota è la Classe centrale del progetto. Provvede a caricare le caselle, a farle girare e a generare i valori casuali. Così come per Casella.vb, le dimensioni di Ruota non possono essere decise a casaccio, perciò per semplicità anche in questo caso sono bloccate.
In teoria sarebbe stato più corretto includere Casella in Ruota, come Inner Class ( o Nested Class... ), dal momento che Casella non ha alcuno scopo senza Ruota, ecc... ecc...
Perciò lo scrivo chiaramente una volta sola : ho volutamente evitato di spingermi troppo in là nell'ottimizzazione, allo scopo di rendere il codice più separato e lineare, e quindi comprensibile anche a chi non ha grande dimestichezza con l'approccio OOP di VB.NET.

Nella prossima immagine descrivo l'aspetto generale di una FormMain tipica, con 3 Ruote.
Nell'immagine ho incluso la descrizione dei componenti e proprietà essenziali di Ruota.vb.
- lbl_numruota : Label.
- nup_numcaselle : NumericUpDown.
- cmb_velocitàruota : ComboBox.
- pnl_ruota : Panel.
- cmd_start : Button.
e tmr_ruota, il controllo Timer da aggiungere a Ruota.vb in Design.

( Ammetto di avere un uso abbastanza personale della cosiddetta "notazione ungherese", ma sono abitudini dure da sradicare... )



Codice per Ruota.vb :
Codice:
Public Class Ruota

    'Membri Interni N.A.
    Private m_w As Integer = 240 'Dimensioni Fisse
    Private m_h As Integer = 240 'Dimensioni Fisse
    Private m_tmrTicks As Integer = 0
    Private m_speedMin As Integer = 80
    Private m_speedMax As Integer = 120
    Private m_speed As Integer = 0
    Private m_scarto As Integer = 0

    'Membri Interni Property
    Private m_numCaselleRuota As Integer = 10
    Private m_inGiocoRuota As Boolean = False
    Private m_esitoRuota As Integer = 0
    Private m_numRuota As Integer = 0
    Private m_velocitàRuota As Integer = 20

    Public Property NumCaselleRuota() As Integer
        Get
            Return m_numCaselleRuota
        End Get
        Set(ByVal value As Integer)
            If value < 2 Then
                m_numCaselleRuota = 2
            Else
                m_numCaselleRuota = value
            End If
            Me.ResetRuota()
        End Set
    End Property

    Public ReadOnly Property InGiocoRuota() As Boolean
        Get
            Return m_inGiocoRuota
        End Get
    End Property

    Public ReadOnly Property EsitoRuota() As Integer
        Get
            Return m_esitoRuota
        End Get
    End Property

    Public Property NumRuota() As Integer
        Get
            Return m_numRuota
        End Get
        Set(ByVal value As Integer)
            m_numRuota = value
            Me.lbl_numruota.Text = m_numRuota
        End Set
    End Property

    Public Property VelocitàRuota() As Integer
        Get
            Return m_velocitàRuota
        End Get
        Set(ByVal value As Integer)
            If value <= 0 Then
                m_velocitàRuota = 20
            Else
                m_velocitàRuota = value
            End If
            Me.tmr_ruota.Interval = m_velocitàRuota
        End Set
    End Property

    Protected Overrides Sub SetBoundsCore(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal specified As System.Windows.Forms.BoundsSpecified)

        MyBase.SetBoundsCore(x, y, m_w, m_h, specified)

    End Sub

    Private Sub ResetRuota()

        Me.pnl_ruota.BackColor = Color.Black
        Me.pnl_ruota.Controls.Clear()
        For i As Integer = 1 To m_numCaselleRuota
            Dim C As New Casella
            C.valore = i - 1
            Me.pnl_ruota.Controls.Add(C)
            C.Left = 10
            C.Top = (1 - i) * C.Height
        Next

    End Sub

    Public Sub Start()

        'Normalizzazione valori per SeedX Random
        Dim nr As Integer = m_numRuota * 99
        Dim ttcks As Integer = Convert.ToInt32(m_tmrTicks.ToString.PadRight(3, "9"))
        Dim er As Integer = m_esitoRuota * 99
        Dim mox As Integer = Cursor.Position.X
        Dim moy As Integer = Cursor.Position.Y

        Dim sxs As Integer = nr + er + ttcks + mox + moy

        m_speed = RandomizzaIntero(m_speedMin, m_speedMax, sxs)
        m_inGiocoRuota = True

        Me.pnl_ruota.BackColor = Color.Black
        Me.tmr_ruota.Enabled = True

    End Sub

    Private Sub tmr_ruota_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmr_ruota.Tick

        If m_tmrTicks = 999 Then
            m_tmrTicks = 1
        Else
            m_tmrTicks += 1
        End If
        Dim sxt As Integer = Convert.ToInt32(m_tmrTicks.ToString.PadRight(3, "9"))

        For Each C As Casella In Me.pnl_ruota.Controls
            C.Top = C.Top + m_speed
        Next
        For Each C As Casella In Me.pnl_ruota.Controls
            If C.Top > C.Height Then
                C.Top = C.Top - m_numCaselleRuota * C.Height
                Try
                    'Aggiungere qui un suono per slot casella
                    My.Computer.Audio.Play(suonoSlot, AudioPlayMode.Background)
                Catch ex As Exception
                End Try
            End If
        Next

        If m_inGiocoRuota = True Then
            m_speed -= RandomizzaIntero(0, 1, sxt)
        Else
            m_scarto -= 1
            If m_scarto = 0 Then
                Me.tmr_ruota.Enabled = False
            End If
        End If

        If m_speed <= 0 And m_inGiocoRuota = True Then
            m_scarto = Integer.MaxValue
            m_inGiocoRuota = False
            Me.pnl_ruota.BackColor = Color.LimeGreen
            For Each C As Casella In Me.pnl_ruota.Controls
                If Math.Abs(C.Top) < m_scarto Then m_scarto = Math.Abs(C.Top)
            Next
            For Each C As Casella In Me.pnl_ruota.Controls
                If Math.Abs(C.Top) = m_scarto Then
                    m_esitoRuota = C.valore
                    If C.Top > 0 Then
                        m_speed = -1
                    ElseIf C.Top < 0 Then
                        m_speed = 1
                    Else 'C.Top = 0 
                        m_speed = 0
                    End If
                    Exit For
                End If
            Next
        End If

    End Sub

End Class
NOTA : Per rendere il tutto più "realistico" ho pensato alla possibilità di associare un suono ad ogni "giro di slot". Il punto esatto in cui farlo è nel metodo Private Sub tmr_ruota_Tick() di Ruota.vb, in corrispondenza di :
Codice:
Try
   'Aggiungere qui un suono per slot casella
    My.Computer.Audio.Play(suonoSlot, AudioPlayMode.Background)
Catch ex As Exception
End Try
- suonoSlot è una Public String su ModuloPublics.vb.

4. FormMain.vb :
Oltre ai controlli già visti è necessario aggiungere al Design di FormMain un controllo Timer "tmr_check", con un Interval sui 400-500 msec.
Come suggerisce il nome tmr_check controlla tutte le ruote in azione su FormMain...

Codice per FormMain :
Codice:
'**************************************************
'GENERATORE RANDOM SLOT - MarcoGG - 2010 **********
'**************************************************
Public Class FormMain

    Private Sub FormMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        cmb_velocitàruota.Text = cmb_velocitàruota.Items(0)

        For Each R As Control In Me.Controls
            If TypeOf R Is Ruota Then ruote.Add(R)
        Next

        For Each R As Ruota In ruote
            R.NumCaselleRuota = nup_numcaselle.Value
            R.NumRuota = ruote.IndexOf(R) + 1
        Next

    End Sub

    Private Sub cmd_start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_start.Click

        msg = New System.Text.StringBuilder
        esitoReport = New System.Text.StringBuilder

        For Each R As Ruota In ruote
            R.Start()
        Next

        cmd_start.Enabled = False
        nup_numcaselle.Enabled = False
        cmb_velocitàruota.Enabled = False

        tmr_check.Enabled = True

    End Sub

    Private Sub tmr_check_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmr_check.Tick

        For Each R As Ruota In ruote
            If R.InGiocoRuota = True Then Exit Sub
        Next

        tmr_check.Enabled = False

        For Each R As Ruota In ruote
            msg.Append("RUOTA " & R.NumRuota & " : " & R.EsitoRuota & vbCrLf)
            esitoReport.Append(R.EsitoRuota.ToString)
        Next

        MsgBox(msg.ToString, MsgBoxStyle.Information, "OK")
        CreaAccodaReport(esitoReport.ToString)

        cmd_start.Enabled = True
        nup_numcaselle.Enabled = True
        cmb_velocitàruota.Enabled = True

    End Sub

    Private Sub cmb_velocitàruota_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_velocitàruota.SelectedIndexChanged

        '0.Normale - Risultato in circa 9 sec.
        '1.Veloce - Risultato in circa 4 sec.

        Dim V As Integer = 20 - cmb_velocitàruota.SelectedIndex * 10
        For Each R As Ruota In ruote
            R.VelocitàRuota = V
        Next

    End Sub

    Private Sub nup_numcaselle_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nup_numcaselle.ValueChanged

        For Each R As Ruota In ruote
            R.NumCaselleRuota = nup_numcaselle.Value
        Next

    End Sub

End Class
5. ModuloPublics.vb :
Contiene dichiarazioni di utilità generale a livello di Progetto.
Codice per ModuloPublics.vb :
Codice:
Module ModuloPublics

    Public percorso As String = Application.StartupPath & "\"
    Public suonoSlot As String = percorso & "slot.wav"
    Public reportFile As String = percorso & "GnrtrRndmSlt_Report.txt"

    Public ruote As New List(Of Ruota)

    Public msg As System.Text.StringBuilder
    Public esitoReport As System.Text.StringBuilder

    Public Function RandomizzaIntero(ByVal Min As Integer, ByVal Max As Integer, ByVal seedX As Integer) As Integer

        If seedX < 0 Then seedX = -seedX
        Dim gen As New System.Random(System.DateTime.Now.Millisecond + seedX)
        Return gen.Next(Min, Max + 1)

    End Function

    Public Sub CreaAccodaReport(ByVal esito As String)

        My.Computer.FileSystem.WriteAllText(reportFile, esito & vbCrLf, True)

    End Sub

End Module
6. Alcune Note di Utilizzo :
I ) Una volta create le classi, basta eseguire una compilazione per trovare Ruota tra i controlli WinForms utilizzabili. A questo punto si possono aggiungere tutte le ruote che si desiderano alla propria FormMain ( personalmente ho fatto un test con 16 Ruote senza problemi ).
Non è assolutamente necessario aggiungere Ruote da codice. Basta usare il Designer.
A tutto il resto pensa il MIO codice.

II ) Quando FormMain è pronta... START !



III ) Quando tutte le Ruote avranno fornito il loro esito, apparirà una MsgBox di riepilogo. Come ultima chicca, verrà creato e aggiornato ad ogni Start, un semplice report txt : "GnrtrRndmSlt_Report.txt".



IV ) Possibili applicazioni ? L'unico limite è la fantasia !

Ok. Direi che c'è tutto. Spero di aver esposto chiaramente.
Provvederò più tardi a fornire in allegato l'exe compilato ( FW3.5 ) nonchè il file audio "slot.wav", per i più pigri...

Provatelo e fatemi sapere se vi piace !
CIAO a tutti !
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2010, 18:25   #9
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Riporto in alto questa discussione, perchè si da il caso che abbia appena realizzato per altri scopi qualcosa di utile e "divertente". Almeno lo è per me.

Un mio generatore un po' avanzato di numeri interi casuali,
con un funzionamento "accattivante", stile Slot-Machine, o Video-Poker se preferite :

1. Descrizione :
Il progetto è di tipo Windows Forms, e le Classi essenziali
alla compilazione sono le seguenti :
- Casella.vb : Controllo UserControl ( Controllo Utente ).
- Ruota.vb : Controllo UserControl ( Controllo Utente ).
- ModuloPublics.vb : Modulo.
- FormMain.vb : Form ( Form di avvio ).

Ho incluso nelle immagini che seguono le proprietà che è utile impostare a Design affinchè il progetto possa essere riprodotto fedelmente.

2. Casella.vb :
E' l'elemento base. Ogni Ruota può contenere N Oggetti Casella.
Nel presente progetto ho limitato N in modo opportuno :
- N minimo = 2 ( per ovvi motivi ).
- N massimo = 10 ( da 0 a 9 ).

La struttura di Casella è semplice :


- lbl_valore : Label.

Codice per Casella.vb :
Codice:
Public Class Casella

    'Dimensioni Fisse
    Private m_w As Integer = 200
    Private m_h As Integer = 200

    Private m_valore As Integer

    Public Property valore() As Integer
        Get
            Return m_valore
        End Get
        Set(ByVal value As Integer)
            m_valore = value
            Me.lbl_valore.Text = m_valore
        End Set
    End Property

    Protected Overrides Sub SetBoundsCore(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal specified As System.Windows.Forms.BoundsSpecified)

        MyBase.SetBoundsCore(x, y, m_w, m_h, specified)

    End Sub

End Class
3. Ruota.vb :
La Ruota è la Classe centrale del progetto. Provvede a caricare le caselle, a farle girare e a generare i valori casuali. Così come per Casella.vb, le dimensioni di Ruota non possono essere decise a casaccio, perciò per semplicità anche in questo caso sono bloccate.
In teoria sarebbe stato più corretto includere Casella in Ruota, come Inner Class ( o Nested Class... ), dal momento che Casella non ha alcuno scopo senza Ruota, ecc... ecc...
Perciò lo scrivo chiaramente una volta sola : ho volutamente evitato di spingermi troppo in là nell'ottimizzazione, allo scopo di rendere il codice più separato e lineare, e quindi comprensibile anche a chi non ha grande dimestichezza con l'approccio OOP di VB.NET.

Nella prossima immagine descrivo l'aspetto generale di una FormMain tipica, con 3 Ruote.
Nell'immagine ho incluso la descrizione dei componenti e proprietà essenziali di Ruota.vb.
- lbl_numruota : Label.
- nup_numcaselle : NumericUpDown.
- cmb_velocitàruota : ComboBox.
- pnl_ruota : Panel.
- cmd_start : Button.
e tmr_ruota, il controllo Timer da aggiungere a Ruota.vb in Design.

( Ammetto di avere un uso abbastanza personale della cosiddetta "notazione ungherese", ma sono abitudini dure da sradicare... )



Codice per Ruota.vb :
Codice:
Public Class Ruota

    'Membri Interni N.A.
    Private m_w As Integer = 240 'Dimensioni Fisse
    Private m_h As Integer = 240 'Dimensioni Fisse
    Private m_tmrTicks As Integer = 0
    Private m_speedMin As Integer = 80
    Private m_speedMax As Integer = 120
    Private m_speed As Integer = 0
    Private m_scarto As Integer = 0

    'Membri Interni Property
    Private m_numCaselleRuota As Integer = 10
    Private m_inGiocoRuota As Boolean = False
    Private m_esitoRuota As Integer = 0
    Private m_numRuota As Integer = 0
    Private m_velocitàRuota As Integer = 20

    Public Property NumCaselleRuota() As Integer
        Get
            Return m_numCaselleRuota
        End Get
        Set(ByVal value As Integer)
            If value < 2 Then
                m_numCaselleRuota = 2
            Else
                m_numCaselleRuota = value
            End If
            Me.ResetRuota()
        End Set
    End Property

    Public ReadOnly Property InGiocoRuota() As Boolean
        Get
            Return m_inGiocoRuota
        End Get
    End Property

    Public ReadOnly Property EsitoRuota() As Integer
        Get
            Return m_esitoRuota
        End Get
    End Property

    Public Property NumRuota() As Integer
        Get
            Return m_numRuota
        End Get
        Set(ByVal value As Integer)
            m_numRuota = value
            Me.lbl_numruota.Text = m_numRuota
        End Set
    End Property

    Public Property VelocitàRuota() As Integer
        Get
            Return m_velocitàRuota
        End Get
        Set(ByVal value As Integer)
            If value <= 0 Then
                m_velocitàRuota = 20
            Else
                m_velocitàRuota = value
            End If
            Me.tmr_ruota.Interval = m_velocitàRuota
        End Set
    End Property

    Protected Overrides Sub SetBoundsCore(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal specified As System.Windows.Forms.BoundsSpecified)

        MyBase.SetBoundsCore(x, y, m_w, m_h, specified)

    End Sub

    Private Sub ResetRuota()

        Me.pnl_ruota.BackColor = Color.Black
        Me.pnl_ruota.Controls.Clear()
        For i As Integer = 1 To m_numCaselleRuota
            Dim C As New Casella
            C.valore = i - 1
            Me.pnl_ruota.Controls.Add(C)
            C.Left = 10
            C.Top = (1 - i) * C.Height
        Next

    End Sub

    Public Sub Start()

        'Normalizzazione valori per SeedX Random
        Dim nr As Integer = m_numRuota * 99
        Dim ttcks As Integer = Convert.ToInt32(m_tmrTicks.ToString.PadRight(3, "9"))
        Dim er As Integer = m_esitoRuota * 99
        Dim mox As Integer = Cursor.Position.X
        Dim moy As Integer = Cursor.Position.Y

        Dim sxs As Integer = nr + er + ttcks + mox + moy

        m_speed = RandomizzaIntero(m_speedMin, m_speedMax, sxs)
        m_inGiocoRuota = True

        Me.pnl_ruota.BackColor = Color.Black
        Me.tmr_ruota.Enabled = True

    End Sub

    Private Sub tmr_ruota_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmr_ruota.Tick

        If m_tmrTicks = 999 Then
            m_tmrTicks = 1
        Else
            m_tmrTicks += 1
        End If
        Dim sxt As Integer = Convert.ToInt32(m_tmrTicks.ToString.PadRight(3, "9"))

        For Each C As Casella In Me.pnl_ruota.Controls
            C.Top = C.Top + m_speed
        Next
        For Each C As Casella In Me.pnl_ruota.Controls
            If C.Top > C.Height Then
                C.Top = C.Top - m_numCaselleRuota * C.Height
                Try
                    'Aggiungere qui un suono per slot casella
                    My.Computer.Audio.Play(suonoSlot, AudioPlayMode.Background)
                Catch ex As Exception
                End Try
            End If
        Next

        If m_inGiocoRuota = True Then
            m_speed -= RandomizzaIntero(0, 1, sxt)
        Else
            m_scarto -= 1
            If m_scarto = 0 Then
                Me.tmr_ruota.Enabled = False
            End If
        End If

        If m_speed <= 0 And m_inGiocoRuota = True Then
            m_scarto = Integer.MaxValue
            m_inGiocoRuota = False
            Me.pnl_ruota.BackColor = Color.LimeGreen
            For Each C As Casella In Me.pnl_ruota.Controls
                If Math.Abs(C.Top) < m_scarto Then m_scarto = Math.Abs(C.Top)
            Next
            For Each C As Casella In Me.pnl_ruota.Controls
                If Math.Abs(C.Top) = m_scarto Then
                    m_esitoRuota = C.valore
                    If C.Top > 0 Then
                        m_speed = -1
                    ElseIf C.Top < 0 Then
                        m_speed = 1
                    Else 'C.Top = 0 
                        m_speed = 0
                    End If
                    Exit For
                End If
            Next
        End If

    End Sub

End Class
NOTA : Per rendere il tutto più "realistico" ho pensato alla possibilità di associare un suono ad ogni "giro di slot". Il punto esatto in cui farlo è nel metodo Private Sub tmr_ruota_Tick() di Ruota.vb, in corrispondenza di :
Codice:
Try
   'Aggiungere qui un suono per slot casella
    My.Computer.Audio.Play(suonoSlot, AudioPlayMode.Background)
Catch ex As Exception
End Try
- suonoSlot è una Public String su ModuloPublics.vb.

4. FormMain.vb :
Oltre ai controlli già visti è necessario aggiungere al Design di FormMain un controllo Timer "tmr_check", con un Interval sui 400-500 msec.
Come suggerisce il nome tmr_check controlla tutte le ruote in azione su FormMain...

Codice per FormMain :
Codice:
'**************************************************
'GENERATORE RANDOM SLOT - MarcoGG - 2010 **********
'**************************************************
Public Class FormMain

    Private Sub FormMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        cmb_velocitàruota.Text = cmb_velocitàruota.Items(0)

        For Each R As Control In Me.Controls
            If TypeOf R Is Ruota Then ruote.Add(R)
        Next

        For Each R As Ruota In ruote
            R.NumCaselleRuota = nup_numcaselle.Value
            R.NumRuota = ruote.IndexOf(R) + 1
        Next

    End Sub

    Private Sub cmd_start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_start.Click

        msg = New System.Text.StringBuilder
        esitoReport = New System.Text.StringBuilder

        For Each R As Ruota In ruote
            R.Start()
        Next

        cmd_start.Enabled = False
        nup_numcaselle.Enabled = False
        cmb_velocitàruota.Enabled = False

        tmr_check.Enabled = True

    End Sub

    Private Sub tmr_check_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmr_check.Tick

        For Each R As Ruota In ruote
            If R.InGiocoRuota = True Then Exit Sub
        Next

        tmr_check.Enabled = False

        For Each R As Ruota In ruote
            msg.Append("RUOTA " & R.NumRuota & " : " & R.EsitoRuota & vbCrLf)
            esitoReport.Append(R.EsitoRuota.ToString)
        Next

        MsgBox(msg.ToString, MsgBoxStyle.Information, "OK")
        CreaAccodaReport(esitoReport.ToString)

        cmd_start.Enabled = True
        nup_numcaselle.Enabled = True
        cmb_velocitàruota.Enabled = True

    End Sub

    Private Sub cmb_velocitàruota_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_velocitàruota.SelectedIndexChanged

        '0.Normale - Risultato in circa 9 sec.
        '1.Veloce - Risultato in circa 4 sec.

        Dim V As Integer = 20 - cmb_velocitàruota.SelectedIndex * 10
        For Each R As Ruota In ruote
            R.VelocitàRuota = V
        Next

    End Sub

    Private Sub nup_numcaselle_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nup_numcaselle.ValueChanged

        For Each R As Ruota In ruote
            R.NumCaselleRuota = nup_numcaselle.Value
        Next

    End Sub

End Class
5. ModuloPublics.vb :
Contiene dichiarazioni di utilità generale a livello di Progetto.
Codice per ModuloPublics.vb :
Codice:
Module ModuloPublics

    Public percorso As String = Application.StartupPath & "\"
    Public suonoSlot As String = percorso & "slot.wav"
    Public reportFile As String = percorso & "GnrtrRndmSlt_Report.txt"

    Public ruote As New List(Of Ruota)

    Public msg As System.Text.StringBuilder
    Public esitoReport As System.Text.StringBuilder

    Public Function RandomizzaIntero(ByVal Min As Integer, ByVal Max As Integer, ByVal seedX As Integer) As Integer

        If seedX < 0 Then seedX = -seedX
        Dim gen As New System.Random(System.DateTime.Now.Millisecond + seedX)
        Return gen.Next(Min, Max + 1)

    End Function

    Public Sub CreaAccodaReport(ByVal esito As String)

        My.Computer.FileSystem.WriteAllText(reportFile, esito & vbCrLf, True)

    End Sub

End Module
6. Alcune Note di Utilizzo :
I ) Una volta create le classi, basta eseguire una compilazione per trovare Ruota tra i controlli WinForms utilizzabili. A questo punto si possono aggiungere tutte le ruote che si desiderano alla propria FormMain ( personalmente ho fatto un test con 16 Ruote senza problemi ).
Non è assolutamente necessario aggiungere Ruote da codice. Basta usare il Designer.
A tutto il resto pensa il MIO codice.

II ) Quando FormMain è pronta... START !



III ) Quando tutte le Ruote avranno fornito il loro esito, apparirà una MsgBox di riepilogo. Come ultima chicca, verrà creato e aggiornato ad ogni Start, un semplice report txt : "GnrtrRndmSlt_Report.txt".



IV ) Possibili applicazioni ? L'unico limite è la fantasia !

Ok. Direi che c'è tutto. Spero di aver esposto chiaramente.
Provvederò più tardi a fornire in allegato l'exe compilato ( FW3.5 ) nonchè il file audio "slot.wav", per i più pigri...

Provatelo e fatemi sapere se vi piace !
CIAO a tutti !
Ho visto questo post adesso , figo !!! lo sto provando ed è bellissimo
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2010, 18:31   #10
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Ludo237 Guarda i messaggi
Ho visto questo post adesso , figo !!! lo sto provando ed è bellissimo
Bello no ?
Tra poco posto il compilato + file audio, che lo rende ancora più... Slot !
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2010, 11:04   #11
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
Complimenti!!! davvero bello!
Una curiosità con che versione di visual studio lo compili?
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2010, 11:57   #12
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Eccolo !

L'eseguibile :
GeneraNumeriCasualiSlot.zip

ATTENZIONE : si tratta in realtà di archivio RAR !
Anche se l'estensione è .zip.

Chiedo scusa, ma ho solo WinRar. E lo zip andava oltre il limite dei 24.4 KB.
E per oscure ragioni qui non si possono uppare files Rar...
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2010, 12:02   #13
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da ozzy19 Guarda i messaggi
Complimenti!!! davvero bello!
Una curiosità con che versione di visual studio lo compili?
VB 2008 - FW 3.5.

E questo è il file slot.wav ( deve stare nella stessa cartella dell'exe ) :
slot.zip

Potete sostituirlo con un qualsiasi altro file audio .wav di vostro gradimento, a patto che si chiami "slot.wav" e non sia troppo pesante...
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2010, 12:05   #14
ozzy19
Member
 
Iscritto dal: May 2009
Messaggi: 147
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
VB 2008 - FW 3.5.

E questo è il file slot.wav ( deve stare nella stessa cartella dell'exe ) :
Allegato 78611

Potete sostituirlo con un qualsiasi altro file audio .wav di vostro gradimento, a patto che si chiami "slot.wav" e non sia troppo pesante...
Grazie mille!!
ottimo lavoro!!
ozzy19 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Hai usato il 'Pezzotto'? Ora anche la Se...
TeraFab: Musk vuole costruire la fabbric...
Lo compri una volta, lo giochi dove vuoi...
Qiantinuum annuncia Helios, "il com...
Samsung Galaxy S26 Ultra: una sola novit...
Google prepara Gemini 3 Pro e Nano Banan...
TVS non è solo moto e scooter: ec...
Alexa+ arriva su BMW: gli automobilisti ...
Gemini Deep Research arriva su Google Fi...
Rinvii a catena, Marvel 1943: Rise of Hy...
Xiaomi inaugura uno spazio dedicato ai f...
Rilasciate le specifiche di Bluetooth 6....
L'obiettivo che mette tutto a fuoco: la ...
Meta avrebbe raccolto fino al 10% dei ri...
NVIDIA DGX Spark e videogiochi? Una pess...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v