JAVAプログラミング講座
宇宙のJAVAさん


< 某 空間 >

悪 いんた、ぷりたぁ〜

悪 しかし、ぶ〜 もふがいない。 JAVANごときにやられるとは・・・

悪 無理なスレッドを多用してOSを不安定にするぐらいの剛の者は、いないのか!

ワルグマ将軍 次は私が行きましょう!

悪 おお! ワルグマ将軍! 行ってくれるか?

ワルグマ将軍 軟弱なブラウザを使っているものどもへ、悪のアプレットのなんたるかを教えてきましょう!

・・・・・・・・・

・・・・・・

・・・・

・・

 

< JAVA対策本部@地球 >

うし君 またまたJAVAが出たも〜!!

うし君 くま先生、どうするかも〜!

エボ・クマ 先日実戦配備した「Hello JAVA プログラム」スタンバイ!!

みゃあ ラァジャ! Hello JAVA コーディング、スタート!

(ピ、ピ、ピ・・・)

public class HelloJAVA{
  public static void main(String argv[]){
    System.out.println("Hello JAVA !!");
  }
}

みゃあ コーデング終了! 発射!

 


  Hello JAVA !!

 

みゃあうし君エボ・クマ ・・・

うし君 て、敵、無傷です!!

みゃあ 敵、有視界に入ります!

 


  ワルグマ将軍    ドーン!

 

みゃあ なんか、どっかで見たような顔だみゃ〜

うし君 嫌な予感がするも〜

みゃあ にゃ? くま先生 の姿が見えないみゃ?

うし君 ほんとだも〜 どこいったのかも??

 

< JAVA対策本部内空き部屋@地球 >

 

エボ・クマ ふふふふふ・・・

エボ・クマ JAVAC !

 

説明しよう。
くま先生は「JAVAC」と唱えると、高速コンパイルを開始し、
地球を守る宇宙刑事に変身できるのだ。
ときどき変身時にOSが落ちることがあるが、気にしない。
速やかに「リセットボタン」を押して、無かったことにすれば良い。

 

JAVAN 宇宙刑事 JAVAN !

 

 

< JAVA対策本部@地球 >


うし君 くそー、どうすることもできないも〜

みゃあ みゃ? あれは、誰だみゃ?

 

JAVAN JAVAN参上!


みゃあ JAVANが来てくれたみゃ〜 助かった!


ワルグマ将軍  来たか・・・

JAVAN 早速で悪いが、消えてもらおう!

 

JAVAN Image、メソッド、flush() !

ワルグマ将軍  相変わらずだな・・・

ワルグマ将軍 FilterWriter、メソッド、flush() !

 

ドガーーーーーーーーーーーン!!!!

 

みゃあ な! 同じ技を!

うし君 技が相殺した!

 

JAVAN く・・・

 

みゃあ いや! わずかに JAVAN が押されてるみゃ!!

 

JAVAN くっ・・・ この短時間での技で、ストリームをフラッシュするとは・・・

ワルグマ将軍 おまえは AWTコンポーネントに頼りすぎなんだよ!
前にも言ったろ、せめて Swing を使えって。

ワルグマ将軍 JAVA 2Dは奥が深い。
見せ掛けの技じゃ、一生俺に勝てんぞ・・・

 

JAVAN ??? お前はいったい???

ワルグマ将軍 まだ気がつかないのか?

(カチャ!)

 

ワルグマ将軍  バーン!

 

JAVAN に、兄さん!

 

あのワルグマ将軍の正体は、生き別れの兄であった。

いつか遠い昔に封印した「過去の記憶」。

そして、少年の日々。

JAVANは何を思い、戦っているのであろうか?

謎が謎を呼び、爆裂健は引越しのため貯金が目減りしてびびる。

次回、宇宙刑事JAVAN 第3話 「JAVAN誕生の秘密」。

君も JAVAを語るプログラマーとなれ!

 

  − 続く −

 


くま先生の ノベルゲームをつくっちゃお(全?回)

第4回 フラグ処理


エボ・クマ さて今回はアドベンチャーに欠かせない「フラグ処理」を行うためのプログラムをしましょう。

みゃあ 「フラグ」というのは、何かみゃ?

エボ・クマ 「フラグ」とは、その名のとおり「旗」です。
まぁ、簡単に言うと、ゲームプログラムの中に「複数の旗」を持っていると考えてください。
こんな感じです。 すべてのフラグには番号がついています。
(この図では1番〜20番までのフラグがあるものとしています)

エボ・クマ 通常アドベンチャーゲームはフラグを使って、条件分岐をしているのです。

エボ・クマ では、具体的に例をあげて説明しましょう。

エボ・クマ ゲームをスタートした直後は、普通すべてのフラグが倒れています(OFF)。

エボ・クマ で・・・

寒い冬のある日、道を歩いていると雪だるまがマッチを売っていたとしましょう。
「買う」「買わない」を選択できる画面になったとします。

 

 

みゃあ おおよそありえない設定だみゃ〜

エボ・クマ このときゲームプレイヤーは、「買う」「買わない」のどちらかが選択できます。
もし、「買う」を選択した場合は フラグ3 を立てます(ON)。

エボ・クマ 「買わない」を選択した場合は、フラグはそのままです(OFF)。

エボ・クマ で、ゲームの話は、どんどん進んでいったとします。

エボ・クマ そして、「雪だるまが恩返しに来る!」というストーリー(イベント)なった場合、
フラグ3を見て、そのイベントを出すかどうか決めることが出来ます。

 

フラグ3がONだった場合 > 雪だるまが恩返しに来る。

フラグ3がOFFだった場合 > 雪だるまは恩返しにこない。

 

エボ・クマ このようなフラグによる分岐処理で、ストーリーの流れを変えたり、マルチエンディングを行っています。

みゃあ なるほど、フラグって大切なんだみゃ〜

エボ・クマ さっそく、フラグ処理のプログラミングをしましょう。

エボ・クマ ます、フラグ変数をグローバルで宣言します。
フラグはONOFFしかないので、boolean形 で宣言します。
変数名は「flag」とします。

public class novel extends Applet {

 // グローバル変数

 String scene[];
 String screen[];
 int now_line;
 Image img;
 boolean flag[];

エボ・クマ 次に今宣言したフラグ変数を初期化しましょう。
初期化は初期化関数 init() で行います。
初期値はすべて false (フラグOFF) とします。
ただし例外として、フラグ0(flag[0])だけは true (フラグON)にします。

フラグの数は全部で30個としましょう。
この初期化で flag[0] 〜 flag[29] までの30個のフラグが使えるようになります。

public void init() { // 初期処理

 scene = new String[1000];
 screen = new String[15];
 now_line = 0;
 img = null;
 flag = new boolean[30];

 for (int i=0; i<30; i++) flag[i] = false;
 flag[0] = true;

うし君 できたも〜。 これで フラグのプラグラムは終わりかも??

エボ・クマ あと、フラグを使うための「タグ」を作らなくてはなりません。
以下の「タグ」を追加することにしましょう。

 

<Flag UP タグ>

FUP (番号)

<Flag DOWNタグ>

FDOWN (番号)

 

エボ・クマ プログラムを書く場所は、SetText() 関数の <<タグの処理>>の部分です。
前回の講義で作った「CGOFF」タグ処理の下に書きましょう。

if ( st1.equals("CGOFF")) {
img = null;
continue;
}

if ( st1.equals("FUP")) {
 int no = Integer.parseInt( st2 );
 flag[no] = true;
 System.out.println("フラグ"+no+"番アップ\n");
 continue;
}

エボ・クマ もし st1 が FUP だった場合は、 st2 の数字のフラグをONにしています。
で、JAVAコンソール「フラグ?番アップ」と表示をしています。
ゲームを開発するときに、JAVAコンソールを見ればフラグの動きがわかるからです。

エボ・クマ つまり、

FUP 7

という1行がシーンファイル(テキストファイル)にあると、st1 に FUPst2 に 7 が入ります。
よって、フラグ7がONになるわけです。

みゃあ ここら辺のタグの処理のからくりは、前回の講義で説明してるみゃ。
JAVAコンソールは、第1回の講義で説明してるみゃ。

うし君 Integer.parseInt( st2 ) って何の命令だも??

エボ・クマ  Integer.parseInt( ) というのは、String 型の変数を int 型に変換する命令です。
st2 変数は、String型(文字)なので、この命令を使って int 型(数字)にしているわけです。

ちなみに Integer.parseInt( ) 命令は、数字以外の String型を数字に変換することは出来ません。
(あたりまえですが・・・)

よって、

int i = Integer.parseInt( "72" );

と書けば、変数 i には72という数字が入りますが、

int i = Integer.parseInt( "abc" );

と書くと、数字に変換できないのでエラーになってしまいます。

うし君 なるほども。

エボ・クマ 当然フラグをOFFにする「FDOWN タグ」も追加します。
先ほどの FUPタグ処理の下に書きます。


if ( st1.equals("FUP")) {
 int no = Integer.parseInt( st2 );
 flag[no] = true;
 System.out.println("フラグ"+no+"番アップ\n");
 continue;
}

if ( st1.equals("FDOWN")) {
 int no = Integer.parseInt( st2 );
 flag[no] = false;
 System.out.println("フラグ"+no+"番ダウン\n");
 continue;
}

エボ・クマ 処理の内容は、FUPタグと同じです。
これで、フラグプログラミングは終了しました。

エボ・クマ シーンファイル(テキストファイル)の中に、

FUP 7

という行があったら、フラグ7をONにします(フラグを立てる)。
同様に、

FDOWN 12

という行があったら、フラグ12をOFFにします(フラグを倒す)。

みゃあ なるほどみゃ。

エボ・クマ では、シーンファイル(テキストファイル)に追加した「FUPタグ」と「FDOWNタグ」を
書き込みましょう。 これが、読み込むシーンファイルです  

エボ・クマ 始めに

FUP 15

と書いてありますので、フラグ15がONになります。

画面をクリックして文章を進めると、画像を表示する「CGタグ」の下に

FUP 8
FDOWN 15

と書いてあります。
これで、フラグ8はONになり、先ほどONにしたフラグ15はOFFになります。

エボ・クマ では、動かしてみましょう!   

みゃあ でも、ゲーム画面じゃフラグが変わっても、全然わからないみゃ〜

エボ・クマ ゲーム画面ではフラグの変化はわかりません。 JAVAコンソールを見てください。
JAVAコンソールに、フラグのON/OFFの表示が出ます。

うし君 あ、ほんとだ出てるも〜

エボ・クマ 今回はこれでおしまいです。
次回は、フラグが立っているかどうかを見て、次のシーンを決定する「分岐処理プログラム」をやります。

みゃあ だいぶノベルゲームらしくなってきたみゃ。

エボ・クマ では、またお会いしましょう!

 

 

テキストファイルのフォーマット(タグ一覧)


# (コメント)        ・・・  コメント用タグ
CG (画像ファイル名)  ・・・  画像表示タグ
CGOFF           ・・・  画像を消すためのタグ
FUP (番号)        ・・・  番号のフラグをONにする
FDOWN (番号)      ・・・  番号のフラグをOFFにする
END             ・・・  テキスト(文章)ファイルの最後に必ず書く

 

- 第5話につづく -


宇宙のJAVAさん (C) BakuretuKen 2000

戻る