Hello ! Bon Nathan & Bouh2 ont fait un super truc en c# mais je n'ai pas réussis à mettre ça en VB.NET donc pour tout les gros débile dans mon genre voici un petit truc bricoler (vous emmerdez pas toutes façons ma méthode me suffit xD).
Donc j'ai fais un code tout moche en VB vous pouvez choisir le nombre de case par ligne et de ligne. J'ai inverser les lignes (assez salement, vu que je dessine qu'une moitié de case sur les côtés xD) parce que dans Dofus 1.29.1 c'est comme ça en tout cas, si dans 2.0 c'est l'inverse le code est bien plus propre à faire (tout retirer et laisse que ce qu'il y à après le else).
Vous pouvez chercher et dessiner par rapport au nombre total de case (vu qu'en 1.29 ça ne dit pas les retours à la ligne, à priori 2.0 c'est un nombre fixe donc simple, mais en 1.29 le nombre de cases change, j'ai 58X pour astrub 78X pour bonta par exemple).
Il y à 2 boutons et 3 NumericUpDown (nud_)
Public Class MapDraw
Dim nombreLigneLargeur As UInteger = 1
Dim nombreLigneHauteur As UInteger = 1
Dim caseTotal As UInteger
Dim listPoints As List(Of List(Of Point))
Private Sub MapDraw_Paint(sender As Object, e As PaintEventArgs, Optional fillIt As Boolean = False) Handles Me.Paint
e.Graphics.Clear(BackColor)
'Attention le script ne dessine une ligne sur deux (vu qu'une ligne est automatiquement dessiner, prenant les 4 bords de 4 carrés de 2 lignes)
'Le nombre de ligne en hauteur (attention -1)
Dim caseId As UInteger = 0
For hauteur As UInteger = 0 To nombreLigneHauteur - 1
'Le nombre de ligne en largeur (attention -1)
For ligne As UInteger = 0 To nombreLigneLargeur - 1
If (ligne = nombreLigneLargeur - 1) Then
If (hauteur Mod 2 = 0) Then
If (hauteur < nombreLigneHauteur - 1) Then e.Graphics.DrawLine(Pens.Black, New Point(96 + (ligne * 97), 49 + (hauteur * 50)), New Point(49 + (ligne * 97), 25 + (hauteur * 50)))
If (hauteur > 0) Then e.Graphics.DrawLine(Pens.Black, New Point(49 + (ligne * 97), 24 + (hauteur * 50)), New Point(96 + (ligne * 97), 0 + (hauteur * 50)))
Else
If (hauteur < nombreLigneHauteur - 1) Then e.Graphics.DrawLine(Pens.Black, New Point(96 + (ligne * 97), 49 + (hauteur * 50)), New Point(49 + (ligne * 97), 25 + (hauteur * 50)))
e.Graphics.DrawLine(Pens.Black, New Point(49 + (ligne * 97), 24 + (hauteur * 50)), New Point(96 + (ligne * 97), 0 + (hauteur * 50)))
End If
ElseIf (ligne = 0) Then
If (hauteur Mod 2 = 0) Then
If (hauteur < nombreLigneHauteur - 1) Then e.Graphics.DrawLine(Pens.Black, New Point(145 + (-1 * 97), 25 + (hauteur * 50)), New Point(97 + (-1 * 97), 49 + (hauteur * 50)))
If (hauteur > 0) Then e.Graphics.DrawLine(Pens.Black, New Point(97 + (-1 * 97), 0 + (hauteur * 50)), New Point(145 + (-1 * 97), 24 + (hauteur * 50)))
Else
If (hauteur < nombreLigneHauteur - 1) Then e.Graphics.DrawLine(Pens.Black, New Point(145 + (-1 * 97), 25 + (hauteur * 50)), New Point(97 + (-1 * 97), 49 + (hauteur * 50)))
e.Graphics.DrawLine(Pens.Black, New Point(97 + (-1 * 97), 0 + (hauteur * 50)), New Point(145 + (-1 * 97), 24 + (hauteur * 50)))
End If
e.Graphics.DrawLine(Pens.Black, New Point(49 + (ligne * 97), 24 + (hauteur * 50)), New Point(96 + (ligne * 97), 0 + (hauteur * 50)))
e.Graphics.DrawLine(Pens.Black, New Point(97 + (ligne * 97), 0 + (hauteur * 50)), New Point(145 + (ligne * 97), 24 + (hauteur * 50)))
e.Graphics.DrawLine(Pens.Black, New Point(145 + (ligne * 97), 25 + (hauteur * 50)), New Point(97 + (ligne * 97), 49 + (hauteur * 50)))
e.Graphics.DrawLine(Pens.Black, New Point(96 + (ligne * 97), 49 + (hauteur * 50)), New Point(49 + (ligne * 97), 25 + (hauteur * 50)))
Else
e.Graphics.DrawLine(Pens.Black, New Point(49 + (ligne * 97), 24 + (hauteur * 50)), New Point(96 + (ligne * 97), 0 + (hauteur * 50)))
e.Graphics.DrawLine(Pens.Black, New Point(97 + (ligne * 97), 0 + (hauteur * 50)), New Point(145 + (ligne * 97), 24 + (hauteur * 50)))
e.Graphics.DrawLine(Pens.Black, New Point(145 + (ligne * 97), 25 + (hauteur * 50)), New Point(97 + (ligne * 97), 49 + (hauteur * 50)))
e.Graphics.DrawLine(Pens.Black, New Point(96 + (ligne * 97), 49 + (hauteur * 50)), New Point(49 + (ligne * 97), 25 + (hauteur * 50)))
End If
Next
Next
Dim caseNumber As UInteger = 0
For ligne As UInteger = 0 To nombreLigneHauteur * 2 - 2
For nbCase As UInteger = 0 To nombreLigneLargeur - 1
If (ligne Mod 2 = 0) And (nbCase = nombreLigneLargeur) Then Exit For
Dim GD As UInteger = 49 + (nbCase * 97) - 1
If (ligne Mod 2 = 0) Then GD += 49
GD -= (5 * CStr(caseNumber).Length)
If (nbCase = nombreLigneLargeur - 1) Then
If (ligne Mod 2 = 1) Then
e.Graphics.DrawString(caseNumber, New Font("Arial", 12), New SolidBrush(Color.Red), New Point(GD, 15 + (ligne * 25)))
caseNumber += 1
End If
ElseIf (nbCase = 0) Then
If (ligne Mod 2 = 0) Then
If (ligne < nombreLigneHauteur - 1) Then e.Graphics.DrawString(caseNumber, New Font("Arial", 12), New SolidBrush(Color.Red), New Point(GD, 15 + (ligne * 25)))
If (ligne > 0) Then e.Graphics.DrawString(caseNumber, New Font("Arial", 12), New SolidBrush(Color.Red), New Point(GD, 15 + (ligne * 25)))
caseNumber += 1
Else
e.Graphics.DrawString(caseNumber, New Font("Arial", 12), New SolidBrush(Color.Red), New Point(GD, 15 + (ligne * 25)))
caseNumber += 1
End If
Else
e.Graphics.DrawString(caseNumber, New Font("Arial", 12), New SolidBrush(Color.Red), New Point(GD, 15 + (ligne * 25)))
caseNumber += 1
End If
Next
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
nombreLigneLargeur = nud_largeur.Value
nombreLigneHauteur = nud_hauteur.Value
Invalidate()
Text = (nombreLigneHauteur * (nombreLigneLargeur - 1)) & " + " & ((nombreLigneHauteur - 1) * (nombreLigneLargeur)) & " total: " & (nombreLigneHauteur * (nombreLigneLargeur - 1)) + ((nombreLigneHauteur - 1) * (nombreLigneLargeur))
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
caseTotal = nud_chercher.Value
For bcl = 1 To 30
For bcl2 = 1 To 30
If ((bcl * (bcl2 - 1)) + ((bcl - 1) * (bcl2)) = caseTotal) And (bcl < bcl2) And (bcl2 / 2 < bcl) Then
nombreLigneLargeur = bcl
nombreLigneHauteur = bcl2
GoTo fin
End If
Next
Next
MessageBox.Show("Impossible de trouver avec ces valeurs là !")
fin:
nud_largeur.Value = nombreLigneLargeur
nud_hauteur.Value = nombreLigneHauteur
Invalidate()
Text = (nombreLigneHauteur * (nombreLigneLargeur - 1)) & " + " & ((nombreLigneHauteur - 1) * (nombreLigneLargeur)) & " total: " & (nombreLigneHauteur * (nombreLigneLargeur - 1)) + ((nombreLigneHauteur - 1) * (nombreLigneLargeur))
End Sub
End Class
Alors comme tel ça fait que dessiner je sais pas si j'irais plus loin mais je compte faire un système simple qui fill chaque case pour dire ce qu'il y à.
Petit démo:
Cliquez pour révéler
Cliquez pour masquer
Loading Image
Edit: Rajout des numéros sur les cases.
D'ici demain soir je fais la colorisation des cases, cependant c'est inutile que je vous le partage parce que je vais le faire pour qu'avec le client Dofus 1.29.1 ça colore chaque case reçu ^^ [d'où la list(of list(of point)) en haut que j'ai pas retirer flemme :3]
Donc voilou voilou ! x) inutile tel quel (plus utile dans un bot socket avec le serveur qui reçoit les infos)