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 :

difficulté Objet,Fonction et Random chez les Abeilles


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 8
    Points
    8
    Par défaut difficulté Objet,Fonction et Random chez les Abeilles
    Bonjour à tous !

    J'ai développer un petit programme en VB.net :
    Donc j'ai un objet bien structuré (j'éspère -_-") qui ce nomme "abeille"
    et cet objet possède différentes fonction simple permettant à cette abeille de ce mouvoir etc ... Problème je n'arrive pas à faire croitre la population d'abeille :
    En faite je ne trouve pas le moyen de crées une fonction naissance ...
    Qui ferais du genre : dim abeille2 as abeille, dim abeille3 as abeille et qui pour chaque abeille créerai un panel qui la représente.
    De plus quand je crée 2 abeilles manuellement la fonction random
    passe par les mêmes valeurs et les abeilles ce déplace en même temps.

    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
    Public Class Form1
        Dim Monabeille As abeille
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Monabeille = New abeille(Me.PAN_abeille.Location, Me.PAN_abeille.Size)
            Timer1.Start()
        End Sub
     
        Public Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            'On le fait avancer
            Monabeille.Avance()
            'On recupère la nouvelle position
            Me.PAN_abeille.Location = Monabeille.Position
            Me.PAN_abeille.BackColor = Monabeille.couleur
     
        End Sub
    End Class
    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
    Public Class abeille
        Dim random As New Random
        Private _CoordonneesActuelles As Point
        Private _Taille As Size
        Private _Direction As Integer
        Private _Couleur As Color
     
        Sub New(ByVal PositionOriginelle As Point, ByVal TailleAbeille As Size)
            _CoordonneesActuelles = New Point(PositionOriginelle)
            _Taille = New Size(TailleAbeille)
            _Direction = random.Next(0, 359)
            _Couleur = Color.FromArgb(255, 127, 128, 0)
        End Sub
     
        Public Sub Avance()
            _Direction = VarDir()
            _Couleur = VarColor()
            _CoordonneesActuelles = CoordonneesSuivante()
        End Sub
     
        Public Property Position() As Point
            Get
                Return _CoordonneesActuelles
            End Get
            Set(ByVal value As Point)
                _CoordonneesActuelles = value
            End Set
        End Property
     
        Public Property couleur() As Color
            Get
                Return _Couleur
            End Get
            Set(ByVal value As Color)
                _Couleur = value
            End Set
        End Property
     
        Private Function sin(ByVal x As Double)
            Return Math.Sin((Math.PI * (x - 90)) / 180)
     
        End Function
     
        Private Function cos(ByVal x As Double)
            Return Math.Cos((Math.PI * (x - 90)) / 180)
     
        End Function
     
        Private Function CoordonneesSuivante()
            _CoordonneesActuelles.X = _CoordonneesActuelles.X + 1 * cos(_Direction)
            _CoordonneesActuelles.Y = _CoordonneesActuelles.Y + 1 * sin(_Direction)
     
            Return _CoordonneesActuelles
     
        End Function
     
        Private Function VarColor()
            Return Color.FromArgb(255, _Couleur.R + 1, _Couleur.G - 1, 0)
        End Function
     
        Private Function VarDir()
            Dim A As Double
            Dim C As Double
     
            C = random.Next(0, 2)
            A = Math.Pow(random.Next(0, 160000), 1.0 / 4.0)
            If C = 0 Then
                Return _Direction - 20 + A
            Else : Return _Direction + 20 - A
            End If
        End Function
    End Class
    Merci beaucoup et 1000fois d'avances !

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    Bonjour,
    Pour le déplacement, c'est parce que ton attribut random n'est pas initialisé avec une seed différent.
    Classiquement on utilise le tick cpu pour faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    New Random(DateTime.Now.Ticks)
    Pour la naissance je ne saisie pas ton problème, un peu plus de détail sur la problématique serait bien venu.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Merci bien pour l'astuce ... (mais je n'arrive pas à l'appliquer ... mon programme ne tourne plus ...)
    je veut dire par naissance le faite de faire apparaitre une nouvelle abeille dans certaine condition ... donc se serai une fonction qui quand les paramètres sont adéquat crée un nouvelle abeille :

    if condition = true then
    dim abeillen°689 as new abeille
    ... ...

    et je n'arrive pas a faire ça ...
    les abeilles peuvent également mourir ...

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par konobee Voir le message
    Merci bien pour l'astuce ... (mais je n'arrive pas à l'appliquer ... mon programme ne tourne plus ...)
    C'est peut être un problème de conversion long vers int, l'exemple de la msdn utilise un décalage

    Pour les naissances/morts, un objet abeille seul ne peut rien faire, par contre ton objet ruche qui connait la position de toutes les abeilles peut faire cette évaluation pour chaque alvéole.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Voila c'est exactement ce que j'ai fait .... mais je ne sais pas comment faire en sorte que la ruche fabrique des abeilles ... j'ai tester des tableaux d'objet j'y arrive pas. Tout ce que je souhaite faire au final c'est de pouvoir crée un objet à chaque fois que j’appuie sur un bouton ...
    Comment en appuyant sur un bouton je peut faire apparaitre un objet (le panel représentant l'abeille + sont comportement) ?
    j'ai du mal à m'expliquer ^^

    En image :
    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
    Public Class Form1
        Dim Monabeille1 As abeille
        Dim Monabeille2 As abeille
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Monabeille1 = New abeille(200, 200)
            Monabeille2 = New abeille(200, 200)
     
            Timer1.Start()
        End Sub
     
        Public Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            'On le fait avancer
            Monabeille1.Avance()
            'On recupère la nouvelle position
            Me.PAN_abeille1.Location = Monabeille1.Position
            Me.PAN_abeille1.BackColor = Monabeille1.couleur
     
            'On le fait avancer
            Monabeille2.Avance()
            'On recupère la nouvelle position
            Me.PAN_abeille2.Location = Monabeille2.Position
            Me.PAN_abeille2.BackColor = Monabeille2.couleur
     
        End Sub
    End Class
    Je veut éviter de le faire comme ça .... surtout si je fais une ruche de plus de 1000 abeilles !! ^^
    ça serais bien si chaque objet s'occuper de son panel mais comment avec un code unique lier différent version de l'objet à différente version du panel ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    D'accord je vois le soucis.

    Une ruche c'est :
    - un ensemble d'alvéole
    - un ensemble d'abeille

    Si on devais transposer ca en jeu ludique, une ruche c'est :
    - un plateau de jeu => un tableau dimension 2
    - des pions => une liste
    - une gestion des tours

    Donc d'un point de vue informatique, tu dois avoir ces choses là
    - class ruche :
    -- gére la liste d'abeille
    -- gére le déplacement des abeille
    -- si des abeilles sont sur la même case : gére la naissance/mort d'abeille
    - class abeille :
    -- indique le déplacement de l'abeille
    -- indique si l'abeille peut se reproduire
    -- indique si l'abeille doit mourir
    - fenêtre ruche :
    -- timer pour gérer les tours (lancer le déplacement, lancer l’évolution de la vie)
    --- une fois le tour terminer, renseigner correctement les alvéoles.
    -- grille pour afficher les cases, et déléguer l'affichage de l'abeille
    - fenêtre alvéole (représentation de(s) l'abeille(s))
    -- coloration de l'abeille

    Comme tu le vois, ici la fenêtre alvéole n'a pas de timer, elle ne gére pas le mouvement. Elle ne fait que dessiner les abeilles qui sont dessus.
    La fenêtre ruche ne gére pas le mouvement non plus. Par contre elle a bien timer pour animer la fenêtre.
    C'est la classe ruche gére les déplacements. Et aussi naissance/mort en maintenant à jour la liste des abeilles.
    Et la fenêtre ruche, va se servir de cette liste pour créer la liste des fenêtre alvéoles.

    Je pense qu'il est important de séparer la représentation, de la gestion.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup pour ton aide j'y vois plus claire ^^
    j'ai refait tout mon programme avec la structure indiquer et ....
    je n'arrive toujours pas à passer de 1 à 2 abeilles sans la déclarer manuellement -_-"
    Comment la ruche crée un nouvelle objet ?
    Comment la fenêtre alvéole affiche cette objet ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    En ajoutant une abeille à ta liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim abeilless As New List(Of Abeille)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    abeilles.Add(New Abeille())
    Pour les alvéole, j’aurais de base pas choisis une Form, mais plutôt un usercontrol. Et ma fenêtre ruche aurait eu un flowpanel pour recevoir mes alvéoles.
    Ou alors un DataGridView dans la fenêtre ruche, et les alvéoles serait des DataGridViewCell

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Ultra merci !
    J'ai fait ça comme code pour le nid :
    (c'est pas exactement ce que tu ma dit mais j'essaye un peut de comprendre par moi même =] )
    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
    Public Class nid
        Dim abeilless As New List(Of abeille)
        Dim panelss As New List(Of Panel)
        Dim i As Integer = 0
     
        Public Sub Pas()
            i = 0
            For Each etre In abeilless
                etre.Avance()
                panelss(i).Location = etre.Position()
                panelss(i).BackColor = etre.couleur()
                panelss(i).Size = New Size(10, 10)
                i = i + 1
            Next
     
     
     
        End Sub
        Public Sub nee()
            abeilless.Add(New abeille(20, 20))
            panelss.Add(New Panel())
        End Sub
     
    End Class
    Mais le problème évidement c'est que les panels ne s'affiche pas ^^ une solution ?

  10. #10
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    Il faut ajouter tes panels à ta fenêtre, ou à un de ses contrôles enfants.
    Sinon personne ne sait qu'il faut afficher les panels.

    Regarde la propriété Controls. C'est elle qui gère les contrôles enfants.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Un petit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Form1.SuspendLayout()
    '[...]
    Form1.Controls.Add(panelss(i))
    Form1.ResumeLayout()
    et c'était fini !

    Merci Merci !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/08/2006, 22h58
  2. fonctions et classes... quand les utiliser ?
    Par fastmanu dans le forum Langage
    Réponses: 6
    Dernier message: 03/04/2006, 00h39
  3. references et objets fonctions
    Par Yoxoman dans le forum C++
    Réponses: 4
    Dernier message: 08/02/2006, 07h26
  4. Fonction de teste sur les voisins d'un point
    Par erkoil dans le forum OpenGL
    Réponses: 9
    Dernier message: 08/05/2005, 17h45

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