Dで右に移動 Sで下に移動 UでUndo 戻る RでRedo 先に進む 赤が黄色に重なると一応ゴール判定(?) 紫は赤を移動できる
関数の合成を利用したUNDO, REDOの実装。 1. 初期状態をData(実行上の初期状態の実体, 基準状態とでも名付ける)に移す 2. Data(基準状態)からHistory(行動関数の合成)を適応させた新状態をCurrentData(合成後の状態)にする 3. CurrentDataを描画する 4. ある一定回数の操作が行われれば過去のデータをDataとして初期化し直すことで多数の操作による計算を減らす 5. UNDO/REDOが行われた後の操作は以前の操作を上書きする ここで行動のログはリングバッファ等で実装すれば良いかも知れない。 状態をCとすると 右に行く関数は E: C → C 下にいく関数も S: C → C 初期状態C_0に対して右、下と入力するとバッファにE, Sと適応された関数が記録される。 ここでC_2 = S(E(C_0)) = (S○E)(C_0)となる。 一つ前に戻りたければ C_1 = E(C_0)を計算すれば良いわけです。