kr_ryo 徒然日誌 <2003年10月13日分>

三國志製作記36〜はまっちゃいました(^^;後編〜

昨日10月12日は、製作記を早朝&お出かけ後の夜中に(^^;間に合わせようとがんばって書いていたのですが、とうとうネットにつながらず、内容的にも続きが11月では間延びしすぎ〜ということで、続きを月曜に書いています(^^;けれども〔月曜プログラマーの部屋〕にはなりません(^^;もしかすると今日もつながらないかもしれませんが(T-T)なんとかつなげてしまわないといけませんね(ToT)

さて、ということでこれをご覧の皆様におかれましては、ほとんどタイムラグなく前編からこちらに移ってこられていると思いますので、前フリなくドキュメンテーターKの物語を続けさせていただきますm(__)m突然こちら後編をご覧の方は、まず前編をごらんくださいませ…

…しかし、実行してみると、情報表示も太守任命もちゃんと行えるのに、軍団加入武将選択の時だけ、加入のリストが表示されずに、メイン表示(「ご命令を」とだけ表示する画面)に戻ってしまう!…はっ?何かリフレインしているような?しかし、気にせず行こう、と思うK。

メイン表示は、情報表示を除き、太守などの任命や、内政コマンド体系の変更のため、あおりをくってせっかく作ったのに使われなくなってしまう予定の各種内政任務の実行後、コマンド入力待ち状態の際表示させるだけのもので、リストから武将をクリックして対応先に振り分けられた後、ここに戻るようになっている。情報表示については、同じ部分に表示しているため、表示した瞬間にメイン表示に戻られては意味がなくなるので、これだけ表示が継続するようになっている。

そのため、まず疑わしいのは、ちゃんと総大将任命処理から加入武将選択処理に流れていないということである。Kが試行錯誤のうえ(省略(^^;)ようやく理解したのが、先程(前編参照)も書いていたように、総大将任命処理のスタートは、メニューの新軍団結成からではなく、リストの武将をクリックするところであったということである。

Kの当初の発想では、総大将任命処理の際、次の処理の軍団加入リストに流すために、取消ボタンタグのデータを総大将任命処理から軍団加入武将選択処理に変えただけで大丈夫だと思っていた。ところがそれは、処理の内容が細切れになっていたための誤解であって、一本の処理としてみれば、理由なく後戻りさせていることになる。つまり、

武将リストがクリックされた時に起こす処理(A)→取消タグによって行き先を分ける処理(B)→行き先の処理(C)→行き先を分ける処理(B)に戻り、→メイン表示の処理(D)、という流れで、(C)で(B)の行き先を分ける処理のための条件を変えただけで、(B)がもう一度行われるかと考えていたのだが、単に(B)から(C)に行く直後に戻っただけであったということである。

一本の処理としてみれば当たり前なのだが、(A)〜(D)までが個別のものであると考えすぎたままの誤りであった(^^;(B)にしてみれば、行って戻ってきただけなのに、なんでまた一から処理せにゃならんねん、というとこであろう。

いやあ、わかったわかった(^o^)ということで、ひとつの謎が解けた。ところがそれでもうまくいかない(*_*)なぜだ?謎は解いたはずだ!?と衝撃のK。

次の問題は、なぜか総大将任命処理が2回行われるという謎である。なお、すでに謎はすべて解けた後で書いているので、文章では個別の謎として扱っている。その意味でKは楽なのである(^^;当時のkr_ryoは、これらの謎が同時に生じていたので、ひとつができてもちゃんと動かず、パニックであった…(^^;

先程の処理の流れでいけば、リストから武将をクリックすれば、一度だけ総大将任命処理である行き先の処理(C)に行った後、戻ってくるはずなのである。ところが、総大将任命処理の中身である「劉備を総大将としますか?」という確認ダイアログが2度出てくる。つまり、一度「はい」ボタンを押しても、また同じ確認ダイアログが出てくるのである。この状態が最初から生じていたため、2度目の確認ダイアログに行っている処理を、別の軍団加入武将選択処理に流せばよいとKは誤解していたのである。先程の誤解は、この謎がもたらしたものであるといって良い(^^;

さてこの謎解きである。デルフィでは、プログラムを1行ずつ実行していくという方法がある。これでバグ取りを行うのであるが、確かにこの謎ではおかしなことが生じている。1行づつ見ていくと、先程の最初の、クリックされた時に起こす処理(A)がやはり2回行われている!クリックが1度なのにクリックされた時に起こす処理が2度行われているのはなぜか?なお、総大将任命の処理の際に、クリックされた時の処理に戻る、ということは行われていない…

まず、デルフィ自体のバグ、ということが最初に考えられるが、太守任命処理などはちゃんと行われているのでそんなことはないはずである。次にKは、同じリストを総大将任命と加入武将選択の2回使っているのが問題か?と思い、加入武将選択用に別のリストを作ってみた。ところがやはり総大将任命処理が2回行われることは変わらない。

これまたあれやこれや試行錯誤(省略(;_;))してみてようやく理解したことは、先程の誤解の解消とあいまった話である(^^;つまり、2回目の総大将任命処理は、やはりクリックが2回行われているという扱いであったのである。

当初、総大将任命処理の際に、総大将の武将情報表示画面を表示させていた。その際武将リストは消去していたのであるが、先程の謎の、総大将任命処理の後、つまり「劉備を総大将としますか?」→「はい」ボタンの後、メイン表示されてしまうという謎を解決するために、武将情報表示を行わないようにした。武将リストは表示されたままであるが、どうやら加入武将選択用のリストのようには思われない。試行錯誤の際は色々な状況であったため、たとえば同時に総大将任命処理用の武将と加入武将選択用の武将が一度に表示されていたり、すでに消去されている扱いだったのに処理の流れで表示されていた?ため、クリックするだけで「非表示のオブジェクトを選択できません」エラーになったり(あたりまえぢゃないか…変なエラーや…(^^;)、選択されるべき武将が誰も現れなかったり…1行づつ実行を何度も繰り返すが、何べん見ても2回クリックされていることが生じているように見える。

そこで、クリックされた際に行われる処理について、1行づつプログラムを止めてみることにした。そこでわかった恐るべき真実!(おおげさ(^^;)

リストの変化をじっくり見ていると、まず、クリックした際にクリックされた処理を行い、そのままリストが表示されていた場合、クリックされたことによって選択された状態(たとえば色が変わる)になる、ということで、再びクリックされた処理が行われる、ということであった!そんなもんわかるか!(^^;

まあ、普通の使われ方であれば、もう一度別の処理のために同じリストを変更して使いまわししないためあまり起こり得なかったのであろう。しかもKの処理では、先程の謎のため、強引に2度目のクリックが行われた(正しくは帯の色がついたということで、同じ人物が2度選択されたということ)際に処理を変えたと思っていたが、実はそうではなかったため、結果が不自然になっていたのである(これまた各試行錯誤段階によって結果が異なるので省略(^^;)。原因がわかれば、あとはそれを除去するだけである(^^;

ようやく謎を解いたK。ところがこれがすべてではなかったのである(;_;)

これでやっとコンボボックスを使うところまでいける…(懐かしい!)とほっとしたK。コンボボックスのテストを兼ねて実行してみた…総大将を選択して、加入武将を複数選択して、…え?またメイン表示??(ToT)

しかしこの謎は、Kにはおおよそ見当がついていた(^^;リストをクリックした後、必要な処理を行ってから、ある場合でなければメイン表示を行う。ある場合とは、武将情報表示と、今回の軍団総大将選択と、軍団加入武将選択である。それ以外にはメイン表示に行きようがないから、原因はその部分しか考えられない。その部分とは、「リスト表示が行われた原因が、

もし、(武将情報表示でない)または(軍団総大将選択でない)または(軍団加入武将選択でない)ならば、メイン表示を行え」、というものである。

さて、武将情報表示であれば、確かにメイン表示は行われない。ところが軍団総大将選択であれば、メイン表示は行われる。また、どれでもない、たとえば太守任命であれば、やはりメイン表示は行われる。

ところが武将情報表示でメイン表示が行われないのは、デルフィの設定で、完全な論理評価を行わない、ということができたからであった。つまり、出だしの(武将情報表示でない)ということで、すぐに、メイン表示は行わない、と判断されるのである。完全な論理評価を行えば、Kの式では、実はどんな条件でもメイン表示は行われてしまう。というのも、(武将情報表示である)、としても、それは同時に、(軍団加入武将選択でない)のだから、または、でつなげばやはりメイン表示は行うことになってしまうのである。これは論理式の単純誤りで、たまたま(武将情報表示でない)の部分が最初で、かつ、完全な論理評価を行わない、という設定であったから、武将情報表示が行われた後、メイン表示が行われなかったのである。もちろん完全な論理評価を行って、Kの式を実行させれば、武将情報表示であってもメイン表示はされる。この式は実はメイン表示を行わない場合がないのである。

なお、完全な論理評価を行わない、という設定は、この方が処理が早くなったり、他にもメリットがあるからであるが、今回のように論理の誤りを見だしにくくなることがある、と昔どこかで見たことがあったため、Kはここではそれ程迷わずにすんだ(^^;

全ての謎を解いたKは、ようやくコンボボックスに進むことができた(^o^)ところが、もはや疲れ果ててしまったKは、そのまま眠りに落ちるのであった……Fin(^^;

という感じでKは日夜奮闘しております(^^;今回はさらに、製作中の画面を特別展示いたしましょう!(^^;いかにも作ってます、って感じです(^^;;;ただし、160キロもあるJPEG画像なので、興味のある方だけどうぞ…m(__)m

製作中の画面(約160キロバイト)

index

〔TopPage〕

このページへのリンクはフリーです。
このページについてのご意見、ご質問などは、kr_ryo_green@yahoo.co.jpまでお願いします。
Copyright 2003© kr_ryo All rights reserved.
訪問件数