nanDECK - Tutorial C
This tutorial was written for nanDECK 1.8a (or later versions).
First, we define a label:
[LAB1]="Alpha"
This label can be used later with script commands like:
FONT="Arial", 72, "", "#000000"
TEXT="1", [LAB1], 0, 0, 6, 9, "center", "center",
90
For this result:
Easy, no? But we can add some parameters to the label's definition, like a repeat number:
[LAB1]3="Alpha"
FONT="Arial", 32, "", "#000000"
TEXT="1", [LAB1], 0, 0, 6, 9, "center", "center",
90
And the label now is evaluated as "AlphaAlphaAlpha". The next step is introducing another parameter, a label prefix for permutations and combination, but before we must define more than one object ("Alpha") using "|" character:
[LAB1]="A|B|C"
Now if we want a combination of two objects from our set of three, we can write:
C[LAB1]2="A|B|C"
This label will be translated into "AB|AC|BC" in the code execution (every combination of two elements from a set of three). If we want a permutation instead, we can write:
P[LAB1]2="A|B|C"
And the resulting label will be "AB|AC|BA|BC|CA|CB". Remember, in a permutation the order of the elements is important, AB is different from BA.
How we can use this label? With a code like this we can have all permutation of three elements, one on every card:
P[LAB1]3="A|B|C"
FONT="Arial", 72, "", "#000000"
TEXT="1-6", [LAB1], 0, 0, 6, 9, "center", "center",
90
By pressing "Validate deck" button, the program gives you this intermediate code:
P[LAB1]3="A|B|C"
FONT="Arial", 72, "", "#000000"
TEXT="1-6", "ABC|ACB|BAC|BCA|CAB|CBA", 0, 0, 6, 9, "center",
"center", 90
And these are the cards (resulting from "Build deck"
function):
But you can have repetitions as well, with CR and PR prefix.
This code:
CR[LAB1]3="A|B|C"
gives you this label: "AAA|AAB|AAC|ABB|ABC|ACC|BBB|BBC|BCC|CCC". And this code:
PR[LAB1]3="A|B|C"
will translate in:
"AAA|AAB|AAC|ABA|ABB|ABC|ACA|ACB|ACC|BAA|BAB|BAC|BBA|BBB|BBC|BCA|BCB|BCC|CAA|CAB|CAC|CBA|CBB|CBC|CCA|CCB|CCC
Remember that you aren't limited to single letter elements. You can write:
PR[LAB1]3="Alpha|Beta|Gamma"
and you obtain this monstruosity (I've inserted some newline):
"AlphaAlphaAlpha|
AlphaAlphaBeta|
AlphaAlphaGamma|
AlphaBetaAlpha|
AlphaBetaBeta|
AlphaBetaGamma|
AlphaGammaAlpha|
AlphaGammaBeta|
AlphaGammaGamma|
BetaAlphaAlpha|
BetaAlphaBeta|
BetaAlphaGamma|
BetaBetaAlpha|
BetaBetaBeta|
BetaBetaGamma|
BetaGammaAlpha|
BetaGammaBeta|
BetaGammaGamma|
GammaAlphaAlpha|
GammaAlphaBeta|
GammaAlphaGamma|
GammaBetaAlpha|
GammaBetaBeta|
GammaBetaGamma|
GammaGammaAlpha|
GammaGammaBeta|
GammaGammaGamma"
With version 1.9b, I've introduced a couple of interesting features that can be used with the combination's engine: first, you haven't to specify beforehand the size of the deck. If you don't know how many cards will result from this:
PR[LAB1]3="A|B|C"
In the range parameter of a directive you can use this syntax:
TEXT=1-{(LAB1)},[LAB1],0,0,6,9,0
Remember, { and } are the expression's delimiters, ( and ) are the label's delimiters. The expression 1-{(LAB1)} will be converted in 1-27 at run-time.
Second, you can extract substrings from a label, using this syntax:
[LABEL:start character,number of characters]
How this can be used? If you want to create all combinations of plains, woods and mountains in a square tile with 4 triangles, you can use a script like this:
cardsize=4,4
[quarter1]=0,0,2,2,0,4
[quarter2]=0,0,4,0,2,2
[quarter3]=4,0,4,4,2,2
[quarter4]=0,4,2,2,4,4
pr[schema]4=P|F|M
[all]=1-{(schema)}
[color_p]=#00FF00
[color_f]=#008000
[color_m]=#C0C0C0
triangle=[all],[quarter1],[color_[schema:1,1]]
triangle=[all],[quarter2],[color_[schema:2,1]]
triangle=[all],[quarter3],[color_[schema:3,1]]
triangle=[all],[quarter4],[color_[schema:4,1]]
With [color_schema:1,1]] the program extracts the first letter of the label, adds color_ before it, and it will result in a color label.
This is the result (four pages):
You can download this script from here and the PDF from here.
The last script creates 81 tiles, but they aren't unique: you'll find a lot ot rotated tiles. With version 1.9c I've introduced a flag useful to remove rotations from combination/permutation output (only if applied in circular pattern); if you change this line:
pr[schema]4=P|F|M
with this line (adding an "x"):
prx[schema]4=P|F|M
The output will be made of 24 unique tiles.
Bye,
/\/and