久々の夢日記。
さて、唐突ですが僕は一つだけ魔法が使えます。
それは、
「地面に置いたフォークとスプーンを自由に動かすことができる」
という魔法。
基本的に使い道はありません。
そんな魔法でちょっと遊んでみようと、ある日、
電車で帰る彼女を見送る時に使おうと思い立ちました。
電車の窓越しに手を振りながら、地面に置いたフォーク&ナイフも
あわせて手を振るように左右に動かすのです。
なんかちょっとファンシーな雰囲気狙い。
さて、いざ魔法を発動させようとしたところで、
一つ問題に気付きました。
この魔法には制限があって、基本的に一度に一つの動作しか
行うことができないのです。
例えば、
・フォークとスプーンを右に45度回転させる
で一つ終わり。
自由に動かすためには事前に動作を組み立てておき、
その順番で動かすいわば始動キーとなる魔法を使うという手順が
必要になります。
ここでは、
1.フォークとスプーンの位置を電車に対して垂直に初期化する。
2.フォークとスプーンを右に45度回転させる
3.フォークとスプーンを左に90度回転させる
4.フォークとスプーンを右に90度回転させる
5.3に戻る
となります。
そうです、まんまプログラムです。
ちなみにC言語的に書くと以下のようになります。(読み飛ばし可能)
/* フォークとスプーンに「バイバイ」させる魔法 */
/* フォークの先端位置Fposとスプーンの先端位置Sposは */
/* グローバル変数です(角度0:電車に対して垂直) */
void MagicByeBye()
{
Fpos = 0; /* フォークの先端位置を0で初期化 */
Spos = 0; /* スプーンの先端位置を0で初期化 */
/*フォークとスプーンを右に回転させる関数をコール */
TurnRightFandS(45); /* 右に45度回転 */
/* 回転後、0.5秒ウェイト */
WaitFandS(0.5);
while(0) /* 無限ループ */
{
TurnLeftFandS(90); /* 左に90度回転 */
/* 回転後、0.5秒ウェイト */
WaitFandS(0.5);
TurnRightFandS(90); /* 右に90度回転 */
/* 回転後、0.5秒ウェイト */
WaitFandS(0.5);
/* 満足したらループを抜ける */
if(IzumiManzoku() == TRUE)
{
break;
}
}
}
とまぁ、このような事前準備が必要なわけです。
しかし、ふと思いついたことで準備などできているはずもなく。
僕は微妙な表情で、いつも通りに彼女を見送ったのでした。
さて、唐突ですが僕は一つだけ魔法が使えます。
それは、
「地面に置いたフォークとスプーンを自由に動かすことができる」
という魔法。
基本的に使い道はありません。
そんな魔法でちょっと遊んでみようと、ある日、
電車で帰る彼女を見送る時に使おうと思い立ちました。
電車の窓越しに手を振りながら、地面に置いたフォーク&ナイフも
あわせて手を振るように左右に動かすのです。
なんかちょっとファンシーな雰囲気狙い。
さて、いざ魔法を発動させようとしたところで、
一つ問題に気付きました。
この魔法には制限があって、基本的に一度に一つの動作しか
行うことができないのです。
例えば、
・フォークとスプーンを右に45度回転させる
で一つ終わり。
自由に動かすためには事前に動作を組み立てておき、
その順番で動かすいわば始動キーとなる魔法を使うという手順が
必要になります。
ここでは、
1.フォークとスプーンの位置を電車に対して垂直に初期化する。
2.フォークとスプーンを右に45度回転させる
3.フォークとスプーンを左に90度回転させる
4.フォークとスプーンを右に90度回転させる
5.3に戻る
となります。
そうです、まんまプログラムです。
ちなみにC言語的に書くと以下のようになります。(読み飛ばし可能)
/* フォークとスプーンに「バイバイ」させる魔法 */
/* フォークの先端位置Fposとスプーンの先端位置Sposは */
/* グローバル変数です(角度0:電車に対して垂直) */
void MagicByeBye()
{
Fpos = 0; /* フォークの先端位置を0で初期化 */
Spos = 0; /* スプーンの先端位置を0で初期化 */
/*フォークとスプーンを右に回転させる関数をコール */
TurnRightFandS(45); /* 右に45度回転 */
/* 回転後、0.5秒ウェイト */
WaitFandS(0.5);
while(0) /* 無限ループ */
{
TurnLeftFandS(90); /* 左に90度回転 */
/* 回転後、0.5秒ウェイト */
WaitFandS(0.5);
TurnRightFandS(90); /* 右に90度回転 */
/* 回転後、0.5秒ウェイト */
WaitFandS(0.5);
/* 満足したらループを抜ける */
if(IzumiManzoku() == TRUE)
{
break;
}
}
}
とまぁ、このような事前準備が必要なわけです。
しかし、ふと思いついたことで準備などできているはずもなく。
僕は微妙な表情で、いつも通りに彼女を見送ったのでした。