“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

91.HSPでゲーム&ウォッチのヘルメットを作ろう その9

次はハイスコアの記録処理を作る。
外部ファイルの読み込み、書き込みの練習として、ハイスコアの記録を題材にした。

テキストファイルに、1行ずつゲームモードごとの点数を書き込んでおき、それを読み込んで、ハイスコアの配列に入れるようにしてみた。

noteset命令で読み込み用のバッファを確保。noteload命令でファイルを読み込む。
読み込んだファイルは、行単位で取得、上書きができる。行数はnotemaxに入っているので、ループを回すときの回数にする。
noteget命令で、読み込んだ行の情報を読み込んで、ハイスコアの配列に代入する。

うん。うまくいった。

;ファイルからハイスコアを読み込んでセットする
notesel filebuf
noteload "hiscore.txt"

dim hiscore,2 ;ハイスコア

repeat notemax
	noteget buf,cnt
	hiscore(cnt)=int(buf)
loop

noteunsel

しかし、Windowsでは読み書きできるのに、Androidでは読み込みしかできない。
そこで別の方法で保存することにした。
bsave命令、bload命令で、バイト単位で保存、読み込みをする。
配列変数をそのままbsave命令で保存、bload命令で読み込むサンプルがあったので、簡単に作れた。

exist命令を使うと、ファイルの存在有無を判定できる。
まず、ファイルが存在するかを確認して、なければ、スコアを0にしてファイルを保存。
存在したら、読み込んで、ハイスコアの配列にセットする。

;ファイルからハイスコアを読み込んでセットする
dim hiscore,2 ;ハイスコア

exist "hiscore.dat"
if strsize>0 {
  bload "hiscore.dat",hiscore
} else {
  ;ファイルがなければいったん保存して作成
  hiscore=0,0
  bsave "hiscore.dat",hiscore
}

この方法なら、Androidでもハイスコアが保存、読み込みできた。
ファイルは、Windowsだと同じフォルダ内に、Androidだとアプリのデータ領域に保存される(らしい)