[PR]今日のニュースは
「Infoseek モバイル」

Mouse's Monologue - Palm

マウスの独り言 > Palm > HPSCその2

.: HPNV Scenario Compiler(仮称) :.

Palmで遊べるアドベンチャーゲーム(以下ADV)が手軽に作れるツール。
工夫次第ではADVに限らず、色々なゲームが作成可能。

2.とりあえず脱出ゲームでも作ってみる

「あちこち調べたり道具を使ったりして、見知らぬ部屋から脱出する」というタイプのゲームが一時期流行りました。
呼び方を知らないのでとりあえず「脱出ゲーム」と呼びます。
flashで作られたものが主流でしたが、これをHPSCで作ってみましょう。
何事も習うより慣れろですから。

サンプルを作ったので、ダウンロードしてコンパイルしてみて下さい。
 サンプル(ソースと画像を含む)※左クリックでダウンロード
コンパイルしたら、実機やPOSE等にインストールして、少し動かしてみましょう。

サンプルは、

目が覚める

本棚を調べて鍵を手に入れる

その鍵でドアを開ける

ゴール
という非常に単純な流れになっています。
※絵があまりにもあんまりな点には触れないで下さい…。

では、ソース(Dasshutsu.txt)の解説に移ります。
頭から順に見ていきましょう。

:Scene01

ソースの先頭行にはラベルを書くことになっています。
決まり事なので、「そういうものだ」と思って下さい。
ラベルというのは、プログラム内を行ったり来たりするための目印の様な物です。
 

#PAINT 000000 0
#CLS

#PAINTで画面を真っ黒に塗りつぶし、#CLSでメッセージ表示をクリアしています。
メッセージ表示のクリアはこの場ではいらないんですが、一応。
 


……
………
#CLS
目が醒めると、
ベッドの中にいた。

プレイヤーに対する状況説明です。
メッセージの表示は簡単ですね。
 

:Scene02
#ERASEPAINT 0 #PICTURE "Scene02.bmp" 1
#CLS
見知らぬ部屋のベッドに入っている。

ここからシーン2になります。
#ERASEPAINTで真っ黒に塗りつぶした部分をクリアして、
#PICTUREで画像Scene02.bmpを表示し、
#CLSでメッセージをクリアしてから状況説明です。
 

#CHOICE2 "どうする?" "起きる","また寝る" "Scene03","Scene01"

はいここ重要。
選択肢を表示して、プレイヤーからの入力を待ちます。
リファレンス見ればすぐわかるんですが、一応CHOICE2の文法は下記の通り。

 #CHOICE2 [選択肢のタイトル] [選択肢1],[選択肢2] [選択肢1の飛び先ラベル],[選択肢2の飛び先ラベル]

つまりここでは、プレイヤーが「起きる」を選んだらシーン3へ飛び、「また寝る」を選んだらシーン1に飛びます。
それぞれの項目(引数と言った方が正しい)を区切るのは、スペースでもカンマでもどちらでもOKです。
個人的な好みで、組になる物([選択肢1]と[選択肢2]、[選択肢1の飛び先ラベル]と[選択肢2の飛び先ラベル])をカンマで区切り、それ以外はスペースで区切っています。
 

:Scene03
#PICTURE "Scene03.bmp" 1
#CLS
…起きてベッドから降りた。
正面に本棚が見える。

ここからシーン3です。
画像Scene03.bmpを表示して、メッセージをクリアしてから状況説明です。
 

#CHOICE "どうする?" "本棚を調べる","まわりを見る","ベッドに戻る" "Scene04","Scene05","Scene02"

はいここも重要ですよ。
選択肢を表示して、プレイヤーからの入力を待ちます。
CHOICE2との違いは、選択肢が3つ表示できる点です。
CHOICEの文法は下記の通り。

 #CHOICE [選択肢のタイトル] [選択肢1],[選択肢2],[選択肢3] [選択肢1の飛び先ラベル],[選択肢2の飛び先ラベル],[選択肢3の飛び先ラベル]

ここでは、プレイヤーが「本棚を調べる」を選んだらシーン4へ、「まわりを見る」を選んだらシーン5へ、「ベッドに戻る」を選んだらシーン2に飛ぶ、ということです。
 

:Scene04
#PICTURE "Scene04.bmp" 1
#CLS
本棚には本がぎっしり詰まっている。
…ほとんどが君の知らない言語で書かれたものだった。
#CLS
だが一冊だけ、読めそうな本がある。
#CHOICE2 "どうする?" "その本を手に取る","まわりを見る" "Scene06","Scene05"

:Scene05
#PICTURE "Scene05.bmp" 1
#CLS
…小さくて殺風景な部屋だ。
見覚えのあるものは、何もない。
この部屋にあるのは、
#PICTURE "Scene05-1.bmp" 1
ベッドと
#PICTURE "Scene05-2.bmp" 1
本棚と
#PICTURE "Scene05-3.bmp" 1
ドアだけだ。
#CHOICE "どうする?" "本棚を調べる","ドアを開ける","ベッドに戻る" "Scene04","Scene07","Scene02"

シーン4と5は今まで出た内容と同様なので、とばします。
 

:Scene06
#PICTURE "Scene06.bmp" 1
#CLS
本を手に取り、開いてみる。
//鍵を入手済なら、鍵はもうない。

行の最初に「//」と入れると、その行はコメント扱いになります。
コメント行は文字通りソース中のコメントであり、コンパイルしても表示されません。  

#FLAGJUMP 99 1 "Scene06-2"

また新しい命令が出てきました。
#FLAGJUMPの説明をする前に、フラグについて理解しておいた方がいいでしょう。
はてなダイアリーのキーワードを見ていただくとよくわかるかと思います。
簡単に(かつ乱暴に)言うなら、「ある事柄が起きたかどうかを判断するための入れ物」というところでしょうか。
例えば「99番目のフラグが0だったら鍵を拾っていない。1だったら鍵を拾っている」という具合に使います。
で、#FLAGJUMPですが。

 #FLAGJUMP フラグ番号 数値 "ラベル"

つまりここでは、
「99番フラグが1だったらシーン6−2に飛ぶ(それ以外ならそのまま次のシーン6−1に進む)」
ということになります。
 

:Scene06-1
…本に鍵がはさまっていた。
#LAYER1 "Scene06-1.bmp" 30,30 2

#LAYER1は、PICTUREで表示させた絵の上に違う絵を重ねるときに使います。
(#LAYER2も同様)

 #LAYER1 "画像ファイル" x座標 y座標 描画方法

x座標とy座標で、画像をどこから表示させるか指定します。
描画方法は、画像を表示させるときの効果です。
ここでは2番を指定しています。
 

【鍵を手に入れた。】
#ERASELAYER1 2

#ERASELAYER1で、#LAYER1で表示した画像を消しています。

#SETFLAG 99 1
#JUMP "Scene06-3"
:Scene06-2
…特に変わったところはないようだ。
:Scene06-3
#CLS
本を本棚に戻した。
#CHOICE2 "どうする?" "まわりを見る","ベッドに戻る" "Scene05","Scene02"

:Scene07
#PICTURE "Scene07.bmp" 1
#CLS
//鍵を入手済なら、ドアが開く。
#FLAGJUMP 99 1 "Scene07-2"
:Scene07-1
…鍵がかかっている。
鍵を見つけたら、開くかもしれない。
#CHOICE2 "どうする?" "本棚を調べる","ベッドに戻る" "Scene04","Scene02"
:Scene07-2
さっき見つけた鍵を使ってみる。

「カチッ」
鍵が開いた!

この辺りも、今までに出てきた命令だけですね。
 

:Scene08
#PICTURE "Scene08.bmp" 1
#CLS
見知らぬ部屋から抜け出した。
   【とりあえず、終わり。】
#END

#ENDがあると、そこでゲームを終了してタイトル画面に戻ります。
ゲームオーバー時やゲームクリア時に使いますね。
 

ということで、説明は以上です。
いかがでしょうか?

上記命令が使えれば、とりあえずゲームっぽい物が作れます。
ここのソースをいじるも良し、自分で一からソースを作るも良し、です。
いろいろ試してみて下さい。

<前 目次 次>

Copyright(C) 2000-2005 alg, all rights reserved.
alg_dot_info_atmark_gmail_dot_com