« エンコード・デコードルーチンの実装(2) | トップページ | ボールおよびパスルートの処理 »

2016年10月16日 (日)

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

LongDriver のエンコード・デコードルーチンの実装では、不本意な箇所が幾つか有ります。

1つは、プレイブックを新しいものに変更する時、古いプレイブックで使っていた SVG 要素を全部廃棄していることです。 LongDriver 右上の [Total][Edit Full Code] でプレイブックのコードを編集し、それを画像に反映させることが出来ます。その際、仮にプレイブックが複数のプレイ図で構成されており変更されないプレイ図が有ったとしても、全て廃棄してから新たにプレイブック(の SVG 要素)を生成しています。

同じことは1つのプレイ図を変更する時にも当てはまります。右上のボタン [Each][Edit One Code] で1つのプレイ図のコードを編集することが出来ますが、この時も当該プレイ図を廃棄して新しいプレイ図を生成しています。

次に不本意な点は、開始図の処理方法です。ここに開始図とは LongDriver にアクセスしたり、プレイブックを更新した時に最初に表示するプレイ図のことです。プレイブックをデコードして当該プレイ図が開始図となった時、 Diagram.prototype.layout()this.isStart にフラッグをセットして playBook に戻します。ここに、 Diagram はプレイ図のコンストラクターです。 playBook では diagram.isStart をチェックして this.startDgm = diagram を実行します。これにより開始図をプレイブックにセットしています。


function Diagram(index, code, prev, next){
    ・・・
    this.layout(code);
}

Diagram.prototype.layout = function(code){
    ・・・
    case "21":
        pc +=2;
        this.isStart = true;    // (1)
        break;
    ・・・
}

PlayBook.prototype.addDgm = function(dgmCodeAry){
    ・・・
    diagram = new Diagram(this.index++, dgmCodeAry[i], diagram, diagram.next);
    if (diagram.isStart)        // (2)
        this.startDgm = diagram;
    ・・・
}

どれが開始図であるかは、プレイ図そのものに記録するのではなく、プレイブックに記録した方が良いと思います。その方がプログラムにとって都合が良いからです。したがって、当初は、プレイブックへの開始図のセットはプレイ図へのセットを経由することなく直接プレイブックにしようとしました。つまり (1) は次のようにしていました。


    playBook.startDgm = this;    // (1) は当初これだった

しかし、これでは LongDriver 起動時に playBook が未定義というエラーが発生しましたため、 (1), (2) にしたのです。プレイ図へのセットを経由することが必要になったのは設計に問題が有るのだろうと思うのですが、良い解決策が見つからないので、このようなことになりました。

« エンコード・デコードルーチンの実装(2) | トップページ | ボールおよびパスルートの処理 »

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

コメント

コメントを書く

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

トラックバック

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

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

« エンコード・デコードルーチンの実装(2) | トップページ | ボールおよびパスルートの処理 »