Home>戻る

〜第13章 人と会話〜


↑人の横でZキーを押せば、話をすることが出来ます。

12章で、イベントをスクリプトから読み込むようにしましたが、 人との会話も同様にスクリプトから読み込みます。
ただ、前のプログラムではデータを1バイトずつ受け取っていくようにしていたので、 2バイトである日本語をどう扱うのか悩んでいました。
さらにスクリプトの文字コードはシフトJIS形式です。
対して、Javaで日本語を表示させるには文字コードがUnicodeじゃないと無理のようです。
だから、シフトJIS→Unicodeの変換プログラムが必要かと思ってましたが、簡単な方法があったようです。
それは読み込みの部分を改良すればいいだけです。
以前に作成した小説アプレットでこのコードが使われていたようです^^;

今までは
	is = new URL(getDocumentBase(),filename).openStream();

	while((i=is.read()) != -1){
		line[x++] = (char)i;
このようなプログラムでしたが、ここを
	is = new URL(getDocumentBase(),filename).openStream();
	Reader r = new BufferedReader(new InputStreamReader(is));

	while((i=r.read()) != -1){
		line[x++] = (char)i;
このように変更します。
これで日本語のような2バイト文字を、1つのchar型変数にUnicodeとして格納されます。


今回作成したプログラムは、会話を流れるようにしました。
この処理はchar型がUnicodeだから普通に1文字1文字流すようにすればOKです。
もし、C言語のようにchar型が1バイトなら、日本語とアスキー文字とを区別してやるのが大変ですが。

	//一文字ずつ書いていく
	//game_buffer[6]は現在の終端

	int x,y;//描画位置
	x=y=0;
	for(i=0;i<game_buffer[6];i++){
		//19文字で改行
		if(x==19){
			x=0;
			y++;
		}
		bufferg.drawString(String.valueOf(game_talks[i]),10+x*16,2*d.height/3+20 + y*16);
		x++;
	}
<プログラム公開>
Rpg13.java

プロジェクト一式ダウンロード(データ含む)