第4章:ハイスコアを表示する(その3)

こんにちは、MSLABOです。

前回までの記事で、ハイスコアを表示する部分はほぼ完成しました。しかし1つだけ問題点があるのです。

今回はその問題点の解消方法について説明させていただきます。

4.32 問題点とは?
まずは前回までに作成したゲームを実行してみましょう。
するとゲームオーバーとなった初回だけ、以下の様な赤メッセージが標準エディタのデバック領域に表示された筈です。

Eclipseを使われている方なら、コンソール領域に同じような赤メッセージが表示されます。

標準エディタ Eclipse
errmsg_nm errmsg_ec

しかもこのメッセージは、2回め以降のゲームオーバー時には表示されません。
初回ゲームオーバー時にのみ、このメッセージが表示されます。

このメッセージが表示される原因は「第4章:ハイスコアを記録する(その5)」で解説した得点を読み取る関数(loadScore)にあります。ハイスコアを記録する際に作成した得点取得関数(loadScore)は以下の様な内容でした。

この得点取得関数はボールを動かす関数(moveBall)で、ボールが画面の外に落ちてしまった場合に呼ばれていました。

ここでゲームで遊んだ初回のゲームオーバーを考えてみましょう。
あたり前ですが、ボールを動かす関数(moveBall)はゲームで遊ぶのが1回めであろうが2回めであろうが、同じ処理を実行しますよね。

つまり1回めのゲームオーバーでも2回めのゲームオーバーでも、ボールが画面の外に落ちてしまったら、必ず得点取得関数(loadScore)を呼び出します。

呼び出される得点取得関数(loadScore)では、以下の処理で得点ファイル(FILE_NAME)を読み取ろうとします。

ところが1回めのゲームオーバー時は、読み取り対象となる得点ファイル(FILE_NAME)は、まだ存在しません。

なぜなら得点ファイル(FILE_NAME)は、ボール移動関数(moveBall)で、今回の得点が前回の得点を上回った際に呼び出される得点記録関数(saveScore)により作成されるからです。

ですから1回めのゲームオーバー時に得点取得関数(loadScore)を呼び出した時点では、得点ファイル(FILE_NAME)は存在していないのです。
このため、先に示した赤文字のエラーメッセージが表示されていたわけです。

 

4.33 解決方法
この問題を解決するためには、得点取得関数(loadScore)で得点ファイルが存在する場合だけ、その内容を読み取るようにすればOKです。

プログラムでは、よく「ファイルが存在するかどうか」を検査するような処理が必要になりますが、そんな場合にも使える手段になります。

具体的には以下のようにプログラミングします。

「最高得点ファイルがあるか調べる」処理が追加されています。

まずは以下の処理に注目してください。

File というのは ファイルを扱うための専用の型(正確にはオブジェクト)になります。オブジェクトって??という方も見えるかもしれませんね。

オブジェクトとは何かを解説すると、それだけで結構な説明が必要になります。オブジェクトが何かわからない人は、ひとまずは int や PImage と同じで、「ある決まった種類のデータを格納する変数の型」だと思っていただければ良いです。※

※実はPImageも、画像を扱う専用のオブジェクトなんです。こちらも「画像を扱うための専用の型」だと説明してきましたよね。ですからFileも「ファイルを扱うための専用の型」だと思ってください。

ここではFileとは、File( ファイル名 );で示されたファイルに関する様々な情報(ファイルのサイズや、作成日付など)を格納する専用の型だと考えてください。

new File( ファイル名 );  とする事で、指定されたファイルに関する情報を file という変数に新規(new)に格納してくれます。

そのファイルに関する情報を格納した file 変数から、「ファイルが存在するかどうか」という情報を読み出しているのが上記箇所になります。

exists()という命令は file に格納されているファイルが、存在していれば True を、存在しない場合は False を戻してくれます。この値が False なら得点ファイルが存在しない(つまり最初のゲームオーバー時)ですので、以降の処理は行わずに return で-1 を戻しています。

《次回の予定》
今回はここまでとします。次回は得点表示を、さらにゲームらしくしてみたいと思います。


《覚えたこと》
ファイルの存在をチェックする方法

《覚えた関数》
File
File.exists()

次章:
第4章:ハイスコアを表示する(その4) へ進む

前章:
第4章:ハイスコアを表示する(その2) へ戻る

目次:
目次 へ戻る


◆よりプログラミングを楽しみたい方、プログラム作成のお供に:
PROCESSING逆引きリファレンス


★お知らせ★
よりわかり易く読みやすい記事を目指して「PROCESSINGで始めるゲーム作りとコンピュータ」の記事を改定しています。

改定版の記事は以下から閲覧できます。よろしければ、どうぞ。

(改定版)PROCESSINGで始めるゲーム作りとコンピュータ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)