はじめに
皆さんはいつもどのようにキャラクターや敵の攻撃力、敵の出現頻度、範囲などを調整していますか?いちいちプログラムに書かれたパラメータをいじって調整するのも良いですが、今回はその調整する部分を外部に切り出して調整できるようにしてみましょう。
というわけで、今回はゲームでのキャラクターや敵のパラメータをExcelのCSVファイルを使用して外部に切り出し、パラメータを調節しやすくする仕組みを簡単に作ってみたいと思います。
CSVを作成
まずはCSVファイルを作成しましょう。CSVファイルとは(Comma Separated Values)のことでコンマ区切りでデータが保存されるテキスト形式のファイルのようなものです。
今回はモンスターのパラメータを作成してみました。
このようなデータを作成したらダウンロードやエクスポートなどで.csvを選んで保存してください。保存したファイルを開いてみるとコンマ区切りでデータが並んでいると思います。これでCSVファイルができたのでこのファイルを読み込む仕組みを作りましょう。
環境
- VisualStudio2022
- C++14
今回はC++で読み込んでみたいと思います。まずはプロジェクトを作成してください。
CSVファイルを読み込む
次に作成したCSVファイルを読み込みます。
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
int main(void)
{
std::string filePath = "monsterData.csv";
std::ifstream ifs(filePath);
// エラーチェック
if (!ifs)
{
std::cout << "error" << std::endl;
// エラー処理
return false;
}
return 0;
}
ファイル操作をするためにfstreamとsstreamをインクルードします。
ファイルパスをifstreamで読み込みます。このあとにエラーチェックをしておきましょう。
ファイル読み込みがファイルを指定の場所に入れ忘れていたなどで失敗してもエラーを出さないので必ずチェックをしておきましょう。
CSVの内容を画面に出力する
エラーチェックをしてうまく読み込めたら読み込んだ内容を出力していきます。まずは1行ずつ読み込み、その読み込んだ1行から今度はコンマ区切りでデータを取得していきます。
// エラーチェック
if (!ifs)
{
std::cout << "error" << std::endl;
// エラー処理
return false;
}
// ----- 追加 -----
std::string str_buf;
std::string comma_buf;
// getline関数で1行ずつ読み込む(読み込んだ内容は str_buf に格納)
for (int i = 0; getline(ifs, str_buf); ++i)
{
std::istringstream i_stream(str_buf);
// コンマ区切りごとにデータを取得する
for (int j = 0; getline(i_stream, comma_buf, ','); ++j)
std::cout << comma_buf << std::endl;
}
// ----------------
うまくデータを取得できていればコンソール画面にCSVの中身が出力されていると思います。
まとめ
ここから変数に格納して参照することで様々なパラメータを切り出して簡単に調整できるようになると思います。今回は日本語は使いませんでしたが、使う場合はwstringに変換する必要があるので作ってみてください。MultiByteToWideCharとか使えばいけると思います。