Da ich gerade einen Artikel über den kürzlich verstorbenen Theo Lutz gelesen habe, der als Pionierr der sogenannten diagitalen Posie gilt. Hab ich mal kurzerhand ein Programm von ihm versucht nachzumachen. Es "lutzt" Kafkas Das Schloss, so wie es das Programm von Theo Lutz auch tat. Man kann aber die verwendeten Wörter selbst editieren.
Also vieleicht hat ja jemand ein wenig Spass damit.
Code: Alles auswählen
;--------------------------------------
;--------- Lutzen von Caliban ---------
;--------- Idee von Theo Lutz ---------
;--------------------------------------
#Window = 0
Enumeration
#Editor
#Button
#Spin
#Text
EndEnumeration
Zeilen.i = 35
Global Dim Subjekt.s(15)
Global Dim Praedikat.s(15)
Global Dim Operator.s(2,2)
Global Dim Konstante.s(2)
Dim SubjektGadget(15)
Dim PraedikatGadget(15)
;Gadget Ids für String Felder
For i = 0 To 15
SubjektGadget(i) = 100 + i
PraedikatGadget(i) = 200 + i
Next i
; Daten einlesen
Restore Subjekte
For i.i = 0 To 15
Read.s Subjekt(i)
Next
Restore Praedikate
For i = 0 To 15
Read.s Praedikat(i)
Next
Restore Operatoren
For i = 0 To 2
For ii.i = 0 To 2
Read.s Operator(i,ii)
Next
Next
Restore Konstanten
For i = 0 To 2
Read.s Konstante(i)
Next i
Procedure.s Lutzen(Text.s = "")
;Subjekt bestimmen
;jedes Subjekt tritt mit der gleichen Wahrscheinlichkeit auf.
S = Random(15) ;Subjekt
;Geschlecht bestimmen
Select Left(Subjekt(S),3)
Case "der"
G.i = 0
Case "die"
G = 1
Case "das"
G = 2
EndSelect
Buffer.s + Operator(Random(2),G) + " "
Buffer + Mid(Subjekt(S),4) + " " + " ist " + Praedikat(Random(15))
If Text = ""
If Random(7) > 4 ;mit 5/8 Wahrscheinlichkeit kein Punkt
Buffer + Konstante(Random(2))
Buffer = Lutzen(Buffer + " ")
EndIf
Buffer + "."
EndIf
;Elementarsätze durchlogische Konstanten verknüpfen
ProcedureReturn UCase(Text + buffer)
EndProcedure
;-- Fenster zeichnen
StringW = 100
StringH = 20
EditorW = 450
ButtonH = 30
ButtonW = 50
SpinW = 35
SpinH = 20
TextH = 20
TextW = 80
padding = 5
x = padding
y = padding
WindowH = StringH * 16 + padding * 17 + ButtonH + padding
WindowW = 2* StringW + 3 * padding + EditorW + padding
OpenWindow(#Window,0,0,WindowW,WindowH,"Lutzen",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
EditorGadget(#Editor,x,y,EditorW,WindowH-2*padding,#PB_Editor_ReadOnly)
x + EditorW + padding
For i = 0 To 15
gy = y + (StringH+Padding)*i
StringGadget(SubjektGadget(i),x, gy, StringW,StringH,Subjekt(i))
StringGadget(PraedikatGadget(i),x+StringW+padding, gy, StringW,StringH,Praedikat(i))
Next
y = WindowH - ButtonH - padding
x = WindowW - ButtonW - padding
ButtonGadget(#Button,x,y,ButtonW, ButtonH, "Starten")
x = EditorW + 2 * padding
TextGadget(#Text, x, y+8, TextW,TextH,"Anzahl Zeilen")
x + TextW + padding
SpinGadget(#Spin,x,y+5,SpinW,SpinH,1,999,#PB_Spin_Numeric)
SetGadgetState(#Spin,35)
;-- Fenster Schleife
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
If EventGadget() = #Button
ClearGadgetItems(#Editor)
For i = 0 To 15
Subjekt(i) = GetGadgetText(SubjektGadget(i))
Praedikat(i) = GetGadgetText(PraedikatGadget(i))
Next
z = 1
Buffer.s = ""
For i = 1 To GetGadgetState(#Spin)
Buffer1.s = Lutzen()
l1 = Len(Buffer)
l2 = Len(Buffer1)
If l1+l2 > 27 And l1+l2 <59
AddGadgetItem(#Editor,z,Buffer+Buffer1)
z+1
Buffer = ""
Buffer1 = ""
ElseIf l1+l2 > 55
AddGadgetItem(#Editor,z,Buffer)
z+1
AddGadgetItem(#Editor,z,Buffer1)
z+1
Buffer = ""
Buffer1 = ""
EndIf
Buffer + Buffer1
Next
EndIf
EndIf
Until event = #PB_Event_CloseWindow
End
DataSection
Subjekte:
Data.s "der Graf","der Fremde","der Blick","die Kirche"
Data.s "das Schloss","das Bild","das Auge","das Dorf"
Data.s "der Turm","der Bauer","der Weg","der Gast"
Data.s "der Tag","das Haus","der Tisch","der Knecht"
Praedikate:
Data.s "offen","still","stark","gut","schmal","nah","neu"
Data.s "leise","fern","tief","spaet","dunkel","frei"
Data.s "gross","alt","wütend"
Operatoren:
Data.s "ein","eine","ein"
Data.s "jeder","jede","jedes"
Data.s "kein","keine","kein"
Data.s "nicht jeder","nicht jede","nicht jedes"
Konstanten:
Data.s " und"," oder",", so gilt"
EndDataSection