!!!MAP *マップの広さは10×10マス。 *移動画面は、プレイヤー視点なのでキャラクターは移さず背景と移動ボタンを配置する。 *前、右、左、後ろの4方向に移動できるようにする。 *ボタンをクリックした際は、各ボタンに対応したコールバック関数により、現在地の座標を変更する。 *指定してある領域から出ようとしたときは、エラーメッセージを出力するようにする。 !!!敵 *マップ上では、ランダムでザコモンスターが出現し、戦闘に移行するようにする。 *出現するザコモンスターの種類もランダム。ただ、モンスターにより出現率に違いがある。 *ボスについては、あらかじめ出現する座標を設定しておく。その座標にプレイヤーが到達するまでは絶対に出現しない。 *敵と遭遇した時の画面とメッセージを作る。 !!!アイテム *宝箱を見つけた時の画面とメッセージを設定しておく。 *宝箱が出現する座標はランダム、中身もランダム。 *宝箱を見つけた際の効果は、攻撃力強化、防御力強化(ステータス上昇はそのマップにいる間のみの効果)HP回復の3つのうちのどれか1つにする。 *HPの回復量と、攻撃力、防御力の上昇量は、あらかじめ一定に設定しておく。 !!ランダムについて 上で示したランダムについての処理は全て、橋本氏(21)が作成したランダムエンカウントを利用している。現在地の座標を受け取り、それがボスと遭遇する座標でない場合は、ランダムな値を返す仕様になっている。モンスターの出現率の違いなども、これにより設定できたものである。汎用性の高い有用なプログラムである。 !!!ヘッダーファイル *int evejudge(int x, int y); マップのx座標とy座標を受け取り、現在地で発生するイベントの判定を行う int型の返り値e アイテム入手の場合:返り値 e = 1 雑魚敵エンカウントの場合:返り値 e = 2 ボスエンカウントの場合:返り値 e = 3 何も起きない場合:返り値 e = 0 *void event(GtkWidget *window, GtkWidget *vbox, GtkWidget *hbox, int e, int v); ウインドウウィジェット、縦にウィジェットを配置するボックス、横にウィジェットを配置するボックス、イベントの種類を判定する変数e、マップの種類を判定する変数v を受け取る ウインドウからウィジェットをはがし、発生するイベントの種類によってウインドウに新しいウィジェットを配置する