Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [VB.NET] Rendere il codice più "compatto"?

    Vorrei creare un programma che lanci 6 dadi. A ogni lancio dovrebbe corrispondere un'immagine. L'immagine sarà diversa se il risultato sarà 1,2,3,4,5 o 6. Quindi il codice per un lancio di un dado sarà del tipo:
    codice:
           v = Int(Rnd() * 6 + 1)       
            If v = 1 Then
                PictureBox1.ImageLocation = "PercordoImmagineDado1"
            elseif v = 2 Then
                PictureBox1.ImageLocation = "PercordoImmagineDado2"
            evenif v = 3 Then
                PictureBox1.ImageLocation = "PercordoImmagineDado3"
            elseif v = 4 Then
                PictureBox1.ImageLocation = "PercordoImmagineDado4"
            else if v = 5 Then
                PictureBox1.ImageLocation = "PercordoImmagineDado5"
            else
                PictureBox1.ImageLocation = "PercordoImmagineDado6"
            End If
    Ora, per il lancio degli altri 5 dadi, dovrei ripetere queste istruzioni per 5 volte, cambiando il riferimento alla PictureBox (1,2,3,4,5,6). C'è un modo per evitare questa ripetizione e per rendere il codice più compatto? C'è per caso una sorta di ciclo che posso incrementare il riferimento alla PictureBox?

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Un codice compatto non è un codice per forza migliore.
    L'unica cosa di corretto da fare sarebbe sostituire l'"If" un "Select case"

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da SorinMarkov Visualizza il messaggio
    Vorrei creare un programma che lanci 6 dadi. A ogni lancio dovrebbe corrispondere un'immagine. L'immagine sarà diversa se il risultato sarà 1,2,3,4,5 o 6. Quindi il codice per un lancio di un dado sarà del tipo:
    codice:
           v = Int(Rnd() * 6 + 1)       
            If v = 1 Then
                PictureBox1.ImageLocation = "PercordoImmagineDado1"
            elseif v = 2 Then
                PictureBox1.ImageLocation = "PercordoImmagineDado2"
            evenif v = 3 Then
                PictureBox1.ImageLocation = "PercordoImmagineDado3"
            elseif v = 4 Then
                PictureBox1.ImageLocation = "PercordoImmagineDado4"
            else if v = 5 Then
                PictureBox1.ImageLocation = "PercordoImmagineDado5"
            else
                PictureBox1.ImageLocation = "PercordoImmagineDado6"
            End If
    Ora, per il lancio degli altri 5 dadi, dovrei ripetere queste istruzioni per 5 volte, cambiando il riferimento alla PictureBox (1,2,3,4,5,6). C'è un modo per evitare questa ripetizione e per rendere il codice più compatto? C'è per caso una sorta di ciclo che posso incrementare il riferimento alla PictureBox?
    Ma non basterebbe scrivere:
    codice:
     v = Int(Rnd() * 6 + 1) 
    PictureBox1.ImageLocation = "PercordoImmagineDado" & cstr(v)
    No?

  4. #4
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Oppure se non vuoi essere dipendente dai nomi dei percorsi, salva i percorsi in un array lancia il dado da 0 a 5 e usa il risultato come indice dell'array.

  5. #5
    Volevo sapere solamente se esiste un modo per far incrementare il riferimento alle picturebox in automatico (cioè il programma passa da solo dalla picturebox1 alla picturebox2 e così via).

  6. #6
    Quote Originariamente inviata da renygade Visualizza il messaggio
    Ma non basterebbe scrivere:
    codice:
     v = Int(Rnd() * 6 + 1) 
    PictureBox1.ImageLocation = "PercordoImmagineDado" & cstr(v)
    No?
    Era quello che cercavo! Grazie

  7. #7
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Puoi usare due List Of.
    Una per le PictureBox e l' altra per le immagini, quest' ultima non è necessaria ma visto che sono immagini utilizzate "spesso" è meglio caricarle in "memoria" in modo da evitare troppi accessi al disco.
    Poi, visto che PictureBox e immagini sono in quantità "fisse", ti basta una Sub con un ciclo For/Next, esempio:
    codice:
        Dim Random As New Random
        Dim lista_picBox As New List(Of PictureBox)
        Dim lista_dadi As New List(Of Image)
    
    
        Private Sub Form1_Load() Handles MyBase.Load
            lista_picBox.Add(PictureBox1)
            lista_picBox.Add(PictureBox2)
            lista_picBox.Add(PictureBox3)
            lista_picBox.Add(PictureBox4)
            lista_picBox.Add(PictureBox5)
            lista_picBox.Add(PictureBox6)
    
            lista_dadi.Add(Image.FromFile("percorso img 1"))
            lista_dadi.Add(Image.FromFile("percorso img 2"))
            lista_dadi.Add(Image.FromFile("percorso img 3"))
            lista_dadi.Add(Image.FromFile("percorso img 4"))
            lista_dadi.Add(Image.FromFile("percorso img 5"))
            lista_dadi.Add(Image.FromFile("percorso img 6"))
    
        End Sub
    
        Private Sub estrazione()
    
            For a = 0 To 5
                lista_picBox(a).Image = lista_dadi((Random.Next(6)))
            Next
    
        End Sub

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da SorinMarkov Visualizza il messaggio
    Era quello che cercavo! Grazie
    Prego.
    PS: buono studio.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.