%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)