IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Réalisation jeux nombre mystère [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Août 2011
    Messages : 103
    Points : 49
    Points
    49
    Par défaut Réalisation jeux nombre mystère
    Voila pour apprendre vb.net j'ai réalisé un petit jeu que tous le monde connais le nombre mystère.

    Bien entendu c'est un petit jeu qui n'as pas de fonctionnalité particulière mais le but était de m'excercé. C'est pour celà que je voudrai votre avis sur mon petit programme ?

    Par avance, je sais qu'il y a quelques trucs que je ne maitrise pas :
    - Fermeture avec la croix rouge ne ferme pas le programme
    - Pas assez de comentaires

    Votre avis m'interresse et aussi si vous avez quelque piste pour l'améliorer MERCI
    Fichiers attachés Fichiers attachés

  2. #2
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2006
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    Salut,

    Bravo déjà pour ce mini-jeux ^^.

    Concernant le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Dim maximun As Integer
        Dim nombreCoup As Integer
        Dim nbhasard As Integer
        Public Function getMax() As Integer
            Return maximun
        End Function
        Public Function getNbcoup() As Integer
            Return nombreCoup
        End Function
        Public Function getHasard() As Integer
            Return nbhasard
        End Function
    Pourquoi ne pas déclarer les variables en Public, comme ca tu les appelles directement sans avoir à passer par des fonctions.

    Après en ergonomie pure, je dirais que valider une MsgBox après chaque essais c'est en trop. Affiche le conseil dans un label plutot.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Août 2011
    Messages : 103
    Points : 49
    Points
    49
    Par défaut réalisation jeux nombre mystère
    Merci prologic d'avoir prit le temps de regarder mon p'tit programme et ainsi de me conseiller.

    Je vais tous de suite réaliser les modifications nécessaires.

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonsoir à vous tous,


    il est important de ne pas mettre des variables en publique. Si vous voulez qu'une variable soit visible à l'extérieur de la classe, passez par des propriétés, elle sont faite pour ça.

    Property sur Plasserre et un excellant article qui nous montre pourquoi les propriétés sont importante

    De plus le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Dim maximun As Integer
        Dim nombreCoup As Integer
        Dim nbhasard As Integer
        Public Function getMax() As Integer
            Return maximun
        End Function
        Public Function getNbcoup() As Integer
            Return nombreCoup
        End Function
        Public Function getHasard() As Integer
            Return nbhasard
        End Function
    a du sens car c'est l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Public ReadOnly Property Maximum As Integer
        Public ReadOnly Property nombreCoup As Integer
        Public ReadOnly Property nbhasard As Integer
    qui empêche toutes modifications de ces variables en dehors de la class, ceci fait en sorte que seul l'objet puisse contrôler son comportement.
    Avec le dernier code, vous pouvez dans une méthode quelconque du même objet modifier les propriété en accédant au variable privée que VS crée automatiquement pour vous (voir cours).

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    J'ai repris ton exemple avec une approche différente.
    Le code des fenêtres sert à la saisie et à la présentation.
    La classe gère les données.

    La fenêtre accueil permet le choix du niveau et la possibilité de rejouer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Option Explicit On
     
    Public Class Accueil
     
        Public fenNbMystere As nbmystere = New nbmystere
     
        Private Sub Bvalid_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Bvalid.Click
            Dim choix As Integer = 1
     
            If c1.Checked Then
                choix = 1
            ElseIf c2.Checked = True Then
                choix = 2
            ElseIf c3.Checked = True Then
                choix = 3
            End If
            Me.Hide()
            fenNbMystere.Choix = choix
            fenNbMystere.ShowDialog()
            If MessageBox.Show("Voulez-vous rejouer ?", "REJOUER", MessageBoxButtons.YesNo) = vbYes Then
                Me.Show()
            Else
                Me.Close()
            End If
        End Sub
     
    End Class
    La fenêtre nbmystère gére la saisie utilisateur et les informations destinées à celui-ci pour évoluer dans son jeu.
    Elle n'a pas de lien avec la fenêtre qui l'a appelée. (elle peut donc être réutilisable ailleurs)
    Elle ne gére pas l'évolution des données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Option Explicit On
     
    Public Class nbmystere
     
        Dim LeSecret As secret ' défini la classe du nombre secret
     
        Private mChoix As Integer
        Public WriteOnly Property Choix() As Integer
            Set(ByVal value As Integer)
                mChoix = value
            End Set
        End Property
     
        Private Sub Bok_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Bok.Click
            If TBnbsais.Text = "" Then
                MessageBox.Show("Veuillez saisir un nombre ")
            Else
                If LeSecret.TraiteNombre(Integer.Parse(TBnbsais.Text)) Then
                    MessageBox.Show("Vous avez trouvé le nombre en " & (LeSecret.TrouveEn) & " essais", "BRAVO !!!!")
                    Me.Close()
                Else
                    MessageBox.Show(LeSecret.info(), "Aide")
                End If
                Lcoup.Text = LeSecret.CoupsRestant.ToString()
                TBnbsais.Text = ""
                TBnbsais.Focus() 'facilité utilisateur en repositionnant le focus
            End If
            If LeSecret.CoupsRestant = 0 Then
                MessageBox.Show("Désolé, vous n'avez pu d'essais", "SNIF !!!")
                MessageBox.Show("Le résultat était : " & LeSecret.NbHasard)
                Me.Close()
            End If
        End Sub
     
        Private Sub nbmystere_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
            LeSecret = New secret(mChoix)
            Lcoup.Text = LeSecret.NombreCoup.ToString()
            MessageBox.Show("Vous devez trouver un nombre entre 0 et " & LeSecret.Maximum.ToString() & " en " & LeSecret.NombreCoup.ToString() & " essais !!")
        End Sub
     
    End Class
    La classe secret gère les données du jeu.
    Elle contient donc :
    - les données. (et les propriétés rattachées)
    - les méthodes qui font évoluer ces données et qui permettent de connaître différentes info sur celles-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    Option Explicit On
     
    ''' <summary>Gestion d'un nombre secret.</summary>
    ''' <remarks>La classe ne gére pas les affichages.</remarks>
    Public Class secret
        Const K_ECART As Integer = 10
     
        Private NombreSaisie As Integer = 0 ' sert pour donner une information
     
        Private mMaximum As Integer
        Public ReadOnly Property Maximum() As Integer
            Get
                Return mMaximum
            End Get
        End Property
     
        Private mNombreCoup As Integer
        Public ReadOnly Property NombreCoup() As Integer
            Get
                Return mNombreCoup
            End Get
        End Property
     
        Private mNbHasard As Integer
        Public ReadOnly Property NbHasard() As Integer
            Get
                Return mNbHasard
            End Get
        End Property
     
        Private mCoupsRestant As Integer
        Public ReadOnly Property CoupsRestant() As Integer
            Get
                Return mCoupsRestant
            End Get
        End Property
     
        ''' <summary>Constructeur initialisant les propriétés en fonctions du choix.</summary>
        ''' <param name="choix">Le choix du niveau.</param>
        Sub New(ByVal choix As Integer)
            Select Case choix
                Case 1
                    mMaximum = 100
                    mNombreCoup = 20
                Case 2
                    mMaximum = 150
                    mNombreCoup = 15
                Case 3
                    mMaximum = 200
                    mNombreCoup = 10
                Case Else
                    mMaximum = 100
                    mNombreCoup = 20
            End Select
            mCoupsRestant = mNombreCoup ' Note le nombre de coups autorisé
            mNbHasard = hasard(mMaximum)
        End Sub
        ''' <summary>Donne une indication en fonction du choix.</summary>
        ''' <returns>Le texte d'information donnant un indice.</returns>
        Public Function info() As String
            If NombreSaisie > 0 And NombreSaisie < mMaximum Then
                If NombreSaisie < mNbHasard Then
                    If NombreSaisie >= (mNbHasard - K_ECART) Then
                        Return ("Presque ! Plus grand !!!")
                    Else
                        Return ("Plus grand !!!")
                    End If
                Else
                    If NombreSaisie <= (mNbHasard + K_ECART) Then
                        Return ("Presque ! Plus petit !!!")
                    Else
                        Return ("Plus petit !!!")
                    End If
                End If
            Else
                Return ("Le nombre doit être compris entre 0 et " & mMaximum)
            End If
        End Function
        ''' <summary>Teste si le nombre correspond à la solution.</summary>
        ''' <param name="NbSaisie">Le nombre saisie par l'utiisateur.</param>
        ''' <returns>Vrai si OK.</returns>
        ''' <remarks>L'expression "NbSaisie = mNbHasard" renvoie une valeur VRAI ou FAUX, 
        ''' ce qui permet de réduire cette méthode à sa plus simple expression.</remarks>
        Public Function TraiteNombre(ByVal NbSaisie As Integer) As Boolean
            mCoupsRestant -= 1
            NombreSaisie = NbSaisie ' note la dernière saisie
            Return NbSaisie = mNbHasard
        End Function
        ''' <summary>Indique en combien de coups la solution a été trouvée.</summary>
        ''' <returns></returns>
        Public Function TrouveEn() As Integer
            Return mNombreCoup - mCoupsRestant
        End Function
     
        Private Function hasard(ByVal limite As Integer) As Integer
            Randomize()   ' Initialise le générateur de nombre aléatoire.
            Return CInt(Int((limite * Rnd()) + 1)) ' Génère un nombre aléatoire entre 1 et limite.
        End Function
     
    End Class
    Bon, il s'agit juste d'un exemple, hein. (il existe différentes façon pour passer les infos entre fenêtres, traiter les données, etc...) En espérant qu'il te donnera des idées pour ta programmation.
    (note : pas de gestion des erreurs ni de contrôle des saisies pour ne pas surcharger; à faire bien sur.)

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réalisation Jeux 2D Android C# / Java
    Par krys940 dans le forum Android
    Réponses: 1
    Dernier message: 08/05/2012, 03h28
  2. [AC-2003] Réaliser un nombre aléatoire entier
    Par ronibalbo dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/01/2011, 11h15
  3. [Source] Nombre mystère
    Par Musclor13 dans le forum Contribuez
    Réponses: 1
    Dernier message: 14/12/2008, 13h43
  4. Comment réaliser un nombre important de req en une seule fois?
    Par Jean_guy dans le forum Développement
    Réponses: 1
    Dernier message: 15/05/2008, 22h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo