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 :

Besoin d'un coup de pouce pour un débutant en POO


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    retraite
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraite

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Par défaut Besoin d'un coup de pouce pour un débutant en POO
    Bonjour

    Je veux créer une carte composée de carrés pour un jeu (adaptation d'un wargame). Ces carrés doivent être cliquables et je dois pouvoir trouver les cases adjacentes à une case cliquée.

    J'ai fait le code ci-dessous qui fonctionne mais je ne suis pas satisfait de cette programmation.

    J'ai bien utilisé des structures mais j'ai le sentiment confus qu'elles ne servent à rien

    Ce qui me chagrine le plus c'est la Private Sub tile_Click et sa fonction corrélée SurroundTiles : Je balaye toutes les cases de la carte pour trouver celles qui sont adjacentes à la case cliquée et pouvoir les modifier.

    Alors avec une petite carte comme l'exemple çà ne pose pas de problème mais avec une vrai carte de milliers de cases j'ai peur du résultat...

    Et là aussi je sens confusément qu'en se servant de la bonne manière des structures je pourrais obtenir directement les cases adjacentes sans avoir à balayer toute la carte. Mais je ne m'en sors pas

    Si une âme charitable pouvait m'aider un peu je lui en serais éternellement reconnaissant

    Merci d'avance

    Voici le code en question :

    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
    Imports System
    Imports System.IO
    Imports System.Windows.Forms
    Imports System.Windows.Forms.Control
     
    Public Structure Carte
        Public Const X As Integer = 14 'nbre de colonnes de la carte (A-N)
        Public Const Y As Integer = 12 'nbre de lignes de la carte (1-12)
    End Structure
     
    Public Structure Tuile 'des carrés
        Public Shared ref As String 'de la forme A1,B2,...
        Public Shared num As Integer 'no de la tuile sur la carte (1=A1, 2=A2,...13=B1,...168=N12)
        Public Const taille As Integer = 30 'cote de la tuile
    End Structure
     
    Public Class Form1
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            drawMap()
     
        End Sub
     
        Sub drawMap()
     
            Dim chgMap As Point = New Point(30, 30) 'position de la Picturebox de la carte dans la form
            Dim sizemap As Size = New Size(Carte.X * Tuile.taille, Carte.Y * Tuile.taille) 'taille de la Picturebox de la carte
     
            With pbMap
                .Size = sizemap
                .Location = chgMap
                .BorderStyle = BorderStyle.Fixed3D
                .BackColor = Color.LightCyan
            End With
     
            For c = 0 To Carte.X - 1 'balayage horizontal
                For r = 0 To Carte.Y - 1 'balayage vertical
                    Tuile.ref = ChrW(c + 65) & Trim((r + 1).ToString) 'ref de la case 
                    Dim chgTile As Point = New Point(c * Tuile.taille, r * Tuile.taille) 'position de la case dans la Picturebox
                    drawTile(chgTile)
                Next
            Next
     
        End Sub
     
        Sub drawTile(ByVal chg As Point)
     
            Dim tile As New Label 'çà peut être n'importe quel controle ou objet cliquable
            With tile
                .Size = New Size(Tuile.taille, Tuile.taille) 'taille de la case
                .Location = chg 'position de la case
                .FlatStyle = FlatStyle.Standard
                .BorderStyle = BorderStyle.Fixed3D
                .BackColor = Color.Transparent
                .Tag = RefToNum(Tuile.ref) 'transformation de la ref en numéro (sert à calculer les cases adjacentes)
                .Enabled = True
                .Cursor = IIf(.Enabled, Cursors.Hand, Cursors.Default)
                Me.ToolTip1.SetToolTip(tile, Tuile.ref)
                AddHandler .Click, AddressOf tile_Click
            End With
            pbMap.Controls.Add(tile)
     
        End Sub
     
        Function RefToNum(ByVal refTile As String) As Integer
     
            Dim noColonne As Integer = Asc(refTile.Substring(0, 1)) - 64 'la lettre
            Dim noLigne As Integer = Val(refTile.Substring(refTile.Length - 1)) 'le chiffre
            Return (noColonne - 1) * Carte.Y + noLigne
     
        End Function
     
        Function surroundTiles(ByVal NoCenterTile As Integer) As Integer()
     
            Dim tileN As Integer = NoCenterTile - 1
            Dim tileNE As Integer = NoCenterTile + Carte.Y - 1
            Dim tileE As Integer = NoCenterTile + Carte.Y
            Dim tileSE As Integer = NoCenterTile + Carte.Y + 1
            Dim tileS As Integer = NoCenterTile + 1
            Dim tileSW As Integer = NoCenterTile - Carte.Y + 1
            Dim tileW As Integer = NoCenterTile - Carte.Y
            Dim tileNW As Integer = NoCenterTile - Carte.Y - 1
     
            Dim myarray() As Integer
            Select Case NoCenterTile
                Case 1 'coin haut gauche
                    myarray = {NoCenterTile, tileE, tileSE, tileS}
                Case Carte.Y 'coin bas gauche
                    myarray = {NoCenterTile, tileN, tileNE, tileE}
                Case Carte.X * Carte.Y 'coin bas droite
                    myarray = {NoCenterTile, tileW, tileNW, tileN}
                Case (Carte.X - 1) * Carte.Y + 1 'coin haut droite
                    myarray = {NoCenterTile, tileS, tileSW, tileW}
                Case 2 To Carte.Y - 1 'bord gauche
                    myarray = {NoCenterTile, tileN, tileNE, tileE, tileSE, tileS}
                Case (Carte.X - 1) * Carte.Y + 2 To Carte.X * Carte.Y - 1 'bord droit
                    myarray = {NoCenterTile, tileS, tileSW, tileW, tileNW, tileN}
                Case Else 'autres cas
                    Select Case NoCenterTile Mod Carte.Y
                        Case 0 'bord bas
                            myarray = {NoCenterTile, tileW, tileNW, tileN, tileNE, tileE}
                        Case 1 'bord haut
                            myarray = {NoCenterTile, tileE, tileSE, tileS, tileSW, tileW}
                        Case Else 'cas général
                            myarray = {NoCenterTile, tileN, tileNE, tileE, tileSE, tileS, tileSW, tileW, tileNW}
                    End Select
            End Select
     
            Return myarray
     
        End Function
     
        Private Sub bEXIT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bEXIT.Click
     
            Application.Exit()
     
        End Sub
     
        Private Sub tile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
     
            For Each carre In pbMap.Controls
                If surroundTiles(sender.tag).Contains(carre.tag) Then
                    If carre.tag <> sender.tag Then
                        carre.Backcolor = Color.DarkCyan
                    End If
                End If
            Next
     
        End Sub
     
    End Class

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Les inconditionnels de l'Object te diront qu'il faut remplacer tes structures par des classes (remplacer le mot Structure par le mot Classe, c'est déjà de l'objet).
    Personnellement je dirai que, vu que tes structures ne contiennent aucune méthode, ni membre privé, et vu ton algorithme, je pense que la structure vaut bien l'objet : elle te permet d'organiser les données selon ta vision de l'algo, selon ta perception du "métier", ...

    Si tu veux passer à l'objet, c'est l'algorithme entier qu doit être repensé. Il te serait sans doute utile de commencer d'abord par quelques cours concernant la conception des objets ...

    Très bonne journée,


  3. #3
    Membre averti
    Homme Profil pro
    retraite
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraite

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Par défaut
    Bonjour Phil Rob,

    Merci pour ta réponse rapide.

    J'ai lu de manière approfondie Plassere bien entendu ainsi son "Mario" exemple.

    Je comprends tout à fait ces cours.

    Mon problème est que je n'arrive pas à les mettre en application. J'ai des années de programmation "procédurale" derrière moi et la POO n'est pas évidente pour moi. Ca va bien pour un programme simple comme "Mario" mais dès qu'il s'agit de programmes plus complexes, style mon wargame où j'ai des objets en pagaille (cases de carte, carte elle-même, unités avec plein de caractéristiques, météo...) çà coince comme le montre bien mon exemple.

    Dès que je programme je suis attiré par le procédural comme un aimant attire le fer

    Pourtant je sens qu'avec l'objet on peut faire de bien plus belles choses et bien mieux et plus efficace. Du style par exemple des skills pour assistant vocal; en "procédural" c'est la galère car il faut faire beaucoup de choses en très peu de temps et d'espace.

    cordialement,

    jlucG alias phantomas13

    P.S : mignon ton avatar

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    je suis attiré par le procédural comme un aimant attire le fer
    Je comprends ça , mais bon il ne faut tout jeter : les méthodes sont écrites en procédural !

    ... et bien mieux et plus efficace
    Là, çà dépend. Je vois sur les forums de nombreuses "classes" qui ne sont en fait que des structures, qui ont peu à voir avec l'orienté objet.

    Le plus "dur" avec l'objet (quand on n'est pas tombé dedans quand on était petit), c'est la conception du programme d'abord, des classes qui sont nécessaires ensuite, et la programmation correcte des classes pour finir : encapsulation, implémentation des membres requis par le cadre Coplien, implémentation de l'héritage (ou dérivation), implémentation ou pas du polymorphisme (c'est pas toujours nécessaire), implémentation d'opérateurs divers, ...), ...

    Mais c'est vrai qu'avec des classes bien conçues et bien programmées, on peut travailler ensuite plus efficacement qu'en procédural. Mais attention de ne pas tomber dans ce travers de construire un semi-remorque tout confort (dans la cabine du chauffeur : petit salon, cuisine, salle de bains, chambre, ...) quand le but du véhicule est de transporter un petit pois de Paris à Marseille. Envoyer le petit pois par courrier postal est bien plus simple et moins cher.
    Cet exemple n'est pas de moi, je dois l'avoir lu sur ce forum.

    Bon travail pour ta reconversion

  5. #5
    Membre averti
    Homme Profil pro
    retraite
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraite

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Par défaut
    et la programmation correcte des classes pour finir
    C'est çà mon plus gros problème. La conception du projet, les objets nécessaires ce n'est pas un souci

    Bien vu l'exemple du camion

    Mais je crois que pour mon wargame il me faut ce semi-remorque

    cdlt,

    jlucG

  6. #6
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    Citation Envoyé par phantomas13 Voir le message
    Bonjour

    Je veux créer une carte composée de carrés pour un jeu (adaptation d'un wargame). Ces carrés doivent être cliquables et je dois pouvoir trouver les cases adjacentes à une case cliquée.

    J'ai fait le code ci-dessous qui fonctionne mais je ne suis pas satisfait de cette programmation.

    J'ai bien utilisé des structures mais j'ai le sentiment confus qu'elles ne servent à rien

    Ce qui me chagrine le plus c'est la Private Sub tile_Click et sa fonction corrélée SurroundTiles : Je balaye toutes les cases de la carte pour trouver celles qui sont adjacentes à la case cliquée et pouvoir les modifier.

    Alors avec une petite carte comme l'exemple çà ne pose pas de problème mais avec une vrai carte de milliers de cases j'ai peur du résultat...

    Et là aussi je sens confusément qu'en se servant de la bonne manière des structures je pourrais obtenir directement les cases adjacentes sans avoir à balayer toute la carte. Mais je ne m'en sors pas
    Effectivement ton code comporte beaucoup de defauts.
    En POO il faut appeler un clou ,un clou pas autre chose et ne pas changer son nom au gré de l'humeur.
    Donc une grille ,une grille ou Grid.
    Mais c'est quoi un Grid .La plus simple représentation du concept(pensée) Grid c'et un support rigide(carton,bois,plastique) sur lequel on "dessinera" un tableau rectangulaire de cases (généralement "carré" mais peuvent être circulaire ou autre).
    Le fait que le tableau rectangulaire soit dessiné sur la grille est important :il signifie qu'il lui appartient et sans grille (support) ,adieu nos cases.
    Ah,ah et comment le traduire en code POO.
    Eh bien il faut être méthodique et logique :
    -le support rigide ce sera un Class Grid
    -un tableau de cases peut etre representé par un ArrayLabels 2D.
    Comme il appartient à la grille ,euh la Grid, ce sera donc un champ privé ou une prop publique.
    Que peut faire un tel objet comme le class Grid ?
    Il peut créer son tableau rectangulaire s'il connait ses dimensions ligne et colonne
    Mais le tableau contient quoi ? le contenu "dessiné" sur les cases.
    Il doit donc savoir "dessiner" son tableau rectangulaire pour etre utile
    Il faut donc faire appel à un maitre jacques qui sait dessiner lorsque on lui indique la bonne case et le motif à dessiner.
    C'est ce que fait le class PictureBox qui dessine le motif (un label) dans la case approprie reperée par ses coordonnées et store dans sa prop Controls.
    Le class Grid doit aussi nous indiquer ou se trouve chaque label dans son tableau rectangulaire.
    Ce dessin(label) est "storé" en parallèle dans notre Array2D .

    Maintenant revenons à ton code .
    Ton structure Carte est mal nommé et ne sert à rien.
    Je l'ai transformé en un objet POO plus utile :un class Position qui store l'indice de ligne & de colonne de l'Array2D pour chaque Label.
    Il suffit à la creation de chaque Label de memoriser une instance du class Postion dans sa prop Tag.
    Ensuite à l'utilisation du label il suffit de consulter sa "musette" (sac à dos moderne) pour connaitre sa ligne et colonne.

    Le class Position contient un prop NumTile en bonus.
    Revenons aux SurroundTiles mal désignés ,en fait c'est les labels premiers voisins (en fait il existe aussi les voisins des voisins etc...).
    Pour retrouvez les voisins du label ,le code que tu as donné est vraiment mal fagotté pour ne pas dire debile.
    Pour retrouver les premiers voisins il suffit de "pivoter" autour du label en cours.
    Pivoter d'un pas d'indice ligne et colonne de - 1 et +1 autour des indices ligne et colonne du label cliqué.
    Diable voilà une façon de voir le problème sous une autre lorgnette.!

    ton code lifté pour tenir compté de ces observations.
    1/ code .vb du class Position
    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
     
    Public Class Position
        Public Property Col As Integer
        Public Property Lig As Integer
        Public Property NumTile As Integer 'no de la tuile sur la carte (1=A1, 2=A2,...13=B1,...168=N12)
        Public Sub New()
            Col = 0
            Lig = 0
            NumTile = 0
        End Sub
        Public Sub New(iLig As Integer, iCol As Integer, iNumTile As Integer)
            Me.New() 'appel  default ctor
            Lig = iLig
            Col = iCol
            NumTile = iNumTile
        End Sub
    End Class
    1/ code .vb du class Grid(grille)
    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
     
    Public Class Grid ' une grille de carrés
     
    #Region "props shared publiques"
     
        'les props  shared  permettent de l'exterieur de personnaliser la
        'grid  :NbCol,NbLig,SizeTile
        Public Shared Property NbCol As Integer = 14 'nbre de colonnes de la carte (A-N)
        Public Shared Property NbLig As Integer = 12 'nbre de lignes de la carte (1-12)
        Public Shared Property SizeTile As Integer = 30 'cote de la tuile
    #End Region
    #Region "props publiques"
        'l'array 2D store une reference sur les controls Labels droppés sur le Pic
        'permet d'acceder à ceci par index de Ligne & Colonne
        Public Property ArrLabels() As Label(,) 'l'array 2D permet d'acceder aux les lables par Ligne,Col
     
    #End Region
    #Region "champs privés"
     
        Private mRefTile As String 'de la forme A1,B2,...
     
        'les labels des tiles sont regroués dans un tableau .Plus simples à initialiser
        Private LabelTiles As String(,)
     
        'taille de  la Grid (carte) .Peut etre modifie en vol de l'exterieur (du form user)
        'voir le ctor ci-apres
        Private SizeGrid As Size
     
     
        'offset ou decalage de l'origne(Location) du PictureBox
        Private OffsetGrid As Point = New Point(30, 30) 'position de la Picturebox de la carte dans la form
     
     
        ' Reference au PictureBox hote et au ToolTip
        Private Pic As PictureBox = Nothing
        Private TheToolTip As ToolTip = Nothing
     
        ' les maudits Voisins du Label cliqué.Un List(of T) simple à manipuler
        Private Neighbours As New List(Of Label)
    #End Region
     
     
        Public Sub New()
            ArrLabels = New Label(NbLig - 1, NbCol - 1) {}
            LabelTiles = New String(NbLig - 1, NbCol - 1) {}
            For i = 0 To NbLig - 1
                For j = 0 To NbCol - 1
                    Dim s As String = Chr(65 + j)
                    LabelTiles(i, j) = s
                Next
            Next
            SizeGrid = New Size(NbCol * SizeTile, NbLig * SizeTile)
     
            Neighbours = New List(Of Label)
        End Sub
        Public Sub New(iPic As PictureBox, iTooltip As ToolTip)
            Me.New()
            Pic = iPic
            With Pic
                .Size = SizeGrid
                .Location = OffsetGrid
                .BorderStyle = BorderStyle.Fixed3D
                .BackColor = Color.LightCyan
            End With
            TheToolTip = iTooltip
            Pic.Controls.AddRange(Neighbours.ToArray)
     
            CreateGrid()
        End Sub
     
        Private Sub CreateGrid()
     
            For col As Integer = 0 To Grid.NbCol - 1 'balayage horizontal
                For row As Integer = 0 To Grid.NbLig - 1 'balayage vertical
                    mRefTile = ChrW(col + 65) & Trim((row + 1).ToString) 'ref de la case 
                    Dim tileLocation As Point = New Point(col * Grid.SizeTile, row * Grid.SizeTile) 'position de la case dans la Picturebox
     
                    ArrLabels(row, col) = AddTile(tileLocation, row, col, mRefTile)
     
                Next
            Next
        End Sub
     
     
        Private Function AddTile(ByVal chg As Point, irow As Integer, icol As Integer, iRefTile As String) As Label
            Dim tile As New Label 'çà peut être n'importe quel controle ou objet cliquable
            With tile
                .Size = New Size(Grid.SizeTile, Grid.SizeTile) 'taille de la case
                .Location = chg 'position de la case
                .FlatStyle = FlatStyle.Standard
                .BorderStyle = BorderStyle.Fixed3D
                .BackColor = Color.BlueViolet
                .Tag = New Position(irow, icol, RefToNum(iRefTile))
                .Enabled = True
                .Cursor = IIf(.Enabled, Cursors.Hand, Cursors.Default)
                TheToolTip.SetToolTip(tile, iRefTile)
                AddHandler .Click, AddressOf tile_Click
            End With
            Pic.Controls.Add(tile)
            Return tile
        End Function
     
        Private Sub tile_Click(sender As Object, e As EventArgs)
            Dim lbl As Label = CType(sender, Label)
     
            Dim pos As Position = lbl.Tag
            Dim refCol As Integer = pos.Col
            Dim refLig As Integer = pos.Lig
            If Neighbours.Count > 0 Then
                For Each itemTile In Neighbours 'reset to default color
                    itemTile.BackColor = lbl.BackColor
                Next
            End If
     
            ' pivotage  autour du sender label
            For i As Integer = -1 To 1
     
                If refLig + i >= 0 And refLig + i <= NbLig - 1 Then 'on est dan les limite lignes de la Grid
                    For j As Integer = -1 To 1
                        If i = 0 And j = 0 Then Continue For 'saute car c'est le sender label
                        Dim toCol As Integer = refCol + j
                        If refCol + j >= 0 And refCol + j <= NbCol - 1 Then 'on est dan les limite colonnes de la Grid
                            Dim voisinTile As Label = ArrLabels(refLig + i, refCol + j)
                            voisinTile.BackColor = Color.Red
                            Neighbours.Add(voisinTile)
                        End If
                    Next
                End If
     
            Next
     
            Pic.Controls.AddRange(Neighbours.ToArray)
        End Sub
     
        Private Function RefToNum(ByVal refTile As String) As Integer
     
            Dim noColonne As Integer = Asc(refTile.Substring(0, 1)) - 64 'la lettre
            Dim noLigne As Integer = Val(refTile.Substring(refTile.Length - 1)) 'le chiffre
            Return (noColonne - 1) * Grid.NbLig + noLigne
     
        End Function
     
     
    End Class
    code .vb du form user avec la grille & ses paramètres par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Class TestGrille
        Private grille As Grid
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            grille = New Grid(PictureBox1, ToolTip1)
        End Sub
    End Class
    code .vb d'un form user ou la grille est paramétrée de l’extérieur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Class TestGrille2
        Private grille As Grid
        Private Sub TestGrille2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Grid.NbLig = 8
            Grid.NbCol = 8
            Grid.SizeTile = 64
            grille = New Grid(PictureBox1, ToolTip1)
        End Sub
    End Class
    Le code procédural non encapsulé dans un objet est un code ou seul celui qui l'as écrit peut s'y retrouver,c'est la jungle d’Amazonie.
    Je l'ai pratiqué en gwbasic,en fortran ,en pascal libre et abandonné depuis parce que il devient inefficient dès qu'on cherche à faire une appli complexe.
    bon code

Discussions similaires

  1. j'ai besoin du petit coup de pouce pour démarrer
    Par metou2703 dans le forum C++
    Réponses: 12
    Dernier message: 21/11/2008, 14h15
  2. [MySQL] Besoin d'un coup de pouce pour mon update
    Par oranocha dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/10/2007, 11h54
  3. [Fortran 95] Besoin d'un coup de pouce pour démarrer
    Par R_sponge dans le forum Fortran
    Réponses: 3
    Dernier message: 26/09/2007, 21h47
  4. besoin d'un coup de pouce pour strcmp
    Par echantillon dans le forum C
    Réponses: 17
    Dernier message: 04/01/2007, 20h43
  5. Besoin d'1 coup de pouce pour realiser une importation de BD
    Par gizmorambo dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/08/2005, 14h07

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