@numerix & @EyDu -> Danke noch für eure Vorschläge
Hier ist noch die dritte Variante. Habe die for...Schleifen noch in einer neuen Funktion 'create_poly_array' untergebracht. Das Code-Snippet enthält noch keine Klasse.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Skriptname derkai_05_02_03 (11.07.2008)
import Tkinter as tk
from math import sqrt,sin,cos,pi
from random import choice
def create_xyoffset(length):
"""Berechnet die XY-Versatzabstände"""
poly_data = [(cos(pi/3*x)*length,sin(pi/3*x)*length) for x in range(6)]
xa,ya = poly_data[0]
xb,yb = poly_data[1]
xc,yc = poly_data[5]
return (length+(xa-xb),yb-yc)
def create_hex_polygon(spiel_feld,length,xpos,ypos,farbe):
"""Erzeugt das grafische Sechseck-Objekt"""
poly_data = [(cos(pi/3*x)*length+xpos,
sin(pi/3*x)*length+ypos) for x in range(6)]
poly_obj = spiel_feld.create_polygon(
poly_data,outline="black",fill=choice(farbe))
return poly_obj
def create_poly_array(spiel_feld,xorg,yorg,spalten,zeilen,hex_laenge,farbe):
"""Platziere ein zweidimensionalen Sechseck-Array"""
xpos = xorg
ypos = yorg
toggle = 0
poly_id_list = []
#~~ Berechnung der XY-Versatzabstände für die Platzierung der Sechsecke
xoffset,yoffset = create_xyoffset(hex_laenge)
#~~ Poly Objekte platzieren
for x in xrange(spalten):
for y in xrange(zeilen):
poly_id = create_hex_polygon(spiel_feld,hex_laenge,xpos,ypos,farbe)
ypos += yoffset
poly_id_list.append(poly_id)
xpos += xoffset
if not toggle:
toggle = 1
ypos = yorg + yoffset/2.0
else:
toggle = 0
ypos = yorg
return poly_id_list
def main():
#~~ Erzeugt das Hauptfenster
master = tk.Tk()
spiel_feld = tk.Canvas(master, width=1024, height=768)
spiel_feld.pack()
HEX_LAENGE = 20.0 # Seitenlänge
XORG = 30 # X Start-Koordinate
YORG = 30 # Y Start-Koordinate
SPALTEN = 10 # Anzahl Spalten
ZEILEN = 10 # Anzahl Zeilen
HEX_FARBE = ("yellow","green","blue","red") # Zufalls-Farben
poly_id_list = create_poly_array(
spiel_feld,XORG,YORG,SPALTEN,ZEILEN,HEX_LAENGE,HEX_FARBE)
print poly_id_list
master.mainloop()
main()
Gruss wuf