« this は何? | トップページ | もやもやオータムズ(オブジェクトの解放に関して) »

2016年10月 8日 (土)

エンコード・デコードルーチンの実装(1)

LongDriver にプレイ図のエンコード・デコードルーチンを実装しました。現時点では1つのプレイ図にしか対応していませんが、いずれ複数のプレイ図を扱えるようにする予定です。その際、今回の実装が大幅に変更されるかも知れません。サンプルを示します。

プレイ図(プレイブック)を作成した後、 LongDriver の右上に有る [ Total ] をクリックするとメニューが表示されます。その中の [ Gen. Full Code ] をクリックするとプレイ図(プレイブック)がコード化されて小さなウィンドウに表示されます。それをコピーしてブログ等に貼り付けて使用します。上記画像がその例です。この画像も LongDriver そのものなので、この画像で操作することが出来ます。

ところで、このエンコード・デコードルーチンの実装では、いろいろ失敗が有り、また、モヤモヤしたまま取り敢えず実装してみたという箇所も有ります。

1つはリスト処理の初歩的な失敗です。リストの先頭と末尾の設定を勘違いして無限ループを引き起こしてしまいました。たとえば、リストの終端の設定が「設定1」になっているのに、「設定2」のつもりで「ループ」の実装をした訳です。その結果無限ループに入り、ブラウザを終了させる羽目になりました。


// 端末の設定1
    node.head.prev = node.tail;
    node.tail.next = node.head;

// 端末の設定2
    node.head.prev = null;
    node.tail.next = null;

// ループ
    for (target = node.head; target; target = target.next){
        ・・・
    }

2つ目の失敗は、1つのクラスを複数のファイルに分けたことです。そのせいで、xx は定義されていないというエラーが出ました。 LongDriver は、まずプレイ図を作成するルーチンを LDoperate.js として作成し、次にそのプレイ図をエンコードするルーチンを LDencode.js とし、そしてデコードのルーチンを LDdecode.js としました。この3つのファイルに跨って Diagram というクラスを記述していました。それで未定義のエラーが発生した訳です。同一ファイル内だとメソッドは前方参照でも良いので、ファイルを分けることに問題が有ることを認識していませんでしたが、実際はダメだった訳です。 C の extern のようなものが JavaScript に無いか検索したのですが、どうも無さそうです。最終的には、 JavaScript ファイルは1つにまとめる予定なのですが、動作確認&デバッグの間はファイルを分けておくつもりでした。しかたないので、エラーが出ないように一部のファイルはまとめました。

モヤモヤに関しては、日を改めて書くことにします。

P.S.1
LongDriver の読み込み時に、メニューボタンが表示されないことが有りますが、その時は再読み込みをすると良くなるようです。これも複数ファイルの組み合わせに原因が有るのかも知れません。

P.S.2
いずれはタブレットに対応する予定ですが、現時点では未対応です。取り敢えず、PCで動くものを作ることを優先させます。

« this は何? | トップページ | もやもやオータムズ(オブジェクトの解放に関して) »

フットボールのプレイ図ソフト」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/584699/64316699

この記事へのトラックバック一覧です: エンコード・デコードルーチンの実装(1):

« this は何? | トップページ | もやもやオータムズ(オブジェクトの解放に関して) »