kr_ryo 徒然日誌 <2005年12月11日分>

三國志製作記123〜今年は振り返りません…あれ、張飛がいない?〜

前口上でもお伝えしておりますが、まだ年の瀬というには早い11日ですけども、12月18日と25日、さらに来年1月1日元旦の一気に3週間更新をお休みすることになってしまいましたm(__)mですので、これをご覧の皆さま、よいお年をお迎えくださいm(__)m…明けましておめでとうございます!\(^O^)/という状況ですね(^^;

それにしても、いやあ、昨年に引き続き年末年始のお休みが少なく、下手するとゴールデンウィークとかお盆休みの方が休みが多いかもしれませんね〜(ToT)クリスマスの雰囲気は街でははや11月頃からスタートするのに、年末は言うに及ばず年始早々お店も開いていたりして、年々年越し年明けの雰囲気が薄れ去っているような気がしませんか?クリスマスはよーく物が売れますけど、年始はお店も家事もお休みして年始の挨拶参りすることが本来ですんで、これだとお店がお休みになって物が売れません。となると、街の商店は年末年始のお休みはできるだけ無視して、クリスマスだけ重視するという形になりやすくはありますね。おかげでクリスマスは延々続いている雰囲気で、年末年始はあっと言う間、しかもこよみまでクリスマス重視になっている感じで、もうお腹いっぱい、というような(~_~;)

それはともかく(^^;;この徒然日誌は一足お先に今年の締めを迎えたいと思います。…と、つらつら考えてみると、今年はオブジェクト指向をマスターしたかと思ったら、それだけではまだ洗練が足りず、続いてデザインパターンを勉強し、実践に生かす、ということで尽きてしまいました(^^;;単なるオブジェクト指向では複雑なプログラムをうまく作り上げることはできないけれども、デザインパターンで作ると非常に使いやすい、洗練されたプログラムになります。この話題は先週はじめずーっとお話しているような気がしますね(^^;;Aもちろん今年前半はルールについてもあれやこれや考えてますが、何よりも考えたことをどう表現できるか、ということが大事です。いくら事細かに違いを考えても、それを表現できる土台のプログラムがうまく作れなければ、割愛するしかなくなってしまうんですよね。

たとえば武将の一人ひとりに個性を持たせるとしても、それがどういう形でゲームに影響し、どうプログラム上表現するか、というのはやっぱり大きな問題です。個性的だろうが、無個性だろうが、まずは動かないといけません。動いてからはじめて、個性の差をどう生かすか、という問題になります。もっとも、個性が生かすような動かし方、というのもあるにはあるんですが、やりすぎると諸葛亮専用コマンドとか張飛用戦闘シーンとかになってしまうだけで、シミュレーションゲームというよりアドベンチャーゲーム(懐かしい?ですか?(^^;)になってしまいます。

本来、明らかに人と違うことになる&する、というような個性より、同じことをしているのになんとなく違うという方がより個性を感じられます。明らかに違う、というのでは、個性というより、単に違う、というだけになってしまいますからね。同じものの中の差異で表現すべきなのです。と、口では簡単ながら、それが難しい(^^;;たとえば、イベントというやつがこの、明らかに違う、ということの最たるもんですね。同じイベントが起きて、人によって違う、というんではなく、ある条件しか出ないというイベントでは、個性の表現というにはあまりにそぐわないでしょう。いつも例に取る銀英伝4で、クーデターや反乱や亡命というイベントが、あるにはあるがいつも同じ人が実行するのでない、というのと、本能寺の変は必ず光秀が信長に対してやる、というのとでは、えらい違いなんです。

まったく話が変わりますが、SWGがモデルにしているT&Eソフトのディーバ、かつてファミコン(初代)やMSX、PC−88や98(NXではありません)、FMー77AV(Vではありません)という各機種用に作られたもののすべてをWindows版で1本になった、というソフトが中古で売られていました!( °O °;)思わずほ、ほしい!と思ったものの、中古なのに、中古なのに…なんと1万2千円もします( ̄□ ̄;)プレミア??ディーバ自体、私はシミュレーションの要素は好きなんですけど、惑星攻略がなんとアクションシューティングになっていて、しかも昔のソフトなんで極端に難しい、というのは気になっていました。その部分を削って、他にもいっぱい削って削ってして作ったのがSWGですが(^^;;;PC−98用のカリ・ユガの光輝は、提督は出るわ惑星にも個別の地図はあるわ星系には惑星軌道もあるわで、SFシミュレーションの雰囲気満点で、多分現在でも通用しそうな気がします。PC−98すら持ってなかったので、ほ、ほしい!ヾ(≧∇≦)〃というとこですけども、やっぱり、新品のkoeiのソフトが買える値段ってえのも…(ToT)がんばってSWG2で表現しましょうか(^^;;

閑話休題。同じことの繰り返し、というのも、個性を殺してしまいますね。たとえばいっつもいっつも内政ばっかりだと、個性もへったくれもありません。龐統みたいにさぼっちゃったり、張飛みたいに飲んだくれてさぼっちゃったりしてくれたらいいんですけど、それはそれでプレイヤー様はきっといらいらするんでしょうね。koeiの三國志8なんかでは、本来毎月の作業はさぼっても可、というようなことをイメージしているんでしょうけど、実際の所はさぼるより能力が足りずにできない、というところでしたか?たいていは命令どおり実行しています。そうなると、毎月毎月開墾ばっかり命じられて、きっちりやってる武将達って…(;_;)

物語を読んでても、毎月毎ターン何かさせるから個性が出るんではないんだと思いますけどね(--;たとえば黄蓋なんかは、苦肉の策だけで強烈なイメージを残していますけど、実はこのシーンくらいしか出てきません。物語では他にも強烈な一発屋?(^^;;はいっぱい出てきます。そいつらは毎月の内政で個性が出るんでなく、華麗な一発で名をあげるはずです。いや、一発屋でなかったとしても、たとえば普段は影の異様に薄い趙雲だって、…まあ、これだって一発屋に微妙に近いところがありますが(^^;;毎月内政を指示したから個性が出るわけではないんです。もちろん関羽張飛なんて個性の固まりみたいな連中だって、毎月の内政で個性を発揮されても…それはそれで飽きてきます?

振り返らないつもりがどんどん深みにはまってしまってますが(^^;;結局、ここでこいつならこうするはずだ!というようなシーンでまさに個性が発揮できていれば、非常にいいんでしょうね。ということは、普段からほとんど個性のない連中も含めて、個性を見せないと、差が出ないんです。曹豹と張飛がセットの場合だけけんかが起きるんじゃなくて、仲の悪い連中は仲が悪くて、そういうシーンが普段からあると。で、特に曹豹と張飛がセットだと、お互いの寝首をかきかねない、というようなわけですね。となると、曹豹と張飛のイベントのために、他の連中も仲が悪いシーンができる、と。そういう感じなんですね。となると、仲が悪いというようなことをどう表現するか、どういうパラメータを持つか、ということにつながっていきます。

そういう個性を表現するための内容は、ゲームの本質と離れてくるため、本来は本質の追加部分で表現することになります。当然、修正追加、ということになるんでしょうけど、振り返らずとも、デザインパターンだと、これが非常に楽になるわけです(^^;;

と、書いていながら、プログラムが膨らめば膨らむほど、やっぱり見通しがだんだん悪くなっていきます(~_~;)特にユーザインタフェース部分は、それでなくとも細かいオブジェクトの集まりなんで、目的のオブジェクトを探し出すのも大変です。それでも、やっぱり出てくる大きめのオブジェクト、これだとどこに間違いがあるのかわからなくなります。現在がんばって、移動の自動化をはかっているんですけど、この判定オブジェクトが、かつては普通だったものの今となってはやたら大きく感じる長い行数を誇るオブジェクトになっています。で、うまく動かないと、…間違いがその長い行のどこにあるのか、非常にわかりずらい(>_<)これが細かいオブジェクトの集合だと、そのオブジェクトのひとつひとつの実行を停止していくことでエラーをチェックしやすくなります。

と、いっているまに、さっそくエラーです。テスト用の劉備一家のうち、劉備と関羽はずっとリストに登場するのに、命令終了コマンドを押すと、張飛が消えてしまいます(*_*)移動の自動化と、連続命令のシステムと、ノンプレイヤーキャラクターの行動判断とか、立て続けに新たな機能を追加しているんですけど、張飛が消えるという機能はつんでいません。さてはバグはこの新しい機能の中にある…!って当たり前ですね(^^;;

命令終了後、ノンプレイヤーキャラクターの行動判断と行動実行、それから再びプレイヤーの行動になるんですけど、最初、起動時には確かに張飛はいるんです。しかし、命令終了を押して、再びプレイヤーの番になると、あの張飛が忽然と消える…恐ろしい!( °O °;)

って、、ねえ…(^^;;武将の一覧の表示は非常に単純で、プレイヤー勢力の連中を表示させる、というだけです。そうすると、張飛が命令終了後、プレイヤーたる劉備の勢力でなくなってしまっている、というエラーです。はて、そんなことしたのか?オブジェクト指向のいわゆる三原則のうち、デザインパターン的に最も重要とされるカプセル化、つまり、オブジェクトの内部情報はオブジェクトの外からは勝手に操作されない、という原則があります。武将オブジェクトももちろんこれに沿っており、武将オブジェクトの中に、所属勢力を変えるというメソッドがあります。この、setseiryokuという命令で全文検索してみます……もちろん、怪しい命令はありません。はて?いったいどうなっているのか?

しかも、テスト武将連中を見ても、なぜか張飛だけが挙動がおかしい。オブジェクト指向になって、命令は細切れに、他のオブジェクトのメソッド、つまり機能を呼び出すことがメインです。あれこれ眺めていてもあやしいところは見当たらないので、1命令ずつ削って削って(コメント化)しながら、張飛が登場したら、そいつが犯人です。あの張飛をかどわかすたあ……

年を越すまでに(^^;;見つけました!なんと、行動済み状態をリセットする、たった2行のオブジェクトメソッドが、コピペで作っていたため、ポインタ指示がコピー元のままだったのです!何回か見ていたはずですが、文自体の意味はあまりに簡単すぎてすぐわかるため正しいと思い込んでいて、指示が間違っているとは気づきませんでした(^^;;Aうむむ、確かにオブジェクト指向がうまくいくと、行数が少なくなって間違いが見つけやすいんですけど、簡単すぎて正しいと思い込んだら、間違いにかえって気づきにくくなりますね…って、別にそりゃ、オブジェクト指向だからじゃないですね(~_~;)

なんにせよ、無事張飛を発見して保護することができました(^^;;それにしても、このエラーの部分、武将の勢力データを設定することとはまったく関係がないのに、ポインタを使っていたら、ノーエラーでものすごい間違いに発展するんですね〜!Delphiはもともと型や文法に厳しい言語で、ちょっとしたミスでもエラーがでやすいのに、ポインタだったらその縛りをあっさり超えてしまいます。結局、張飛の勢力データ領域に、まったく関係がない行動済みという情報を放り込んでいたんですが、これだってたまたま張飛というだけで、他の人は無事、というのもよく考えるとおかしな話です。しかし深く突っ込むと、メモリアドレスに入っている情報の順番やなんかを解析しないといけなくなるので、とりあえず張飛&エラー発見でよし、としましょうか(^^;;

と、いう感じで、類を見ず進んでいます(^O^)この調子でいくとかつてお正月にSWGver1.4をリリースしたのと同様、お正月明けにでもリリースできるか……って、さすがに無理ですかね(^^;;それでも2006年はいよいよ完成、という気がしてきましたよ〜!\(^O^)/ということで、皆さまよいお年をお迎えください(^0^)/~~

index

〔TopPage〕

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