Création de cartes avec des hexagones
- Troumad
- Dracoliche
- Messages : 14766
- Inscription : Dim 1 Avr 2012 15:38
- Localisation : Genas (F-69)
- Version de D&D préférée : AD&D2
- Univers de D&D préféré : ?
- Race : Humain
- Classe : Rôdeur
- Alignement : Chaotique Bon
- Dieu : ?
- Mini Feuille de perso : Terres de Leyt - Eterny :Les Pierres du Destin :► Afficher le texteMystarillia :► Afficher le texte► Afficher le texte
Création de cartes avec des hexagones
Bonjour
dernière version ici
Ce code python, à améliorer, génère un quadrillage hexagonal avec numérotation des cases : le fichier test.png
En modifiant le code, on peut choisir la longueur du côté de l'hexagone, le nombre d'hexagones en hauteur ou en largeur, la police, la couleur des traits...
Avec un peu d'expérience (que je n'ai pas avec python), on peut générer toutes ces modifications à travers d'une interface graphique.
nb : il faut le fichier arial.ttf dans le même répertoire pour que ça marche, à moins de mettre le lien vers le fichier aria.pdf de votre système.
dernière version ici
Ce code python, à améliorer, génère un quadrillage hexagonal avec numérotation des cases : le fichier test.png
En modifiant le code, on peut choisir la longueur du côté de l'hexagone, le nombre d'hexagones en hauteur ou en largeur, la police, la couleur des traits...
Avec un peu d'expérience (que je n'ai pas avec python), on peut générer toutes ces modifications à travers d'une interface graphique.
nb : il faut le fichier arial.ttf dans le même répertoire pour que ça marche, à moins de mettre le lien vers le fichier aria.pdf de votre système.
Code : Tout sélectionner
import math
from PIL import ImageFont, Image, ImageDraw
def ligne(x,y,image,i,j) :
image.line((math.floor(x[0]+3*L*i),math.floor(x[1]+math.sqrt(3)*L*j),math.floor(y[0]+3*L*i),math.floor(y[1]+math.sqrt(3)*L*j)), fill=(100,100,100,255), width=2)
def texte(pt,image,x,y) :
coordonnees=zero+f'{y}' # si on dépasse 9999, il faudra mettre 3
coordonnees=chr(ord('A')+x%26)+"-"+coordonnees[dec::]
xx=x//26
while (xx>0) :
coordonnees=chr(ord('A')+xx%26-1)+coordonnees
xx=xx//26
image.text((math.floor(pt[0]+3*L*math.floor(x/2))+1,math.floor(pt[1]+math.sqrt(3)*L*y)+1), coordonnees, fill=(0,0,0,255),font=font)
L=60 # longueur d'un côté de l'hexagone
# calcul des 7 points du motif qu'on va dupliquer
A=(L/2,math.sqrt(3)*L)
B=(0,math.sqrt(3)*L/2)
C=(L/2,0)
D=(3*L/2,0)
E=(2*L,math.sqrt(3)*L/2)
F=(3*L/2,math.sqrt(3)*L)
G=(3*L,math.sqrt(3)*L/2)
# hauteur et largeur en hexxagone de la carte
w = 3
h = 11
w=-((-w)//2) # division entière avecarrondi au supérieur => double signe -
# création d'un nouvel objet image
img = Image.new("RGBA", (math.floor(w*L*3), math.floor(h*math.sqrt(3)*L)),(255,255,255,0))
# RGBA : dernier à 0 pour transparent, à 255 pour visible
font = ImageFont.truetype("arial.ttf", 11)
# pour savoir quel décalage il faut faire pour avoir toujours le même nombre de chiffre, mzi le moins possible
dec=-1
xx=h-1
zero=""
while xx>9 :
dec=dec-1
zero=zero+"0" # pas de limite à la taille...
xx=xx//10
img1 = ImageDraw.Draw(img)
for i in range(0, w):
for j in range(0,h):
ligne(A,B,img1,i,j)
ligne(B,C,img1,i,j)
ligne(D,C,img1,i,j)
ligne(D,E,img1,i,j)
ligne(E,F,img1,i,j)
ligne(E,G,img1,i,j)
texte(C,img1,2*i,j)
texte(E,img1,2*i+1,j)
img.show()
img.save("test.png", "png")
Dernière édition par Troumad le Lun 1 Déc 2025 15:24, édité 2 fois.
Création de feuilles de perso ADD, ADD2
[Dragonlance] Crépuscule d'automne : RiveBise
Terres de Leyt - Eterny Bondix
La pierre du Mal Alenthir, Aventures Orientales Chûzaemon, Héros d'un âge viking Björnulf Runison, le Sanctuaire de l'angoisse Feydarick, Terreur dans la Jungle Vanille, La dernière chance Go Gogne, Les mystères du Nyrond Lode, Mystarillia Vitavix
[Dragonlance] Crépuscule d'automne : RiveBise
Terres de Leyt - Eterny Bondix
La pierre du Mal Alenthir, Aventures Orientales Chûzaemon, Héros d'un âge viking Björnulf Runison, le Sanctuaire de l'angoisse Feydarick, Terreur dans la Jungle Vanille, La dernière chance Go Gogne, Les mystères du Nyrond Lode, Mystarillia Vitavix
- squilnozor
- Dracoliche
- Messages : 7666
- Inscription : Dim 1 Avr 2012 15:30
- Localisation : Rueil-Malmaison
- Version de D&D préférée : D&D
- Univers de D&D préféré : Mystara
- Race : ?
- Classe : ?
- Alignement : ?
- Dieu :
Re: Création de cartes avec des hexagones
Merci mon Troumad.
Je le répète à chaque fois, même si c'est un peu anachronique, mais si on a juste un crayon, on peut aussi tracer un « mur de briques » qui est parfaitement équivalent aux hexagones.
Je le répète à chaque fois, même si c'est un peu anachronique, mais si on a juste un crayon, on peut aussi tracer un « mur de briques » qui est parfaitement équivalent aux hexagones.
traductions en ligne : boîte Master, Glantri, Age of Worms 1 à 8, etc.
En relecture / illustration / MEP : AoW 9 & 10
En cours de trad : WotI, AoW 11
ABEANT FURES MURES LEMURES
En relecture / illustration / MEP : AoW 9 & 10
En cours de trad : WotI, AoW 11
ABEANT FURES MURES LEMURES
- Troumad
- Dracoliche
- Messages : 14766
- Inscription : Dim 1 Avr 2012 15:38
- Localisation : Genas (F-69)
- Version de D&D préférée : AD&D2
- Univers de D&D préféré : ?
- Race : Humain
- Classe : Rôdeur
- Alignement : Chaotique Bon
- Dieu : ?
- Mini Feuille de perso : Terres de Leyt - Eterny :Les Pierres du Destin :► Afficher le texteMystarillia :► Afficher le texte► Afficher le texte
Re: Création de cartes avec des hexagones
Oui, mais, va faire ça en 3 secondes (maintenant que j'ai passé quelques temps à programmer, ça va vite !) :
https://troumad.org/OOo/hexa100x100.png
(le fond est transparent, pas évident à voir avec certains logiciels).
https://troumad.org/OOo/hexa100x100.png
(le fond est transparent, pas évident à voir avec certains logiciels).
Création de feuilles de perso ADD, ADD2
[Dragonlance] Crépuscule d'automne : RiveBise
Terres de Leyt - Eterny Bondix
La pierre du Mal Alenthir, Aventures Orientales Chûzaemon, Héros d'un âge viking Björnulf Runison, le Sanctuaire de l'angoisse Feydarick, Terreur dans la Jungle Vanille, La dernière chance Go Gogne, Les mystères du Nyrond Lode, Mystarillia Vitavix
[Dragonlance] Crépuscule d'automne : RiveBise
Terres de Leyt - Eterny Bondix
La pierre du Mal Alenthir, Aventures Orientales Chûzaemon, Héros d'un âge viking Björnulf Runison, le Sanctuaire de l'angoisse Feydarick, Terreur dans la Jungle Vanille, La dernière chance Go Gogne, Les mystères du Nyrond Lode, Mystarillia Vitavix
- Zedafty
- Dracoliche
- Messages : 2831
- Inscription : Mar 29 Sep 2020 15:31
- Localisation : Berdusk
- Version de D&D préférée : AD&D2.5
- Univers de D&D préféré : Royaumes Oubliés
- Race : Petites-gens
- Classe : Clerc
- Alignement : Neutre Bon
- Dieu : Cyrrollalee
Re: Création de cartes avec des hexagones
Oh ! C'est pratique ça ! Les grilles hexagonales sont assez pénibles à réaliser en se servant juste d'un logiciel de retouche d'images 
« Les Dieux ne jouent pas aux dés. » — Elminster
- Troumad
- Dracoliche
- Messages : 14766
- Inscription : Dim 1 Avr 2012 15:38
- Localisation : Genas (F-69)
- Version de D&D préférée : AD&D2
- Univers de D&D préféré : ?
- Race : Humain
- Classe : Rôdeur
- Alignement : Chaotique Bon
- Dieu : ?
- Mini Feuille de perso : Terres de Leyt - Eterny :Les Pierres du Destin :► Afficher le texteMystarillia :► Afficher le texte► Afficher le texte
Re: Création de cartes avec des hexagones
Soit tu maîtrises le python, soit tu me donnes ton cahier des charges et je peux essayer de faire ce que tu veux.
Création de feuilles de perso ADD, ADD2
[Dragonlance] Crépuscule d'automne : RiveBise
Terres de Leyt - Eterny Bondix
La pierre du Mal Alenthir, Aventures Orientales Chûzaemon, Héros d'un âge viking Björnulf Runison, le Sanctuaire de l'angoisse Feydarick, Terreur dans la Jungle Vanille, La dernière chance Go Gogne, Les mystères du Nyrond Lode, Mystarillia Vitavix
[Dragonlance] Crépuscule d'automne : RiveBise
Terres de Leyt - Eterny Bondix
La pierre du Mal Alenthir, Aventures Orientales Chûzaemon, Héros d'un âge viking Björnulf Runison, le Sanctuaire de l'angoisse Feydarick, Terreur dans la Jungle Vanille, La dernière chance Go Gogne, Les mystères du Nyrond Lode, Mystarillia Vitavix
- Wizzer
- Dracoliche
- Messages : 464
- Inscription : Mar 3 Jan 2023 14:08
- Localisation : Genève
- Version de D&D préférée : AD&D2
- Univers de D&D préféré : Planescape
- Race : ?
- Classe : ?
- Alignement : ?
- Dieu : ?
Re: Création de cartes avec des hexagones
Merci Troumad pour ce petit programme.
Il faut que je me trouve une carte pour l'essayer...
À l'époque j'avais des feuilles transparentes avec des hexagones dessus à poser sur une carte. De mémoire, il y en avait de deux tailles différentes. Elles venaient d'une boîte TSR de l'époque mais j'ai oublié laquelle.
Il faut que je me trouve une carte pour l'essayer...
À l'époque j'avais des feuilles transparentes avec des hexagones dessus à poser sur une carte. De mémoire, il y en avait de deux tailles différentes. Elles venaient d'une boîte TSR de l'époque mais j'ai oublié laquelle.
- Troumad
- Dracoliche
- Messages : 14766
- Inscription : Dim 1 Avr 2012 15:38
- Localisation : Genas (F-69)
- Version de D&D préférée : AD&D2
- Univers de D&D préféré : ?
- Race : Humain
- Classe : Rôdeur
- Alignement : Chaotique Bon
- Dieu : ?
- Mini Feuille de perso : Terres de Leyt - Eterny :Les Pierres du Destin :► Afficher le texteMystarillia :► Afficher le texte► Afficher le texte
Re: Création de cartes avec des hexagones
Petite amélioration du code :
Code : Tout sélectionner
import math
from PIL import ImageFont, Image, ImageDraw
def ligne(x,y,image,i,j) :
image.line((math.floor(x[0]+3*L*i),math.floor(x[1]+math.sqrt(3)*L*j),math.floor(y[0]+3*L*i),math.floor(y[1]+math.sqrt(3)*L*j)), fill=(192,192,192,255), width=3)
# couleur GM 192
def texte(pt,image,x,y) :
coordonnees=zero+f'{y}'
coordonnees=chr(ord('A')+x%26)+","+coordonnees[dec::] # dec<0 => on ne garde que |dec| terme à droite
xx=x//26 # il ne faut pas toucher à x => il sert à écrire le texte au bon emplacement
while (xx>0) :
coordonnees=chr(ord('A')+xx%26-1)+coordonnees
xx=xx//26 # division entière
image.text((math.floor(pt[0]+3*L*math.floor(x/2))+2,math.floor(pt[1]+math.sqrt(3)*L*y)+2), coordonnees, fill=(159,159,159,255),font=font)
# couleur GM 159
L=input("Longueur du côté de l'hexagone (défaut : 56) :")
try :
L=int(L)
except ValueError:
L=56
#L=56 # longueur d'un côté de l'hexagone : GM 56
print("L=",L)
# calcul des 7 points du motif qu'on va dupliquer
A=(L/2,math.sqrt(3)*L)
B=(0,math.sqrt(3)*L/2)
C=(L/2,0)
D=(3*L/2,0)
E=(2*L,math.sqrt(3)*L/2)
F=(3*L/2,math.sqrt(3)*L)
G=(3*L,math.sqrt(3)*L/2)
# hauteur et largeur en hexagone de la carte
w=input("nombre d'hexagones dans la largeur : ")
try :
w=int(w)
except ValueError:
w=0
while w<=0 :
w=input("Erreur d'entrée. Donnez le nombre d'hexagones dans la largeur : ")
try :
w=int(w)
except ValueError:
w=0
h=input("nombre d'hexagones dans la hauteur : ")
try :
h=int(h)
except ValueError:
h=0
while h<=0 :
h=input("Erreur d'entrée. Donnez le nombre d'hexagones dans la hauteur : ")
try :
h=int(h)
except ValueError:
h=0
print("dimension de la carte ",w,"hexagones x ",h,"hexagones")
w=-((-w)//2) # division entière avec arrondi au supérieur => double signe -
# création d'un nouvel objet image
img = Image.new("RGBA", (math.floor(w*L*3), math.floor(h*math.sqrt(3)*L)),(255,255,255,0))
# RGBA : dernier à 0 pour transparent, à 255 pour visible
font = ImageFont.truetype("arial.ttf", max(L//5,11))
# pour savoir quel décalage il faut faire pour avoir toujours le même nombre de chiffres, mais le moins possible
dec=-1
xx=h-1
zero=""
while xx>9 :
dec=dec-1
zero=zero+"0" # pas de limite à la hauteur...
xx=xx//10
coord=input("Avec (1) ou sans (0) coordonnées (0 ou 1) : ")
try :
coord=int(coord)
except ValueError:
coord=-1
while coord<0 or coord>1 :
coord=input("Erreur d'entrée. Avec (1) ou sans (0) coordonnées (0 ou 1) :")
try :
coord=int(coord)
except ValueError:
coord=-1
img1 = ImageDraw.Draw(img)
# duplication du motifs
for i in range(0, w): # ligne
for j in range(0,h): # colonne
ligne(A,B,img1,i,j)
ligne(B,C,img1,i,j)
ligne(D,C,img1,i,j)
ligne(D,E,img1,i,j)
ligne(E,F,img1,i,j)
ligne(E,G,img1,i,j)
if coord == 1 :
texte(C,img1,2*i,j)
texte(E,img1,2*i+1,j)
nom=input("nom du fichier (sans l'extention \".png\" : ")
img.save(nom+".png", "png")
voir=input("Voulez-vous voir l'image ? (o/n) : ")
if voir=="o" or voir=="O" :
img.show()Création de feuilles de perso ADD, ADD2
[Dragonlance] Crépuscule d'automne : RiveBise
Terres de Leyt - Eterny Bondix
La pierre du Mal Alenthir, Aventures Orientales Chûzaemon, Héros d'un âge viking Björnulf Runison, le Sanctuaire de l'angoisse Feydarick, Terreur dans la Jungle Vanille, La dernière chance Go Gogne, Les mystères du Nyrond Lode, Mystarillia Vitavix
[Dragonlance] Crépuscule d'automne : RiveBise
Terres de Leyt - Eterny Bondix
La pierre du Mal Alenthir, Aventures Orientales Chûzaemon, Héros d'un âge viking Björnulf Runison, le Sanctuaire de l'angoisse Feydarick, Terreur dans la Jungle Vanille, La dernière chance Go Gogne, Les mystères du Nyrond Lode, Mystarillia Vitavix
- ZikDragon
- Dragon d'argent
- Messages : 66
- Inscription : Lun 16 Sep 2024 08:19
- Localisation :
- Version de D&D préférée : ?
- Univers de D&D préféré : ?
- Race : ?
- Classe : ?
- Alignement : ?
- Dieu :
Re: Création de cartes avec des hexagones
Merci pour ce partage Troumad , plus qu'à acheter un bloc de feuilles transparentes imprimer tout ça en plusieurs tailles et plus aucune contrées ne sera plus non-hexagonée 
- Troumad
- Dracoliche
- Messages : 14766
- Inscription : Dim 1 Avr 2012 15:38
- Localisation : Genas (F-69)
- Version de D&D préférée : AD&D2
- Univers de D&D préféré : ?
- Race : Humain
- Classe : Rôdeur
- Alignement : Chaotique Bon
- Dieu : ?
- Mini Feuille de perso : Terres de Leyt - Eterny :Les Pierres du Destin :► Afficher le texteMystarillia :► Afficher le texte► Afficher le texte
Re: Création de cartes avec des hexagones
J'ai un peu rajouté des options. On peut par exemple, mettre des coordonnées autour de la grille :
Ça peut donner cette carte :
Création de feuilles de perso ADD, ADD2
[Dragonlance] Crépuscule d'automne : RiveBise
Terres de Leyt - Eterny Bondix
La pierre du Mal Alenthir, Aventures Orientales Chûzaemon, Héros d'un âge viking Björnulf Runison, le Sanctuaire de l'angoisse Feydarick, Terreur dans la Jungle Vanille, La dernière chance Go Gogne, Les mystères du Nyrond Lode, Mystarillia Vitavix
[Dragonlance] Crépuscule d'automne : RiveBise
Terres de Leyt - Eterny Bondix
La pierre du Mal Alenthir, Aventures Orientales Chûzaemon, Héros d'un âge viking Björnulf Runison, le Sanctuaire de l'angoisse Feydarick, Terreur dans la Jungle Vanille, La dernière chance Go Gogne, Les mystères du Nyrond Lode, Mystarillia Vitavix
- GAYAL
- Dracoliche
- Messages : 583
- Inscription : Dim 18 Sep 2022 16:19
- Localisation : MAUREPAS (78)
- Version de D&D préférée : AD&D1
- Univers de D&D préféré : Greyhawk
- Race : Gnome
- Classe : Clerc
- Alignement : Chaotique Neutre
- Dieu : ?
Re: Création de cartes avec des hexagones
J'y connais rien à rien à vos codes reptiliens mais je trouve que le résultat est bien 





