Hallo derkai
Es geht gleich weiter. Hier habe ich einer der Vorschläge von 'numerix' in das bestehende Code-Snippet integriert.
Hier ist die erste Variante der Code-Reduzierung:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Skriptname derkai_05_02_01 (10.07.2008)
import Tkinter as tk
from math import sqrt,sin,cos,pi
from random import choice
def calculate_polygon_points(laenge,xorg,yorg):
"""Berechne die Eckpunkte für ein Sechseck"""
x1 = xorg
y1 = yorg
x2 = x1 + laenge
y2 = y1
x3 = x2 + (laenge/2.0)
y3 = y2 + ((laenge * sqrt(3)/2))
x4 = x2
y4 = (sqrt(3) * laenge) + y2
x5 = x1
y5 = y4
x6 = x1 - (laenge / 2.0)
y6 = y3
#~~ Gebe die berechneten Eckpunkte in einer Liste zurück
return [x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6]
def create_hex_polygon(spiel_feld,xpos,ypos,points,farbe):
"""Erzeugt das grafische Sechseck-Objekt"""
#~~ Variante 'numerix'
return spiel_feld.create_polygon([value+n%2*ypos+(n+1)%2*xpos for n,
value in enumerate(points)],outline="black",fill=choice(farbe))
def calculate_xyoffset(points):
"""Berechnet die X- und Y-Versatzabstände"""
x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6 = points
laenge = x2 - x1
xoffset = laenge + (x3-x2)
yoffset = y5 - y1
return (xoffset,yoffset)
def main():
#~~ Erzeugt das Hauptfenster
# master = Tk() -> (ersetzen durch folgende Zeile)
master = tk.Tk()
# spiel = Canvas(master, width=1024, height=768) (ersetzen durch folgende Zeile)
spiel = tk.Canvas(master, width=1024, height=768)
spiel.pack()
hex_laenge = 20 # Bestimmt die Sechseckgrösse
hex_xorg = 25
hex_yorg = 15
#~~ Eckpunkte für das Sechseck berechnen
hex_point_list = calculate_polygon_points(hex_laenge,hex_xorg,hex_yorg)
#~~ Horizontaler- & Vertikaler-Versatz die Sechseck-Platzierung berechnen
xoffset, yoffset = calculate_xyoffset(hex_point_list)
xpos = xorg = 10 # X Start-Koordinate
ypos = yorg = 10 # Y Start-Koordinate
columns = 30 # Anzahl vertikale Reihen
rows = 10 # Anzahl horizontale Reihen
farbe = ("yellow","green") # Zufalls-Farben
toggle = 0
#~~ Platziere den zweidimensionalen Sechseck-Array
for x in xrange(columns):
for y in xrange(rows):
create_hex_polygon(spiel,xpos,ypos,hex_point_list,farbe)
ypos += yoffset
xpos += xoffset
if not toggle:
toggle = 1
ypos = yorg + yoffset/2.0
else:
toggle = 0
ypos = yorg
master.mainloop()
main()
Mich bringen Einzeiler als Nicht-Apotheker immer noch zum stottern. Aber sie tragen schon viel zur Skript-Komprimierung bei.
Danke 'numerix' für deinen Vorschlag!
Als nächste zweite Variante versuche ich den Vorschlag von 'EyDu' zu integrieren, welcher wie ich jetzt schon vermute noch eine beachtlichere Code-Reduktion ergeben. wird. EyDu eventuell habe ich als Nicht-Mathematiker in einem nächsten Post noch ein(ige) Frage(n) an dich.
Auch dir vielen Dank für den Vorschlag!
Gruss wuf