Pietのエディタを作った話7. 作った物(1)
• Unambi Sweeper
– Mine Sweeper とかいうパズルアクション
ゲームを改良した。
– 運ゲーになるのがウザかったので、必ず論理
的に解けるようにした。
– キーボードプレイがし易いように、UIも若⼲
改善した。
8. 作った物(2)
• Unimbi Sweeper
– さっきと何が違うんや。
• さっきのはUn a mbi、こっちはUn i mbi。
• UnambiはUnambiguous(=両義的でない)の略。
– Unambi SweeperをUnityに移植したやつ。
• だから Uni mbi。
– ただUnityを触りたいがために作った。
15. 蛇足
• David Morgan-Mar氏は、他にも Ook!
などいくつかのesolangを考案している。
– Ook!は、オランウータンの鳴き声"Ook.",
"Ook!", "Ook?"の3つのトークンを2つずつ組
み合わせて、Brainf*ckの8個の命令を置き換
えたもの。
• A, Misa, NyarukoなどBrainf*ckの派生は多い。
• 最初はMondrianにしようとしたが、既に
使われていたのでPietにしたらしい。
17. 色
• Pietで使う⾊は、6*3+2=20⾊。
• ⾊相: 赤→⻩→緑→シアン→⻘→マゼンタ→赤
• 明度: 明⾊→普通→暗⾊→明⾊
• 追加⾊は処理系によって⽩や⿊になる。
#C00000
dark red
#C0C000
dark yellow
#00C000
dark green
#00C0C0
dark cyan
#0000C0
dark blue
#C000C0
dark magenta
#FFC0C0
light red
#FFFFC0
light yellow
#C0FFC0
light green
#C0FFFF
light cyan
#C0C0FF
light blue
#FFC0FF
light magenta
#FF0000
red
#FFFF00
yellow
#00FF00
green
#00FFFF
cyan
#0000FF
blue
#FF00FF
magenta
#FFFFFF white #000000 black
32. コマンド一覧
• 例えば、移動元の⾊がlight redだとすると以下
のようになる。
• 次から各コマンドの説明。
pop multiply not switch in(number) out(char)
なし add divide greater duplicate in(char)
push substract mod pointer roll out(number)
変化なし 1段階 2段階 3段階 4段階 5段階
変化
なし
1段階
2段階
33. push & pop
• push
– 移動元のカラーブロックに含まれるcodelの数
をスタックにプッシュする。
• pop
– スタックから1つポップしてその値を破棄する。
40. roll詳説
• ちょっと分かりにくいので具体的に説明。
• {1, 2, 3, 4, 3, 2}とあった場合。
– 2, 3 とポップして、深さ3まで2回転すること
になる。
– 深さ3とは{1, 2, 3, 4}のうち{2, 3, 4}の部分。
– まず1回転すると{1, 4, 2, 3}。
– もう1回転で{1, 3, 4, 2}。
• こんな感じ。
72. イメージ
• 例えばこんな感じ(適当)。
int n;
cin >> n;
for(int i = 1; i < n + 1; ++i)
{
if (i % 15 == 0) cout << "FB";
else if (i % 3 == 0) cout << "F";
else if (i % 5 == 0) cout << "B";
else cout << i;
if (i < n) cout<< " ";
}
75. イメージ
• こんな感じ(超適当)。
void f1() {cout << "F";}
void f2() {cout << "F";}
void b() {cout << "B";}
int n;
cin >> n;
for(int i = 1; i < n + 1; ++i)
{
if (i % 15 == 0) {f2(); b();}
else if (i % 3 == 0) f1();
else if (i % 5 == 0) b();
else cout << i;
if (i < n) cout<< " ";
}