Annonce

Réduire
Aucune annonce.

VB.net différences entre private sub, public sub et sub

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • VB.net différences entre private sub, public sub et sub

    Bonjour,

    J'ai conçu il y a quelques jours un petit jeu, vraiment basique, c'était principalement pour savoir si je pouvais.
    J'ai réussi, mais j'ai des questions.

    Question stupide, mais qu'elle est la différence entre le private sub, public sub et le sub ?
    Ce sont des fonctions, mais pourquoi il y en a plusieurs ?

    Ensuite à quoi servent les classes ?
    J'ai dû mal à définir leur utilité.

    Et pour finir, j'aimerais un avis concret sur mon code en Visual Basic .NET (désolé )

    Code:
    Imports System.IO 'Manipulation des fichiers.
    Module Module1
    
        Dim minerai As Integer = 0 'Nombre de minerais.
        Dim mny As Integer = 1000 'Variable argent.
        Dim equip As String = "Aucune pioche équipée." 'Variable pioche utilisée.
        Dim lvl As Integer = 1 'Variable niveau.
        Dim fer As Integer = 0 'Nombre de fer.
        Const ferprix As Integer = 50 'Prix fixe du fer.
        Dim ors As Integer = 0 'Nombre d'or.
        Const orprix As Integer = 100 'Prix fixe de l'or.
        Dim diam As Integer = 0 'Nombre de diamant.
        Const diamprix As Integer = 400 'Prix fixe du diamant.
        Dim time As Integer = 2000 'Temps minage (en MS, 1000ms = 1 seconde)
        Dim xp As Integer = 0 'Variable XP.
        Const xpfer As Integer = 50 'L'XP fixe que le fer donne.
        Const xpor As Integer = 100 'L'XP fixe que l'or donne.
        Const xpdiam As Integer = 200 'L'XP fixe que le diamant donne.
        Dim xpnxt As Integer = 100 'XP pour passer au prochain niveau.
    
        Sub Main() 'Lancement du programme.
            Dim bool As Boolean = True
            While (bool = True)
                Console.ForegroundColor = ConsoleColor.DarkYellow
                Console.WriteLine("BIENVENUE SUR MINER !")
                Console.ForegroundColor = ConsoleColor.White
                Console.WriteLine("Vous avez " & mny & " ORs")
                Console.WriteLine("Vous etes niveau " & lvl)
                Console.WriteLine("Une pioche est requise pour miner. Voulez-vous achetez une pioche ? (800 ORs) (""Oui"" ou ""Non"")")
                Dim choix As String = Console.ReadLine
                If choix = "Oui" Then
                    bool = False
                    mny -= 800
                    pioche1 = +1
                    Console.ForegroundColor = ConsoleColor.DarkGreen
                    Console.WriteLine("Votre pioche est prete ! Vous avez : " & mny & " ORs")
                    Console.ForegroundColor = ConsoleColor.White
                    minage()
                ElseIf choix = "Non" Then
                    menu()
                Else
                    Console.ForegroundColor = ConsoleColor.DarkRed
                    Console.WriteLine("[ERREUR] Veuillez ecrire ""Oui"" ou ""Non"" !")
                    Console.ForegroundColor = ConsoleColor.White
                    Main()
                End If
            End While
            Console.Read()
        End Sub
    
        Sub aleatoire() 'Système de récolte aléatoire.
            Dim alea As New Random
            Dim lettre As String = ""
                lettre = lettre & ChrW(alea.Next(Asc("a"), Asc("h")))
            Select Case lettre
                Case "a"
                    Console.ForegroundColor = ConsoleColor.Gray
                    Console.WriteLine("Du fer a été récolté !")
                    Console.ForegroundColor = ConsoleColor.White
                    fer += 1
                    xp += xpfer
                Case "b"
                    Console.ForegroundColor = ConsoleColor.Yellow
                    Console.WriteLine("De l'or a été récolté !")
                    Console.ForegroundColor = ConsoleColor.White
                    ors += 1
                    xp += xpor
                Case "c"
                    Console.ForegroundColor = ConsoleColor.Blue
                    Console.WriteLine("Du diamant a été récolté !")
                    Console.ForegroundColor = ConsoleColor.White
                    diam += 1
                    xp += xpdiam
                Case Else
                    Console.ForegroundColor = ConsoleColor.Gray
                    Console.WriteLine("Du fer a été récolté !")
                    Console.ForegroundColor = ConsoleColor.White
                    fer += 1
                    xp += xpfer
            End Select
        End Sub
    
        Sub minage() 'Partie 1/2. Suite à un problème intervenue avec le système de niveau, la partie "minage" a dû être découpée en 2.
            Console.WriteLine("Appuyez sur une la touche ENTREE pour miner.")
            Dim ctnmin As String = Console.ReadLine
            Console.WriteLine("Minage en cours...")
            Threading.Thread.Sleep(time)
            Console.ForegroundColor = ConsoleColor.White
            aleatoire()
            Console.ForegroundColor = ConsoleColor.White
            minerai += 1
            niveau()
        End Sub
    
        Sub minage2() 'Partie 2/2
            Console.WriteLine("Voulez-vous continuer à miner ? (""Oui"" ou ""Non"")")
            Dim choix As String = Console.ReadLine
            Select Case choix
                Case "Oui"
                    minage()
                Case "Non"
                    vntmin()
                Case Else
                    Console.ForegroundColor = ConsoleColor.DarkRed
                    Console.WriteLine("[ERREUR] Veuillez ecrire ""Oui"" ou ""Non"" !")
                    Console.ForegroundColor = ConsoleColor.White
                    minage2()
            End Select
        End Sub
    
        Sub vntmin() 'Vente de minerais.
            Console.ForegroundColor = ConsoleColor.White
            Console.WriteLine("Vous vous êtes arreté de miner.")
            Console.ForegroundColor = ConsoleColor.Yellow
            Console.WriteLine("Vous avez " & fer & " fer(s), " & ors & " or(s) et " & diam & " diamant(s). Voulez-vous les vendre ? (""Oui"" ou ""Non"")")
            Console.ForegroundColor = ConsoleColor.White
            Dim vente As String = Console.ReadLine
            Dim total As Integer = fer + ors + diam
            Dim argt As Integer = fer * ferprix + ors * orprix + diam * diamprix
            Select Case vente
                Case "Oui"
                    Console.ForegroundColor = ConsoleColor.DarkGreen
                    Console.WriteLine("Vous en avez vendu " & total & ". Vous avez recu " & argt & " ORs." & vbCrLf)
                    Console.WriteLine("Retour imminent au menu principal.")
                    Threading.Thread.Sleep(2000)
                    Console.ForegroundColor = ConsoleColor.White
                    mny += argt
                    minerai -= total
                    menu()
                Case "Non"
                    Console.ForegroundColor = ConsoleColor.Yellow
                    Console.WriteLine("Retour au menu.")
                    Console.ForegroundColor = ConsoleColor.White
                    Threading.Thread.Sleep(1000)
                    menu()
                Case Else
                    Console.ForegroundColor = ConsoleColor.DarkRed
                    Console.WriteLine("[ERREUR] Veuillez écrire ""Oui"" ou ""Non"" !")
                    Console.ForegroundColor = ConsoleColor.White
                    vntmin()
            End Select
        End Sub
    
        Sub menu() 'Menu principal.
            Dim prctxp As Integer = 100 * xp / xpnxt
            Dim bool As Boolean = True
            While bool = True
                Dim vrai As Boolean = True
                Console.WriteLine("Bienvenue dans le menu principal !")
                Console.WriteLine("Vous avez " & mny & " ORs")
                Console.ForegroundColor = ConsoleColor.Blue
                Console.WriteLine("Menu disponible :" & vbCrLf & "1. Magasin" & vbCrLf & "2. Mine" & vbCrLf & "3. Sauvegarder informations dans un .txt" & vbCrLf & "4. Informations à propos du jeu")
                Console.ForegroundColor = ConsoleColor.White
                Console.WriteLine("Choisissez un chiffre :")
                Dim choix2 As String = Console.ReadLine
                Select Case choix2
                    Case 1
                        magasin()
                    Case 2
                        If equip = "Aucune pioche équipée." Then
                            Console.ForegroundColor = ConsoleColor.DarkRed
                            Console.WriteLine("Vous n'avez aucune pioche d'équipée, veuillez vous diriger vers le magasin.")
                            Console.ForegroundColor = ConsoleColor.White
                        Else
                            Console.ForegroundColor = ConsoleColor.DarkGreen
                            Console.WriteLine("Votre pioche est prete ! Vous avez : " & mny & " ORs")
                            Console.ForegroundColor = ConsoleColor.White
                            minage()
                        End If
                    Case 3
                        Dim sw As New StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\Informations Miner.txt")
                        sw.WriteLine("--------------------------------------------- & vbCrLf & "Argent : " & mny & vbCrLf & "Pioche : " & equip & vbCrLf & "Minerai(s) : " & minerai & vbCrLf & "Fer(s) : " & fer & vbCrLf & "Or(s) : " & ors & vbCrLf & "Diamant(s) : " & diam & vbCrLf & "Niveau : " & lvl & vbCrLf & "Expérience : " & xp & " (" & prctxp & "%)" & vbCrLf & "---------------------------------------------)
                        sw.Close()
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine("Fichier crée sur le bureau.")
                        Console.ForegroundColor = ConsoleColor.White
                        Threading.Thread.Sleep(2000)
                        menu()
                    Case 4
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine(vbCrLf & "Nombre de niveaux : 50" & vbCrLf & "Nombre de pioches : 5" & vbCrLf & "Nombre de minerais : 3 (Fer - Or - Diamant)" & vbCrLf & "Nombre de lignes : 330" & vbCrLf & "Auteur : Bayern" & vbCrLf)
                        Console.ForegroundColor = ConsoleColor.White
                        Console.WriteLine("Appuyez sur une touche pour quitter.")
                        Console.ReadLine()
                        menu()
                    Case Else
                        menu()
                End Select
                Dim choix As String = Console.ReadLine
                If choix = ("Oui") Then
                    bool = False
                    Console.ForegroundColor = ConsoleColor.DarkGreen
                    Console.WriteLine("Votre pioche est prete ! Vous avez : " & mny & " ORs")
                    Console.ForegroundColor = ConsoleColor.White
                    minage()
                Else
                    bool = True
                End If
            End While
            Console.Read()
        End Sub
    
    #Region "PiocheShop" 'Pour un achat unique des pioches.
        Dim pioche1 As Integer = 0
        Dim pioche2 As Integer = 0
        Dim pioche3 As Integer = 0
        Dim pioche4 As Integer = 0
        Dim pioche5 As Integer = 0
    #End Region
    
        Sub magasin() 'Magasin de pioches.
            Dim pch(5) As Integer
            Dim pioche(6) As String
            pioche(1) = "1. Pioche du débutant [800 ORs] [Aucun niveau requis.]"
            pioche(2) = "2. Pioche en fer [1500 ORs] [Niveau 5 minimum]"
            pioche(3) = "3. Pioche en or [2000 ORs] [Niveau 10 minimum]"
            pioche(4) = "4. Pioche en diamant [5000 ORs] [Niveau 20 minimum]"
            pioche(5) = "5. Pioche du héro [10.000 ORs] [Niveau 40 minimum]"
            pioche(6) = "6. Quitter."
            Console.ForegroundColor = ConsoleColor.Yellow
            Console.WriteLine("ORs : " & mny & vbCrLf & "Niveau : " & lvl)
            Console.ForegroundColor = ConsoleColor.Blue
            Console.WriteLine(vbCrLf & "Bienvenue dans le magasin !" & vbCrLf & "Voici les pioches disponibles : " & vbCrLf & "--------------------------- & vbCrLf & pioche(1) & vbCrLf & pioche(2) & vbCrLf & pioche(3) & vbCrLf & pioche(4) & vbCrLf & pioche(5) & vbCrLf & "---------------------------)
            Console.ForegroundColor = ConsoleColor.White
            Console.WriteLine("Inscrivez un chiffre correspondant a la pioche voulue :")
            Dim choix As String = Console.ReadLine
            Select Case choix
                Case 1
                    If pioche1 > 0 Then
                        Console.ForegroundColor = ConsoleColor.Red
                        Console.WriteLine("Pioche déjà achetée, aucun retrait d'argent.")
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine("Pioche équipée.")
                        equip = ("Pioche du débutant")
                        time = 2000
                        Console.ForegroundColor = ConsoleColor.White
                        menu()
                    End If
                    If mny >= 800 And lvl >= 0 Then
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine("La pioche du débutant a été achetée et équipée !")
                        equip = ("Pioche du débutant")
                        Console.ForegroundColor = ConsoleColor.White
                        pioche1 = +1
                        time = 2000
                        mny -= 800
                        menu()
                    Else
                        Console.ForegroundColor = ConsoleColor.Red
                        Console.WriteLine("Vous ne remplissez pas les conditions pour acheter cette pioche !")
                        Console.ForegroundColor = ConsoleColor.White
                        magasin()
                    End If
                Case 2
                    If pioche2 > 0 Then
                        Console.ForegroundColor = ConsoleColor.Red
                        Console.WriteLine("Pioche déjà achetée, aucun retrait d'argent.")
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine("Pioche équipée.")
                        equip = ("Pioche en fer")
                        time -= 500
                        Console.ForegroundColor = ConsoleColor.White
                        menu()
                    End If
                    If mny >= 1500 And lvl >= 5 Then
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine("La pioche en fer a été achetée et équipée !")
                        equip = ("Pioche en fer")
                        Console.ForegroundColor = ConsoleColor.White
                        pioche2 = +1
                        time -= 500
                        mny -= 1500
                        menu()
                    Else
                        Console.ForegroundColor = ConsoleColor.Red
                        Console.WriteLine("Vous ne remplissez pas les conditions pour acheter cette pioche !")
                        Console.ForegroundColor = ConsoleColor.White
                        magasin()
                    End If
                Case 3
                    If pioche3 > 0 Then
                        Console.ForegroundColor = ConsoleColor.Red
                        Console.WriteLine("Pioche déjà achetée, aucun retrait d'argent.")
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine("Pioche équipée.")
                        equip = ("Pioche en or")
                        time -= 800
                        Console.ForegroundColor = ConsoleColor.White
                        menu()
                    End If
                    If mny >= 2000 And lvl >= 10 Then
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine("La pioche en or a été achetée et équipée !")
                        equip = ("Pioche en or")
                        Console.ForegroundColor = ConsoleColor.White
                        pioche3 = +1
                        time -= 800
                        mny -= 2000
                        menu()
                    Else
                        Console.ForegroundColor = ConsoleColor.Red
                        Console.WriteLine("Vous ne remplissez pas les conditions pour acheter cette pioche !")
                        Console.ForegroundColor = ConsoleColor.White
                        magasin()
                    End If
                Case 4
                    If pioche4 > 0 Then
                        Console.ForegroundColor = ConsoleColor.Red
                        Console.WriteLine("Pioche déjà achetée, aucun retrait d'argent.")
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine("Pioche équipée.")
                        equip = ("Pioche en diamant")
                        time -= 1000
                        Console.ForegroundColor = ConsoleColor.White
                        menu()
                    End If
                    If mny >= 5000 And lvl >= 20 Then
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine("La pioche en diamant a été achetée et équipée !")
                        equip = ("Pioche en diamant")
                        Console.ForegroundColor = ConsoleColor.White
                        pioche4 = +1
                        time -= 1000
                        mny -= 5000
                        menu()
                    Else
                        Console.ForegroundColor = ConsoleColor.Red
                        Console.WriteLine("Vous ne remplissez pas les conditions pour acheter cette pioche !")
                        Console.ForegroundColor = ConsoleColor.White
                        magasin()
                    End If
                Case 5
                    If pioche5 > 0 Then
                        Console.ForegroundColor = ConsoleColor.Red
                        Console.WriteLine("Pioche déjà achetée, aucun retrait d'argent.")
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine("Pioche équipée.")
                        equip = ("Pioche du héro")
                        time -= 1500
                        Console.ForegroundColor = ConsoleColor.White
                        menu()
                    End If
                    If mny >= 10000 And lvl >= 40 Then
                        Console.ForegroundColor = ConsoleColor.Green
                        Console.WriteLine("La pioche du héro a été achetée et équipée !")
                        equip = ("Pioche du héro")
                        Console.ForegroundColor = ConsoleColor.White
                        pioche5 = +1
                        time -= 1500
                        mny -= 10000
                        menu()
                    Else
                        Console.ForegroundColor = ConsoleColor.Red
                        Console.WriteLine("Vous ne remplissez pas les conditions pour acheter cette pioche !")
                        Console.ForegroundColor = ConsoleColor.White
                        magasin()
                    End If
                Case 6
                    menu()
                Case Else
                    Console.ForegroundColor = ConsoleColor.DarkRed
                    Console.WriteLine("[ERREUR] Veuillez inscrire un bon chiffre.")
            End Select
        End Sub
    
        Sub niveau() 'Système de niveau.
            Dim lvlfer As Integer = fer * xpfer
            Dim lvlor As Integer = ors * xpor
            Dim lvldiam As Integer = diam * xpdiam
            Dim total As Integer = lvlfer + lvlor + lvldiam
            If total >= xpnxt Then
                Console.ForegroundColor = ConsoleColor.Green
                Console.WriteLine("Bravo ! Vous passez niveau " & lvl + 1 & " !")
                lvl += 1
                xpnxt += 1000
                Console.ForegroundColor = ConsoleColor.White
                minage2()
            Else
                minage2()
            End If
        End Sub
    
    End Module
    Je suis sûr que j'ai fait des erreurs de débutants, y'a t-il des choses inutiles ? Des choses à améliorer ?

    Merci.
    Dernière modification par Hookel, 08 août 2014, 23h29.

  • #2
    Je connais pas Visual Basic, mais dans tous les langages, comme C++, Java
    • private pour variable privée, dont on protège l'accès.
    • public pour variable publique, dont on accède partout.



    Et si tu ne spécifies aucun des deux, c'est par défaut public.

    Pour le code j'ai pas lu beaucoup, mais je sens une mauvaise habitude, par exemple, dans ta boucle infinie, tu déclares tes variables dedans, hors je pense plus propre et plus optimisé de déclarer ta variable en dehors, je vais essayer de donner un exemple en Visual Basic, ça risque d'être pas beau c'est ma 1ère ligne

    Code:
    Dim bool As Boolean = True
    Dim lvl As Integer
    
    While bool
        lvl = 1
    Bref après je dirais que l'essentiel est que ça fonctionne, en espérant qu'un pro du VBA sera là pour t'aider plus...

    P.S

    J'ai pas compris cette ligne

    Code:
    For i = 0 To 0
        lettre = lettre & ChrW(alea.Next(Asc("a"), Asc("h")))
    Pourquoi pour i allant de 0 à 0 ?

    et pourquoi pas remplacer cette ligne par

    Code:
    lettre = ChrW(alea.Next(Asc("a"), Asc("h")))
    sans boucle for et concaténation?
    Dernière modification par fred, 08 août 2014, 21h17.

    Commentaire


    • #3
      Envoyé par fred Voir le message
      Je connais pas Visual Basic, mais dans tous les langages, comme C++, Java
      • private pour variable privée, dont on protège l'accès.
      • public pour variable publique, dont on accède partout.



      Et si tu ne spécifies aucun des deux, c'est par défaut public.

      Pour le code j'ai pas lu beaucoup, mais je sens une mauvaise habitude, par exemple, dans ta boucle infinie, tu déclares tes variables dedans, hors je pense plus propre et plus optimisé de déclarer ta variable en dehors, je vais essayer de donner un exemple en Visual Basic, ça risque d'être pas beau c'est ma 1ère ligne

      Code:
      Dim bool As Boolean = True
      Dim lvl As Integer
      
      While bool
          lvl = 1
      Bref après je dirais que l'essentiel est que ça fonctionne, en espérant qu'un pro du VBA sera là pour t'aider plus...

      P.S

      J'ai pas compris cette ligne



      Pourquoi pour i allant de 0 à 0 ?

      et pourquoi pas remplacer cette ligne par

      Code:
      lettre = ChrW(alea.Next(Asc("a"), Asc("h")))
      sans boucle for et concaténation?
      Salut !

      Je viens de comprendre private sub et public sub.
      J'ai crée 2 modules.
      Dans le module 1 j'ai une private sub (test) et une public sub (test2)

      Dans le module 2 je ne peux que faire appel qu'à la fonction publique (test2).
      Mais je me demande toujours à quoi ça sert ?

      Peut-être que c'est pour moins s'emmêler les pinceaux quand on code un gros programme...


      "Pour le code j'ai pas lu beaucoup, mais je sens une mauvaise habitude, par exemple, dans ta boucle infinie, tu déclares tes variables dedans, hors je pense plus propre et plus optimisé de déclarer ta variable en dehors, je vais essayer de donner un exemple en Visual Basic, ça risque d'être pas beau c'est ma 1ère ligne "

      J'ai en effet mis une variable dans la boucle dans la fonction principale (main)..

      Code:
      Dim bool As Boolean = True
              While (bool = True)
      Dim lvl as integer = 1
      
      [...]
      
      End while
      La variable "lvl" était inutile, je l'avais déjà déclarée.
      Une erreur de ma part !

      Mais la prochaine fois je ferrai attention de ne pas mettre des variables dans des boucles.

      Code:
      lettre = ChrW(alea.Next(Asc("a"), Asc("h")))
      J'avoue avoir mal codé.
      A vrai dire, j'ai pris le code aléatoire d'un autre projet, je l'ai simplement C/C, je n'ai pas pensé à enlever la boucle.
      C'est vraiment une erreur bête en plus !

      J'ai mis de 0 à 0, pour générer un seul caractère, je ne sais pas ce qui m'est passé par la tête, j'ai surement cru que l'aléatoire était dépendant de la boucle for..

      Commentaire


      • #4
        Je t'ai dis ce que voulais dire public et private, c'est une histoire d'accessibilité...

        Après entre module, classe ou autres, ne connaissant pas la syntaxe difficile de te dire précisément les accès possibles, regarde du côté de la documentation c'est sans doute spécifié.

        La variable "lvl" était inutile, je l'avais déjà déclarée.
        Oui mais regarde dans mon code je spécifie la déclaration sans valeur et indique la valeur dans la boucle, dans mon cas c'est obligatoire, je suis cohérent. Mais en effet dans ton cas, c'était inutile.

        Mais la prochaine fois je ferrai attention de ne pas mettre des variables dans des boucles.
        Non le problème est de déclarer une variable dans la boucle

        Maintenant, je pense qu'on peut arriver à un beau code si on travaille par étape, si tu le veux, comment as-tu découper la solution à ta problématique ? Que doit faire ce code ?

        À quel endroit veux-tu qu'on t'aide ?
        Dernière modification par fred, 08 août 2014, 23h43.

        Commentaire


        • #5
          Maintenant, je pense qu'on peut arriver à un beau code si on travaille par étape, si tu le veux, comment as-tu découper la solution à ta problématique ? Que doit faire ce code ?

          À quel endroit veux-tu qu'on t'aide ?
          J'ai voulu crée un petit programme pour me remettre à niveau suite à quelques semaines sans programmation.
          Créer un mini-jeu me paraissait être un bonne idée.

          Je n'ai pas besoin d'aide, j'ai seulement besoin d'avis à propos du code.
          Etant encore un débutant, je ne voulais que savoir si mon code était propre, bien organisé, bref "potable".

          C'est mon premier programme qui a abouti d'ailleurs !

          Je pense avoir eu mes réponses et mes critiques, je te remercie de ton aide !

          Commentaire

          Chargement...
          X