2
# Copyright 2006 by Mark Weyer
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
# GNU General Public License for more details.
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
farben = 5 # Z�hlt nur die normalen Farben
26
dateien = 12 # Genauer: Dateien pro Farbe
35
pics = Wand * <farben>
39
startdist = "...AAAA...","...AAAA...","...AAAA...","...AAAA..."
41
neighbours = <neighbours_eight>
50
var besetzt=15; # Bitfeld mit Mauerinformation
51
var xp,yp,xv,yv,xr,yr; # p: Position.
52
# v und r: Vektor nach vorne und nach rechts
57
# Semantik: ist diese Position besetzt?
58
besetzt = besetzt@@(xp/2,yp/2).((1+(xp%2))*(1+3*(yp%2)));
63
if besetzt && farbe@@(xp/2,yp/2)==gold -> {
64
# Wir k�nnen doch hin und wir r�umen das Gold ab
66
besetzt@@(xp/2,yp/2) = 0;
71
semiglobal.init = {xp=5; yp=39; xv=0; yv=-1; xr=1; yr=0;};
73
semiglobal.keyleft = {xv@@=-xr; yv@@=-yr; xr@@=xv; yr@@=yv;};
74
semiglobal.keyright = {xv@@=xr; yv@@=yr; xr@@=-xv; yr@@=-yv;};
76
semiglobal.keyturn = {
77
xp+=xv; yp+=yv; besetzt_gold_test;
78
if besetzt -> {xp-=xv; yp-=yv;};
81
semiglobal.keyfall = {
82
xp-=xv; yp-=yv; besetzt_gold_test;
83
if besetzt -> {xp+=xv; yp+=yv;};
88
pics = mdZiegel.xpm, mdStein.xpm, mdHolz.xpm, mdFels.xpm, mdEisen.xpm
96
besetzt = linksoben+linksunten;
97
inhibit = DIR_R+DIR_UR+DIR_DR;
100
besetzt = linksoben+rechtsoben;
101
inhibit = DIR_D+DIR_DR+DIR_DL;
104
besetzt = rechtsoben+rechtsunten;
105
inhibit = DIR_L+DIR_UL+DIR_DL;
125
version==0 -> {besetzt = linksoben;};
126
version==1 -> {besetzt = rechtsoben;};
127
version==2 -> {besetzt = linksunten;};
128
version==3 -> {besetzt = rechtsunten;};
133
if besetzt!=0 -> {pos=version;*;}
134
else -> if loc_x!=xp@@/2 -> kind=Leer;
139
Leer = {<< default besetzt=0:reapply; >>}
142
pics = mdPlastik.xpm,
143
mdZiegel00.xpm, mdZiegel01.xpm, mdZiegel02.xpm, mdZiegel03.xpm,
144
mdZiegel04.xpm, mdZiegel05.xpm, mdZiegel06.xpm, mdZiegel07.xpm,
145
mdZiegel08.xpm, mdZiegel09.xpm, mdZiegel10.xpm, mdZiegel11.xpm,
147
mdStein00.xpm, mdStein01.xpm, mdStein02.xpm, mdStein03.xpm,
148
mdStein04.xpm, mdStein05.xpm, mdStein06.xpm, mdStein07.xpm,
149
mdStein08.xpm, mdStein09.xpm, mdStein10.xpm, mdStein11.xpm,
151
mdHolz00.xpm, mdHolz01.xpm, mdHolz02.xpm, mdHolz03.xpm,
152
mdHolz04.xpm, mdHolz05.xpm, mdHolz06.xpm, mdHolz07.xpm,
153
mdHolz08.xpm, mdHolz09.xpm, mdHolz10.xpm, mdHolz11.xpm,
155
mdFels00.xpm, mdFels01.xpm, mdFels02.xpm, mdFels03.xpm,
156
mdFels04.xpm, mdFels05.xpm, mdFels06.xpm, mdFels07.xpm,
157
mdFels08.xpm, mdFels09.xpm, mdFels10.xpm, mdFels11.xpm,
159
mdEisen00.xpm, mdEisen01.xpm, mdEisen02.xpm, mdEisen03.xpm,
160
mdEisen04.xpm, mdEisen05.xpm, mdEisen06.xpm, mdEisen07.xpm,
161
mdEisen08.xpm, mdEisen09.xpm, mdEisen10.xpm, mdEisen11.xpm,
163
mdPlastik00.xpm, mdPlastik01.xpm, mdPlastik02.xpm, mdPlastik03.xpm,
164
mdPlastik04.xpm, mdPlastik05.xpm, mdPlastik06.xpm, mdPlastik07.xpm,
165
mdPlastik08.xpm, mdPlastik09.xpm, mdPlastik10.xpm, mdPlastik11.xpm,
167
mdGold00.xpm, mdGold01.xpm, mdGold02.xpm, mdGold03.xpm,
168
mdGold04.xpm, mdGold05.xpm, mdGold06.xpm, mdGold07.xpm,
169
mdGold08.xpm, mdGold09.xpm, mdGold10.xpm, mdGold11.xpm,
171
mdBoden00.xpm, mdBoden01.xpm, mdBoden02.xpm, mdBoden03.xpm,
172
mdBoden04.xpm, mdBoden05.xpm, mdBoden06.xpm, mdBoden07.xpm,
173
mdBoden08.xpm, mdBoden09.xpm, mdBoden10.xpm, mdBoden11.xpm,
174
mdBoden12.xpm, mdBoden13.xpm, mdBoden14.xpm, mdBoden15.xpm
183
file = 5+(farben+2)*dateien + xp@@%2 - 2*(yp@@%2)
184
+ 2*(xv@@-xr@@) + 8*(xv@@!=0);
189
if yy<3 -> switch { # Reihe 5
191
xp=xp@@+xv@@*5-xr@@*5; yp=yp@@+yv@@*5-yr@@*5; besetzt_test;
193
file=farbe@@(xp/2,yp/2)*dateien+10;
194
[qu=Q_TL] *; [qu=Q_BL] *;
196
xp+=xr@@; yp+=yr@@; besetzt_test;
198
file=farbe@@(xp/2,yp/2)*dateien+11;
201
xp+=xr@@; yp+=yr@@; besetzt_test;
203
file=farbe@@(xp/2,yp/2)*dateien+12;
206
xp+=xr@@; yp+=yr@@; besetzt_test;
208
file=farbe@@(xp/2,yp/2)*dateien+10;
209
[qu=Q_TR] *; [qu=Q_BR] *;
213
xp=xp@@+xv@@*5-xr@@*2; yp=yp@@+yv@@*5-yr@@*2; besetzt_test;
215
file=farbe@@(xp/2,yp/2)*dateien+10;
216
[qu=Q_TL] *; [qu=Q_BL] *;
218
xp+=xr@@; yp+=yr@@; besetzt_test;
220
file=farbe@@(xp/2,yp/2)*dateien+11;
223
xp+=xr@@; yp+=yr@@; besetzt_test;
225
file=farbe@@(xp/2,yp/2)*dateien+10;
226
[qu=Q_TR] *; [qu=Q_BR] *;
230
xp=xp@@+xv@@*5+xr@@*2; yp=yp@@+yv@@*5+yr@@*2; besetzt_test;
232
file=farbe@@(xp/2,yp/2)*dateien+10;
233
[qu=Q_TR] *; [qu=Q_BR] *;
235
xp-=xr@@; yp-=yr@@; besetzt_test;
237
file=farbe@@(xp/2,yp/2)*dateien+12;
240
xp-=xr@@; yp-=yr@@; besetzt_test;
242
file=farbe@@(xp/2,yp/2)*dateien+10;
243
[qu=Q_TL] *; [qu=Q_BL] *;
247
xp=xp@@+xv@@*5+xr@@*5; yp=yp@@+yv@@*5+yr@@*5; besetzt_test;
249
file=farbe@@(xp/2,yp/2)*dateien+10;
250
[qu=Q_TR] *; [qu=Q_BR] *;
252
xp-=xr@@; yp-=yr@@; besetzt_test;
254
file=farbe@@(xp/2,yp/2)*dateien+12;
257
xp-=xr@@; yp-=yr@@; besetzt_test;
259
file=farbe@@(xp/2,yp/2)*dateien+11;
262
xp-=xr@@; yp-=yr@@; besetzt_test;
264
file=farbe@@(xp/2,yp/2)*dateien+10;
265
[qu=Q_TL] *; [qu=Q_BL] *;
270
switch { # Reihen 4 und 3
272
xp=xp@@+xv@@*4-xr@@*4; yp=yp@@+yv@@*4-yr@@*4; besetzt_test;
274
file=farbe@@(xp/2,yp/2)*dateien+8;
275
[qu=Q_TL] *; [qu=Q_BL] *;
277
xp+=xr@@; yp+=yr@@; besetzt_test;
279
file=farbe@@(xp/2,yp/2)*dateien+9;
282
xp+=xr@@; yp+=yr@@; besetzt_test;
284
file=farbe@@(xp/2,yp/2)*dateien+8;
285
[qu=Q_TR] *; [qu=Q_BR] *;
288
xp=xp@@+xv@@*3-xr@@*3; yp=yp@@+yv@@*3-yr@@*3; besetzt_test;
290
file=farbe@@(xp/2,yp/2)*dateien+5;
293
xp+=xr@@; yp+=yr@@; besetzt_test;
295
file=farbe@@(xp/2,yp/2)*dateien+6;
298
xp+=xr@@; yp+=yr@@; besetzt_test;
300
file=farbe@@(xp/2,yp/2)*dateien+7;
305
xp=xp@@+xv@@*4-xr@@*2; yp=yp@@+yv@@*4-yr@@*2; besetzt_test;
307
file=farbe@@(xp/2,yp/2)*dateien+8;
308
[qu=Q_TL] *; [qu=Q_BL] *;
310
xp+=xr@@; yp+=yr@@; besetzt_test;
312
file=farbe@@(xp/2,yp/2)*dateien+9;
315
xp+=xr@@; yp+=yr@@; besetzt_test;
317
file=farbe@@(xp/2,yp/2)*dateien+8;
318
[qu=Q_TR] *; [qu=Q_BR] *;
321
xp=xp@@+xv@@*3-xr@@*2; yp=yp@@+yv@@*3-yr@@*2; besetzt_test;
323
file=farbe@@(xp/2,yp/2)*dateien+6;
326
xp+=xr@@; yp+=yr@@; besetzt_test;
328
file=farbe@@(xp/2,yp/2)*dateien+7;
331
xp+=xr@@; yp+=yr@@; besetzt_test;
333
file=farbe@@(xp/2,yp/2)*dateien+5;
338
xp=xp@@+xv@@*4+xr@@*2; yp=yp@@+yv@@*4+yr@@*2; besetzt_test;
340
file=farbe@@(xp/2,yp/2)*dateien+8;
341
[qu=Q_TR] *; [qu=Q_BR] *;
343
xp-=xr@@; yp-=yr@@; besetzt_test;
345
file=farbe@@(xp/2,yp/2)*dateien+9;
348
xp-=xr@@; yp-=yr@@; besetzt_test;
350
file=farbe@@(xp/2,yp/2)*dateien+8;
351
[qu=Q_TL] *; [qu=Q_BL] *;
354
xp=xp@@+xv@@*3+xr@@*2; yp=yp@@+yv@@*3+yr@@*2; besetzt_test;
356
file=farbe@@(xp/2,yp/2)*dateien+7;
359
xp-=xr@@; yp-=yr@@; besetzt_test;
361
file=farbe@@(xp/2,yp/2)*dateien+6;
364
xp-=xr@@; yp-=yr@@; besetzt_test;
366
file=farbe@@(xp/2,yp/2)*dateien+5;
371
xp=xp@@+xv@@*4+xr@@*4; yp=yp@@+yv@@*4+yr@@*4; besetzt_test;
373
file=farbe@@(xp/2,yp/2)*dateien+8;
374
[qu=Q_TR] *; [qu=Q_BR] *;
376
xp-=xr@@; yp-=yr@@; besetzt_test;
378
file=farbe@@(xp/2,yp/2)*dateien+9;
381
xp-=xr@@; yp-=yr@@; besetzt_test;
383
file=farbe@@(xp/2,yp/2)*dateien+8;
384
[qu=Q_TL] *; [qu=Q_BL] *;
387
xp=xp@@+xv@@*3+xr@@*3; yp=yp@@+yv@@*3+yr@@*3; besetzt_test;
389
file=farbe@@(xp/2,yp/2)*dateien+5;
392
xp-=xr@@; yp-=yr@@; besetzt_test;
394
file=farbe@@(xp/2,yp/2)*dateien+7;
397
xp-=xr@@; yp-=yr@@; besetzt_test;
399
file=farbe@@(xp/2,yp/2)*dateien+6;
407
switch { # Reihen 2 und 1
409
xp=xp@@+xv@@*2-xr@@*2; yp=yp@@+yv@@*2-yr@@*2; besetzt_test;
411
file=farbe@@(xp/2,yp/2)*dateien+3;
414
xp+=xr@@; yp+=yr@@; besetzt_test;
416
file=farbe@@(xp/2,yp/2)*dateien+4;
420
xp=xp@@+xv@@-xr@@; yp=yp@@+yv@@-yr@@; besetzt_test;
422
file=farbe@@(xp/2,yp/2)*dateien+2;
425
xp+=xr@@; yp+=yr@@; besetzt_test;
427
file=farbe@@(xp/2,yp/2)*dateien+1;
432
xp=xp@@+xv@@*2-xr@@; yp=yp@@+yv@@*2-yr@@; besetzt_test;
434
file=farbe@@(xp/2,yp/2)*dateien+4;
437
xp+=xr@@; yp+=yr@@; besetzt_test;
439
file=farbe@@(xp/2,yp/2)*dateien+3;
443
xp=xp@@+xv@@-xr@@; yp=yp@@+yv@@-yr@@; besetzt_test;
445
file=farbe@@(xp/2,yp/2)*dateien+2;
448
xp+=xr@@; yp+=yr@@; besetzt_test;
450
file=farbe@@(xp/2,yp/2)*dateien+1;
455
xp=xp@@+xv@@*2+xr@@; yp=yp@@+yv@@*2+yr@@; besetzt_test;
457
file=farbe@@(xp/2,yp/2)*dateien+4;
460
xp-=xr@@; yp-=yr@@; besetzt_test;
462
file=farbe@@(xp/2,yp/2)*dateien+3;
466
xp=xp@@+xv@@+xr@@; yp=yp@@+yv@@+yr@@; besetzt_test;
468
file=farbe@@(xp/2,yp/2)*dateien+2;
471
xp-=xr@@; yp-=yr@@; besetzt_test;
473
file=farbe@@(xp/2,yp/2)*dateien+1;
478
xp=xp@@+xv@@*2+xr@@*2; yp=yp@@+yv@@*2+yr@@*2; besetzt_test;
480
file=farbe@@(xp/2,yp/2)*dateien+3;
483
xp-=xr@@; yp-=yr@@; besetzt_test;
485
file=farbe@@(xp/2,yp/2)*dateien+4;
489
xp=xp@@+xv@@+xr@@; yp=yp@@+yv@@+yr@@; besetzt_test;
491
file=farbe@@(xp/2,yp/2)*dateien+2;
494
xp-=xr@@; yp-=yr@@; besetzt_test;
496
file=farbe@@(xp/2,yp/2)*dateien+1;
508
-> if kind@(0,-1)==kind
509
-> {if kind@(-1,-1)!=kind -> D*;}
511
else if kind@(0,-1)==kind
516
-> if kind@(0,-1)==kind
517
-> {if kind@(1,-1)!=kind -> C*;}
519
else if kind@(0,-1)==kind
524
-> if kind@(0,1)==kind
525
-> {if kind@(-1,1)!=kind -> B*;}
527
else if kind@(0,1)==kind
532
-> if kind@(0,1)==kind
533
-> {if kind@(1,1)!=kind -> A*;}
535
else if kind@(0,1)==kind