%include "parameter" || parameter.m %include "zellen" || zellen.m || Die Steine haben die folgenden Operationen: abstype tstein with neuerstein :: num -> tstein || jeder Zahl ist ein Stein zugeordnet steindrehen :: tstein -> tstein steinlinks :: tstein -> tstein steinrechts :: tstein -> tstein steinunten :: tstein -> tstein gibkoordinaten:: tstein -> (num,num) steinstruktur :: tstein -> tzellen || Im Stein sind also die Koordinaten bezueglich des || Spielfeldes miteinkodiert ||----------------------------------------------- || Implementation: || Die Steine benutzen Zellstrukturen, siehe zellen.m || || Genauer bestehen Steine aus: || x,y - Koordinate || Einer Liste von einzelnen Zellstrukturen, die jeweils einen || einen Stein in einer bestimmten Drehung darstellen. tstein == (koordinatex,koordinatey,[tzellen]) koordinatex == num koordinatey == num neuerstein nummer = langer, if nummer = 0 = quadrat, if nummer = 1 = sform, if nummer = 2 = sspiegel, if nummer = 3 = lform, if nummer = 4 = lspiegel, if nummer = 5 = tform, if nummer = 6 = neuerstein (nummer mod 7), otherwise where || Erzeugung der Steine (Zellstrukturlisten): || Startposition ist in der Mitte, weit oben. langer = (breite div 2 - 2,-3,(map neuezellen maskelanger)) maskelanger = [(4,4,"0100 0100 0100 0100"), (4,4,"0000 1111 0000 0000")] ++ maskelanger quadrat = (breite div 2 - 1,-1,(map neuezellen maskequadrat)) maskequadrat = [(2,2,"11 11")] ++ maskequadrat sform = (breite div 2 - 2,-2,(map neuezellen maskesform)) maskesform = [(3,3,"100 110 010"), (3,3,"011 110 000")] ++ maskesform sspiegel = (breite div 2 - 2,-2,(map neuezellen maskesspiegel)) maskesspiegel = [(3,3,"010 110 100"), (3,3,"110 011 000")] ++ maskesspiegel lform = (breite div 2 - 2,-2,(map neuezellen maskelform)) maskelform = [(3,3,"110 010 010"), (3,3,"001 111 000"), (3,3,"010 010 011"), (3,3,"000 111 100")] ++ maskelform lspiegel = (breite div 2 - 2,-2,(map neuezellen maskelspiegel)) maskelspiegel = [(3,3,"011 010 010"), (3,3,"000 111 001"), (3,3,"010 010 110"), (3,3,"100 111 000")] ++ maskelspiegel tform = (breite div 2 - 2,-2,(map neuezellen masketform)) masketform = [(3,3,"000 111 010"), (3,3,"010 110 010"), (3,3,"010 111 000"), (3,3,"010 011 010")] ++ masketform || aktuelle Drehung ist die vorderste steinstruktur (x,y,steine) = hd steine || drehen: (Elegant, was?) steindrehen (x,y,steine) = (x,y,tl steine) steinlinks (x,y,stein) = (x-1,y,stein) steinrechts (x,y,stein) = (x+1,y,stein) steinunten (x,y,stein) = (x,y+1,stein) gibkoordinaten (x,y,steine) = (x,y)