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

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

いやあ、プログラム、はまっちゃいました(^^;笑顔で言えるのも、とりあえず抜け出してこの日誌を書きだすことができたからなんですが(^^ゞはまってる間は「グソー!なんでこれがでけんのだっ!?(▼ヘ▼メ)」って状態でした(^^;ん?そういえば、「はまってる」という表現、その昔はドツボにはまる、ということで今私が使ったような悪い意味だったはずですけど、いつの間にか、熱中しているといういい意味になってますね(^^;

てな感じで違うことを書く余裕が出てきたのも、ようやくドツボから這い上がり、またサクサク進み出したからなんですが(^^;この辺のいきさつは久々のドキュメンテーターKに登場してもらいましょう(^-^)

…Kが製作中のプログラム「三龍志」(ん?適当に考えたわりには割といいタイトルではないですか(^^;A…筆者談)では、できる限り操作性を重視したいと考えていた。というのも、K自身がプレイヤーとしてゲームをする場合、いかにも面白い内容なのに、操作性が悪いことでつまらなく感じることが多かったからだ。もっとも、面白い内容なのに操作性だけが悪い、ということはほとんどなく、操作性が悪いゲームは内容も悪いということが多いとKは考えている。操作性が悪いだけならともかく、たいていバグもあり、もしかしてテストプレイしてないんじゃないか?と考えざるをえないゲームも多い。面白そうな内容でも、eiko社やMicrohard社といった有名な会社のゲームでなければ、買うのにかなり躊躇するのはこの辺にも事情があるようだ。

操作性が悪いゲームはつまらない、そんな思いでプログラムを作るKが重視しているのは、直感的操作と、やり直しの容易さである。

直感的操作というのは、こうすればこうなるということがピンと来やすい操作である。たとえばボタンがあれば押すもので、ボタンを別の画面にドラッグさせるというのはピンとこない。けれども、リストから複数選択するのに、個別に押して選択、もう一度押して解除、というのは直感的だが、Windowsの基本操作としてはシフトキーやコントロールキーを押しながら選択するのが一般的とされている。確かに個別に押していくのが直感的ではあるが、この場合、数が多いと大変であるし、Windowsの基本操作に慣れていればかえって直感的でない。

やり直しの容易さというのは、あるコマンドを選択して、途中でキャンセルができるかどうかということである。一度選択するとやり切ってしまわないといけないというのは、操作ミスの場合だけでなく、途中で思いなおしてやめようという場合であっても、やり直せず、無駄なことをさせて、結局ロードし直さないといけなくなる。しかしたいていそういうゲームに限ってセーブロードがしずらかったりするのは、プログラマーが想定している筋に強制的に乗せさせようとしているのではないか?とKは思ったりしている。

しかし操作性を重視することは反面、色々な状況を想定してプログラム側で準備しないといけないので製作に時間がかかる。また、これでいいですか?というような確認ダイアログを多用しやすい傾向になり、プレイしていてかえって煩わしい場合もある。

しかしKの三龍志では、登場する武将たちの役職を変えるだけで、すねたり喜んだりする予定なので、あまりに簡単にコマンドを実行できて確認を求めないと、プレイしていて後々「しまった!」となるおそれが十分にある。まあ、結局無意識のうちに「はい」ボタンを押してしまう傾向を助長するだけかもしれないが(^^;

ところで現在Kは、軍団を編成するための画面を製作中である。まず総大将を一覧リストから選び、その後その軍団に加入する武将を複数選択し、その後で加入武将には副将や監軍などの軍団の役職につけ、また軍資金や兵を城から軍団に移動させる。武将リストは、Windowsのエクスプローラでおなじみの、表示→詳細で表示されるものと同じものであり、すでになんども使用してきたものを使い回す予定であった。軍団の役職をつける操作には、少し考えた上、コンボボックスを使用することにした。インターネットのアンケートページなどでよくある、四角の枠の右側に▼がついて、クリックすると下に選択できる一覧がびろんとのびる、あれである。

実はKはこのコンボボックスの使い方をよくわかっていなかったので、すぐに使えるわけでなく、試し試し使ってみようと思っていた。軍資金などを移動させるためのスクロールバーについても同じである。初めて使う部品についてはなかなか使用に気が引けるものである(^^;とりあえずリストで選択した武将名がちゃんとコンボボックス一覧に出るようにしなければならない。

ところが、何度も使っていて成熟した部品だと思っていた武将リストに謎の異変が生じた!(*_*)

まず、最初の謎は、最初総大将を選択すると、「〜を総大将に任命しますか。」という確認ダイアログを表示させるとともに、リストをいったん消して、その部分にその人物の能力を表示させようというつもりであった。そこまではうまくいった。ところが、任命しますか→はいを押しても、次の加入武将選択のための表示がうまくいかない。同じリストをいったん消して、もう一度再表示させるだけなのだが…?

不思議に思うK。プログラムが何かおかしいのだろうか?最近構造化プログラミング&オブジェクト指向を目指そうと、いろいろな手続プログラムを部品部品に細かく分けているKではあるが、なぜかこの現象の原因がわからなかった。仕方がないので色々なところの設定値を変えはじめる。

…治らない(*_*)なぜだ?疲れ果てるK。この部分のプログラムの流れを考えてみる。まず、メニューの新軍団結成を選択すると、新軍団の総大将になりえる人物を探し出して、リストに表示させる。この部分については、太守に任命するのも、武将の情報を見るのも選択することに関しては同じであるため、表示させる人物の条件だけ異ならせ、リストに表示させる部分は共通させる。

ところがここでいったん流れがとぎれる。ユーザー様がリストや他の部分をクリックした場合にどうするか、ということをプログラムでは書き込むのであるが、メニューからリスト表示にいたる部分までと、リストの武将名の所をクリックしてその後の処理に進むまでとは、プログラム的に断絶している。この、断絶しているという感覚が、Kのオブジェクト指向の志向の弱さをよく表しているのであって(^^;プログラムはスタートからゴールまでつながっていなければならないと思うから非常に不安になる(^^;Aしかし、オブジェクト指向ではそんなことはなく、部品部品はつながっていなくてもそれ単独で成立するように作られていなければならない。Kがちらと本屋で立ち読みした『C診断室』という本の、処理も関数も長くて60行以内でないといけないというフレーズが今のKの指針である。前作SGWの時はメイン1000行だったなあ…と思うK。それでもサブルーチンの山だったため、メインループが数行だったことを思えば、今の構造化プログラミング&オブジェクト指向の方が性に合っているのかもしれない。

さて、このリストをクリックするところからたどっていけば良いことを確認したKはしかし、今まで無事に使えた処理が今回なぜ使えないのか、どこが違うのかかえって見当がつかなくなった。まず、武将をクリックして選択すると、それがどこから来たのか、つまりクリックにいたった処理はなんだったのかに応じて振り分ける。三龍志はデルフィという言語を使っており、そのデルフィにはボタンなどのオブジェクトにタグというプロパティで数値を格納しておくことができる。これは変数の一種であるが、わざわざ変数を宣言せずともよいのでKは重宝している。その中の取消ボタンタグに今回武将情報をみたいのか、太守に任命したいのか、軍団の総大将を任命したいのか、それぞれ個別の数値を事前に入れて、リストをクリックした際に判別して振り分けている。

振り分けた後、武将情報表示なら情報表示画面を表示させ、太守任命なら武将データを変更した後ユーザー様向けに「そなたを太守に任命する」「ありがたき幸せ」みたいなやり取りを表示させ、軍団総大将任命なら、続いて軍団加入武将を選択するため、改めてリスト表示を行う。この部分は誰、という条件だけ異なるものの、表示ルーチンはすべて共通のため、表示に関しては問題が、ない、はず…

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

…ここでお知らせm(__)m実はこの辺で内容的にも量的にも「つづく」としようと思っていました(^^;ところが我がプロバイダのLivedoorの接続がここ2か月程非常に悪く、とうとう最近は全然つながらなくなってしまっています(T-T)ということでアップロードすらままなりません(ToT)もう嫌になったので寝ます(_ _).oO日曜夜中に我がサイトをご覧いただいていた方ごめんなさいm(__)mこの部分も月曜に書いているのですが、このまま続けるとページサイズが大きくなりすぎ&よくよく考えると来週以降お休み(^^;&気分転換(^^;;;に、次の月曜日付で、やっぱり続けてみようと思います(^^;珍しく2日分なのは、そういうことだったりします…

index

〔TopPage〕

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