Brädspel/figurspel hex mönster

Nidvisa

Veteran
Joined
6 Dec 2019
Messages
79
Hej!

Jag håller på att göra ett enkelt figurspel för min barn och eftersom de kan räkna men absolut inte kan hantera någon form av mätverktyg så bestämde jag att vi skulle ha ett hexnät som bas. Nu är det så att jag inte hittar rätt storlek.

Det jag behöver hjälp mig är att skapa två pdfer. A1 storlek som är fylld med Hex i 2,5cm och en med 5 cm från punkt till punkt. Jag har själv tillgång till skrivare utan behöver bara filen.

Tack på förhand!
 
Hej!

Jag håller på att göra ett enkelt figurspel för min barn och eftersom de kan räkna men absolut inte kan hantera någon form av mätverktyg så bestämde jag att vi skulle ha ett hexnät som bas. Nu är det så att jag inte hittar rätt storlek.

Det jag behöver hjälp mig är att skapa två pdfer. A1 storlek som är fylld med Hex i 2,5cm och en med 5 cm från punkt till punkt. Jag har själv tillgång till skrivare utan behöver bara filen.

Tack på förhand!
finns massa liknande sidor, brukar funka fint! :D
 
Jag testade precis den du länka nu och testat custom size men det blev inte större än A3
 
Det går att generera med exempelvis python. Kolla om bifogade filer är ok.
Här är koden:
Code:
from reportlab.lib.pagesizes import A1
from reportlab.pdfgen import canvas
import math

def draw_hex_grid(filename, hex_diameter_cm):
    width, height = A1
    c = canvas.Canvas(filename, pagesize=A1)
    
    cm_to_pt = 28.3465
    d = hex_diameter_cm * cm_to_pt
    s = d / 2
    
    hex_height = d
    hex_width = math.sqrt(3) * s
    
    vert_spacing = 0.75 * hex_height
    horiz_spacing = hex_width
    
    y = 0
    row = 0
    
    while y < height + hex_height:
        x_offset = 0 if row % 2 == 0 else horiz_spacing / 2
        x = x_offset
        
        while x < width + hex_width:
            points = []
            for i in range(6):
                angle = math.radians(60 * i + 30)
                px = x + s * math.cos(angle)
                py = y + s * math.sin(angle)
                points.append((px, py))
            
            for i in range(6):
                x1, y1 = points[i]
                x2, y2 = points[(i+1)%6]
                c.line(x1, y1, x2, y2)
            
            x += horiz_spacing
        
        y += vert_spacing
        row += 1
    
    c.save()

draw_hex_grid("hex_2_5cm_A1.pdf", 2.5)
draw_hex_grid("hex_5cm_A1.pdf", 5)
 

Attachments

OBS! När du skriver ut dessa på en A1-skrivare, se till att inställningen står på "Faktisk storlek" (Actual Size) eller 100% skalning. Om skrivaren är inställd på "Anpassa till sida" (Fit to page) kan hexagonerna bli några millimeter mindre på grund av skrivarens marginaler.
 
Det går att generera med exempelvis python. Kolla om bifogade filer är ok.
Här är koden:
Code:
from reportlab.lib.pagesizes import A1
from reportlab.pdfgen import canvas
import math

def draw_hex_grid(filename, hex_diameter_cm):
    width, height = A1
    c = canvas.Canvas(filename, pagesize=A1)
   
    cm_to_pt = 28.3465
    d = hex_diameter_cm * cm_to_pt
    s = d / 2
   
    hex_height = d
    hex_width = math.sqrt(3) * s
   
    vert_spacing = 0.75 * hex_height
    horiz_spacing = hex_width
   
    y = 0
    row = 0
   
    while y < height + hex_height:
        x_offset = 0 if row % 2 == 0 else horiz_spacing / 2
        x = x_offset
       
        while x < width + hex_width:
            points = []
            for i in range(6):
                angle = math.radians(60 * i + 30)
                px = x + s * math.cos(angle)
                py = y + s * math.sin(angle)
                points.append((px, py))
           
            for i in range(6):
                x1, y1 = points[i]
                x2, y2 = points[(i+1)%6]
                c.line(x1, y1, x2, y2)
           
            x += horiz_spacing
       
        y += vert_spacing
        row += 1
   
    c.save()

draw_hex_grid("hex_2_5cm_A1.pdf", 2.5)
draw_hex_grid("hex_5cm_A1.pdf", 5)
Coolt, är det bara att spara det som ett python script och köra det så funkar det?
 
Ett bonus-tips är att man kan köra rutnätet i en bildredigerare med lagerfunktion (finns flera olika, även gratisversioner).
Lägg in rutnätet i ett lager och valfri karta i ett annat och skruva lite på hur genomskinliga de ska vara.
Vips kan du på tre minuter skapa funktionella spelplaner av vanliga terrängkartor, flygfoton, stadskartor, foton på figurspelsterräng, skisser, teckningar, eller vad som helst.

:t6r-5: :t6b-2:
//EvilSpook
 
Ett bonus-tips är att man kan köra rutnätet i en bildredigerare med lagerfunktion (finns flera olika, även gratisversioner).
Lägg in rutnätet i ett lager och valfri karta i ett annat och skruva lite på hur genomskinliga de ska vara.
Vips kan du på tre minuter skapa funktionella spelplaner av vanliga terrängkartor, flygfoton, stadskartor, foton på figurspelsterräng, skisser, teckningar, eller vad som helst.

:t6r-5: :t6b-2:
//EvilSpook
Det är min ide när jag kommit något längre. Men jag har lite inlärningskurva med bildredigering. Aldrig haft tiden eller fokuset att sitta med det men det ligger på att lära sig listan! Har du en bra for-dunmies guide så skicka gärna 🙂
 
Coolt, är det bara att spara det som ett python script och köra det så funkar det?
Ja precis :-) och du kan också ändra koden om du vill göra andra sorters rutor.

Om du sparar det som ett pythonskript, typ
skapapdf.py
Och sen installerar reportlab med t.ex.
pip install reportlab
Så kan du skapa pdf:erna igen med
python skapapdf.py

Ifall du behöver mer hjälp så säg till.
 
Har du en bra for-dunmies guide så skicka gärna 🙂
Är tyvärr inte så bra på det själv. Men har lekt lite i Paint.Net.

1) Öppna kartfilen i programmet
2) Välj Lager / Importera från fil (normalt läggs lagret med rutnätet över kartlagret)
3) Se till att lagren matchar varandra storleksmässigt och ligger som du vill ha dem.
4) Justera det övre lagrets opacitet under lageregenskaper så att kartan/rutnätet blir så tydliga som du vill ha dem..
När du är nöjd:
5) Välj bild / förena alla lager.
6) Spara i det format du vill ha.
På så sätt kommer man ganska långt som n00b. Folk som verkligen vet nåt har säkert bättre guider.

:t6r-5: :t6b-2:
//EvilSpook
 
Jag vet att många här inte gillar AI, men jag lät ChatGPT göra något som motsvarande pythonkoden fast med ett användargränssnitt. I programmet kan man ange om rutnätet ska vara kvadrater eller hexes, pappersstorlek, linjestorlek och färg etc. och så genereras en pdf man kan skriva ut.

I zip-filen finns en html-fil, så extrahera filen och öppna den så öppnas programmet i din webbläsare.
Man behöver alltså inte installera något för att köra detta, inte python eller något, man kör det bara i webbläsaren trots att filen ligger lokalt på datorn.



EDIT: Fixade en bugg den hade med utskriften.
 

Attachments

Last edited:
Ja precis :-) och du kan också ändra koden om du vill göra andra sorters rutor.

Om du sparar det som ett pythonskript, typ
skapapdf.py
Och sen installerar reportlab med t.ex.
pip install reportlab
Så kan du skapa pdf:erna igen med
python skapapdf.py

Ifall du behöver mer hjälp så säg till.
Jag ska kolla närmare på det ikväll när det finns lite mer tid! Tack!
 
Är tyvärr inte så bra på det själv. Men har lekt lite i Paint.Net.

1) Öppna kartfilen i programmet
2) Välj Lager / Importera från fil (normalt läggs lagret med rutnätet över kartlagret)
3) Se till att lagren matchar varandra storleksmässigt och ligger som du vill ha dem.
4) Justera det övre lagrets opacitet under lageregenskaper så att kartan/rutnätet blir så tydliga som du vill ha dem..
När du är nöjd:
5) Välj bild / förena alla lager.
6) Spara i det format du vill ha.
På så sätt kommer man ganska långt som n00b. Folk som verkligen vet nåt har säkert bättre guider.

:t6r-5: :t6b-2:
//EvilSpook
Det låter inte så svårt ändå! Absolut värt att titta på
 
Back
Top