Iniオブジェクトでセーブデータを保存する

プレイヤーの出したスコアや、ゲームの進行状況をセーブデータとして外部に保存するには、『Iniオブジェクト』を使用します。
今回はIniでデータの保存・読み出しを行う方法と、CF2.5のIniオブジェクトの仕様について解説します。

※INIオブジェクトの説明はヘルプにも記載されていますので、そちらも併せてお読みください。

※2017-05-04追記
相対パス(.\)を使用してファイルを指定する際の注意点について解説記事を投稿しました。

Iniオブジェクトでセーブデータを保存する際の注意点

※2015-07-21追記
消失していたサンプルプログラムおよび画像を復活させました。

■サンプルプログラム
今回の講座の内容のサンプルプログラムです。
cf25_blog_2014-11-13_ini_example_2015-07-21

■プロパティの設定
Iniオブジェクトのプロパティの設定について説明します。
cf25_blog_2014-11-13_ini_property_2015-07-21
– 使用するIniファイル
使用するIniファイルの場所と名前を予め指定する場合はここに入力します。
特定の場所に保存する場合はフルパスで入力します。
ファイル名だけを入力した場合はWindowsフォルダに保存されますApplication Dataフォルダに保存したい場合はその下の『Application Data フォルダに INI ファイルを作成する』オプションをONにします。

※ヘルプにて「アプリケーションのディレクトリに INI ファイルを作成した場合は、名前の前に “.\” を追加します」とありますが、Windows 7以降(Vistaは未確認)では、アプリケーションのディレクトリのパスが代入されないので(バグ?)、プロパティでは入力せずに、イベントにてファイルを指定する方法を推奨します。
※イベントでファイルの場所を指定する場合は『Application Data フォルダに INI ファイルを作成する』オプションはOFFにしてください。

※FlashやiOS、Androidなど、Windows EXEアプリケーション以外のプラットフォームでビルドする場合は、パスは指定せずファイル名のみを入力します。

– UTF8
ONにすると作成されるIniファイルがUTF-8フォーマットで保存されます。UTF-8とはUnicode文字コードの一種で、Iniファイルに日本語などのマルチバイト文字を格納する場合は通常はこのオプションをONにします。OFFの場合でも日本語は格納できますが、日本語以外のOSで実行すると文字化けします。
ただし、このオプションがONの場合、ファイルパスの指定方法で注意しなければならない仕様が発生します(後段で解説します。)。

■イベントでファイル名を指定する
イベントによって使用するIniファイルを指定するには『現在のファイルを変更』アクションを使用します。
cf25_blog_2014-11-13_ini_current_file_2015-07-21
数式にファイルパスをフルパスや相対パスで指定します。フルパスはファイルまでのパスを全て記述する方法、相対パスとはパス全ては記述せず、ファイル名の前に『.\』を付ける方法です。『.\』を付けると、それ以降のディレクトリ(フォルダ)やファイルまでのパスが自動で取得されます。その他にCF2.5の機能でアプリケーションディレクトリを取得する『Apppath$』という関数も存在ます。ただし、前述のプロパティで『UTF8』にチェックしている場合、パスに日本語などマルチバイト文字が含まれているとファイルが取得されない仕様がありますので、その場合は『.\』を使用します。

『UTF8』がONの場合、
“C:\MyGame\save.ini” のように全て半角英数のパスなら正常にアクセスできますが、
“C:\マイゲーム\save.ini” のようにパスに日本語などの全角文字が含まれるとアクセスできません。

ちなみに、この問題はファイルパスのすべてに及ぶので、ファイル名にも全角文字は使用できません(“save.ini”は問題ありませんが、“セーブ.ini”だとNG。ファイルは作成されますがファイル名が文字化けします)。
cf25_blog_2014-11-13_ini_filepath_full_2015-07-21
↑フルパスで指定した場合。この場合、必ずこの場所にファイルが存在していないとアクセスできません。
cf25_blog_2014-11-13_ini_filepath_relative_2015-07-21
↑相対パスで指定した場合。.\までのパスは自動的に取得されますので、IniファイルをEXEと同じフォルダに保存した場合にアプリケーションのフォルダの場所がどこにあってもパスが通ります。
前述の通り、UTF8オプションがONの場合は、パスにマルチバイト文字が含まれているとIniファイルにアクセスできない仕様がありますが、この方法の場合、パスにマルチバイト文字が含まれていても、プログラム上でパスの文字列そのものが返るわけではないので問題なくアクセスできます。
cf25_blog_2014-11-13_ini_filepath_apppath_2015-07-21
↑Apppath$関数を使用して指定した場合。こちらでもEXEのあるフォルダまでのパスが取得できますので、ゲームをプレイするユーザーによって場所が変わってもパスは通ります。相対パスで指定する場合と違い、こちらはパスの文字列が返りますので、UTF8オプションがONの場合にパスにマルチバイト文字が含まれるとアクセスできない仕様に引っ掛かりますのでおすすめできません(UTF8オプションがOFFなら使用可能)。

■Iniファイルにデータを書き込む
アクセスするファイルを指定した後に、Iniファイルにデータを書き込む手順です。

1.グループを指定する
Iniファイルに格納されるデータの項目は、グループで分類することができます。
『現在のグループを変更』アクションでグループを指定ます。

2.項目を指定
『現在の項目を変更』アクションでグループ内の項目を指定します。

3.数値もしくは文字列を書き込む
Iniファイルには数値と文字列を書き込むことができます。
『値を変更』または『文字列を変更』アクションを使用します。
『値 (項目) を変更』や『値 (グループ – 項目) を変更』などを使用すると、グループや項目の指定から数値(文字列)の書き込みまでを一度に行うことができます。
※2014-1-24追記2
cf25_blog_2014-11-13_ini_savedini_2015-07-21
↑作成されたIniファイルの内容はこのようになります。『UTF8』がONの場合は、ファイルフォーマットがUTF-8として保存されますが、内容が半角英数のみであった場合はUTF8がオンであってもANSIで保存されます。

■Iniファイルからデータを読み出す
Iniファイルに書き込まれたデータオブジェクトが取得する方法です。
グループと項目を指定するまでは書き込みの手順と同じです。
各オブジェクトの変数や可変文字列へIniファイルのデータを取得するには『値を取得』『文字列を取得』を使用します。
cf25_blog_2014-11-13_ini_getitem_2015-07-21

コメントを残す

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

Time limit is exhausted. Please reload CAPTCHA.