2006年1月17日 (火)

バックエンドとフロントエンド

L&L は基本的に、コンソール画面で文字を表示して表現するテキスト・ゲームなのですが、ウィンドウにグラフィックの絵として表示するモードを現在制作しています。

構成としては、
・CUI(キャラクタ・ユーザ・インターフェース)のバッケンド
・GUI(グラフィカル・ユーザ・インターフェース)のフロンテンド
の 2 つに分けています。

ゲームの基本部分とテキスト画面の処理はそのままバッケンドとしておいて、それを覆い隠す様にグラフィカルなフロンテンドを追加した形になっています。
こうすることでテキスト・モードでもグラフィック・モードでも動作する様になります。

続きを読む "バックエンドとフロントエンド"

| | コメント (0) | トラックバック (0)

2006年1月16日 (月)

2006/01/15 の修正

1) C言語のソースを g++ (C++ コンパイラ)でコンパイル出来る様にした。

続きを読む "2006/01/15 の修正"

| | コメント (0) | トラックバック (0)

2006/01/12 の修正

1) メニュー・ウィンドウにタイトルをセットする様にした。
2) グラフィック・データのパスを変更した。

続きを読む "2006/01/12 の修正"

| | コメント (0) | トラックバック (0)

2005年9月12日 (月)

2005/09/08 の修正

1) ディレクトリ・ツリーを根っこから再帰的に自動で掘る様にした。

続きを読む "2005/09/08 の修正"

| | コメント (0) | トラックバック (0)

2005年9月 8日 (木)

2005/09/07 の修正

1) オート・マーク・メニューにマクロを設定出来る様にした。
2) オート・マークの内部番号を変更してもセーブ・ファイルに影響が出ない様にした。
3) オート・マークのマクロをセーブ/ロード出来る様にした。

続きを読む "2005/09/07 の修正"

| | コメント (0) | トラックバック (0)

2005/09/06 の修正

1) メニューをキーボードで操作出来る様にした

続きを読む "2005/09/06 の修正"

| | コメント (0) | トラックバック (0)

2005/09/05 の修正

1) ウィンドウ上のキー入力をキー割り当て変更可能にしました。

続きを読む "2005/09/05 の修正"

| | コメント (0) | トラックバック (0)

2005/09/02 の修正

1) モンスターでもステータス・ウィンドウを更新していたのをメンバーだけにした。
2) オート・マークの設定をユーザがテキスト・ファイルとして編集出来る様にした。

続きを読む "2005/09/02 の修正"

| | コメント (0) | トラックバック (0)

2005年9月 2日 (金)

2005/09/01 の修正

1) GUI のステータス・ウィンドウを表示出来る様にした。
2) ステータス・ウィンドウに HP と MP のバーを表示出来る様にした。
3) メンバーが空きの項目は、ステータスを空白にした。

続きを読む "2005/09/01 の修正"

| | コメント (0) | トラックバック (0)

2005/08/30 の修正

1) ヘッダ・ファイルのインクルードを 1 つのファイルにまとめた。

続きを読む "2005/08/30 の修正"

| | コメント (0) | トラックバック (0)

2005年9月 1日 (木)

2005/08/29 の修正

1) 階段を下りた後に GUI マップ・ウィンドウが更新されないのを修正

2) GUI マップ・ウィンドウがスクロールすると、画面にカーソルのゴミが残るのを修正

1)
マップをリセットする時に GUI マップの描画用の更新フラグをリセットする様にした。

2)
カーソルの1つ前の座標をターン毎に更新していた。
それを描画する度に更新する様に修正した。

| | コメント (0) | トラックバック (0)

2005年8月29日 (月)

2005/08/28 の修正

1) GUI メニューのデフォルト項目にフォーカス
2) GUI カーソルを描画する

1)
メニューの描画時にフォーカスを設定する様にした。
描画の度にフォーカスを設定するとおかしくなるので、最初の 1 度だけ設定する様にした。

2)
GUI 用のカーソルのグラフィック・データを描いて、描画できる様にした。

| | コメント (0) | トラックバック (0)

2005/08/27 の修正

1) 自動マーク・メニューのコピー&ペーストを実装

1)
以下の手順でコピー&ペーストを実現した。
・自動マークのコピー用データを用意した。
・そことの間でデータを代入する様にした。
・コピーとペーストの処理は代入の向きが違うだけで、本質的には同じ処理。

| | コメント (0) | トラックバック (0)

2005年8月27日 (土)

2005/08/26 の修正

1) GUI メニューにページ数を表示

続きを読む "2005/08/26 の修正"

| | コメント (0) | トラックバック (0)

2005/08/25 の修正

1) GUI メニューのページ切り替えボタンのオン/オフ
2) カーソル・パターンのオフセットを自動で設定

続きを読む "2005/08/25 の修正"

| | コメント (0) | トラックバック (0)

2005年8月12日 (金)

マップのデータ構造

宮や街のマップのデータ構造を解説します。

L&L のマップは画面表示や内部データで、半角の英数記号 2 文字で 1 つのオブジェクトを表わします。
ペアにする事でいくつかのメリットがあります。
・オブジェクトの区別に使う文字が足りなくなるのを防ぐ。
・プレイヤーがマップを見るだけでオブジェクトの細かい種類が判る。
・マップの縦横の比率が 1:2 でなく 1:1 になる。

続きを読む "マップのデータ構造"

| | コメント (0) | トラックバック (0)

2005年8月10日 (水)

メニューの処理

日解説したメニューのデータ構造を処理する関数を解説します。

[menu.c]

[menu.c]の333行目〜411行目の
char *exec_menu( menu_t *p, menu_t *dflt, char *str_goto )
がメニュー処理の中心です。

引数の意味は次のとおりです。
"menu_t *p" はメニューの配列の処理する先頭位置です。
"menu_t *dflt" はメニューのデフォルトで選択される位置です。
"char *str_goto" はメニューの移動先のパスです。
この引数でパスを指定するとメニューの木構造を自動的に検索して移動します。

続きを読む "メニューの処理"

| | コメント (0) | トラックバック (0)

2005年8月 9日 (火)

セーブ・ファイルのバージョン監理

ーブ・ファイルや設定ファイル等はゲームのバージョナップに合わせて内容が変っていきます。
ファイルの構造が新しくなった時、古いファイルも読み込めないといけません。
もしファイルに互換性が無いと、ユーザが何日もかけて育てたキャラクタや設定が全部台無しなってしまいます。

セーブ・ファイルのヘッダには、ゲームのバージョンとは別にセーブ・ファイルのバージョン番号を含めて置きます。

細かいバージョナップの場合のソースの修正は次の様になります。
・項目を追加した時はそれを読み書き出来る様に修正します。
・項目を廃止した時は読み込む時に無視します。
・ファイルのバージョンのマイナー番号を上げます。

セーブ・ファイルの構造が大きく変更になった場合のソースの修正は次の様になります。
・書き出し処理を新しい物に修正します。
・古い読み込み処理とは別関数で新しい読み込み処理を追加して、過去の全バージョンのファイルを読める様にします。
・ファイルのバージョンのメジャー番号を上げます。

以下では、具体的な例として enum 定数の追加と廃止について解説します。

続きを読む "セーブ・ファイルのバージョン監理"

| | コメント (0) | トラックバック (0)

2005年8月 7日 (日)

メニューのデータ構造

キスト・ベースのゲームの場合、ウィンドウ・システムのGUIの様にメニューの処理をしてくれる便利なライブラリは標準的に無いので、全部自前で作る必要があります。

そこで、ちょっぴり頑張ってメニューの処理を作ってみました。
データ構造はX-windowのGTK+のメニューを参考にしました。

L&Lのメニューの仕様は以下の様になっています。

・サブ・メニューが作れ、全体がツリー構造になっている。
・ツリー構造の中をパスを指定して自由に移動出来る。
・項目にチェック・マークが付けられ、ラジオ・メニュー等が作れる。
・アクセラレータ・キーとショートカット・キーが設定出来る
・複数のページをカーソル・キーの左右で切り替えられる。
・項目を選択した時の処理は、登録して置いたコール・バック関数で行なう。

続きを読む "メニューのデータ構造"

| | コメント (0) | トラックバック (0)

2005年8月 6日 (土)

キー・リピートをためない方法

OSのキー入力処理にはキー・バッファリング機能が有ります。
ユーザが入力したキーはバッファにFIFO(先入れ先出し)で記憶されていて、アプリケーションがキーを読む準備が出来るまで待っています。
この機能のおかげでアプリケーションの処理が重い時でもキー入力を取りこぼす心配が有りません。

普段は便利な機能ですが、しかし、ゲーム等ではこの便利さがが裏目に出ることが有ります。
ゲーム中にプレイヤーがキャラクタを操作する時、移動のキーを押しっ放しにした後、キーを離してもキャラクタがしばらくの間、止まらずに同じ方向に動き続けてしまうのです。
今時のゲームではきちんと対処されていますが、昔のゲームではこういう事が度々ありました。

これを回避するには2つの方法が有ります。

続きを読む "キー・リピートをためない方法"

| | コメント (0) | トラックバック (0)

2005年8月 5日 (金)

メッセージ処理(その1)

ッセージのモジュールは一応、多国語に対応可能となっています。

ユーザのロケール(国)に合わせた言語で表示します(現在は英語と日本語だけですが)。
全てのメッセージは各ロケール毎のファイルにまとまっています。

メッセージのモジュールファイルは以下です。

[msg-jpn.h 日本語版のメッセージ]
[msg.h メッセージのID定義]
[msg.c メッセージ処理]
[全ソ−ス]

続きを読む "メッセージ処理(その1)"

| | コメント (0) | トラックバック (0)