あたまの なかは からっぽ!

~スカスカな脳みそでれっつプログラミン愚~

対戦ログの入出力形式について

ポケモンの対戦AIを作るに当たって
まずは対戦ログの作成ツールを作ろうということですが、
プログラムを実際に作る前にツールとしての入出力形式を定めます。

[補足]
まず、ログ作成ツールには大きく分けて3つの機能があります。

  1. 対戦の状態を順次入力していき、それをUI(ユーザインタフェース)に表示する(UI上で再現する)
  2. UI上で再現された対戦を保存する(今回はログファイルとする)
  3. ログファイルを読み込んで、ログの対戦をUI上で再現する

この内、2と3は要するにファイルの入出力ですが、
このプログラムがログファイルとして読み書きするには、
ログファイルにはどのような情報がどのような順序やルールで書き込まれるのか
定義してあげなければいけません。

今回の入出力形式という言葉はログファイルのルールのことを指しています。


ポケモンの対戦を記録するのに必要な情報を以下に列挙してみます。

  • 対戦に使用されるポケモン
  • 対戦中の動作
    • 自分の行動
    • 相手の行動
    • その他の対戦要素(場の状態など)

上記の他に、あると後でAIが活用できる情報を列挙します。

  • 対戦に使用されるポケモン
    • 自分のポケモンの詳細(技やステータスの実数値など)
  • 対戦中の動作
    • ダメージ量(相手へのダメージは実測不能なので、割合で表現)

これらの情報にファイルバージョンを付加することで、
形式が途中で変更になっても、新旧形式で互換を取ることが可能になります(多分)。
また、対応するルールの追加に対しても柔軟に対応できます(多分)。



これらを考慮して今回考えたのがこちらの形式です。

  • 前提
    • 拡張子は[.pokelog]とする(予定)
    • csv形式を基本とする
    • 下記の1~5の間にはそれぞれ最低1行の空行を挟む
  1. ファイルバージョンの記述
    • ファイルのバージョンをファイルの先頭に記述する
  2. 自分の見せ合いポケモンの列挙
  3. 相手の見せ合いポケモンの列挙
  4. 自分の選出ポケモンとその詳細
    • ポケモン名,性別,特性,持ち物,タイプ1,タイプ2,技1,技2,技3,技4
    • HP,攻撃,防御,特攻,特防,素早さ
    • 上記2行をポケモン1匹毎に記述(3匹選出だと計6行)
  5. 対戦時の行動や状態
    • プレイヤーの種類(自分・相手・場など),ポケモン名,行動の種類
    • 上記を1つの行動・状態と定義して、上記のように1行のcsvとして記述する
    • 実際の行動順に記述する
    • ターンが変わる毎に空行を最低1行挟む
    • 最後に空行を追加して勝敗を書く

最後に例を挙げて終わります。
(実数値などは適当です)

[例:pokemonlog.pokelog]
6thSingle_Csv_Beta

フシギダネ,フシギソウ,フシギバナ,ゼニガメ,カメール,カメックス
ヒトカゲ,リザード,リザードン,キャタピー,トランセル,バタフリー

フシギダネ,オス,しんりょく,しんかのきせき,くさ,どく,はっぱカッター,ヘドロばくだん,やどりぎのタネ,ねむりごな
100,100,100,100,100,100
カメックス,オス,げきりゅう,たべのこし,みず,,ハイドロポンプ,れいとうビーム,こうそくスピン,からにこもる
100,100,100,100,100,100
フシギバナ,オス,しんりょく,フシギバナイト,くさ,どく,ギガドレイン,ヘドロばくだん,めざめるパワー(炎),ねむりごな
100,100,100,100,100,100

相手,リザードン,繰り出し
自分,フシギダネ,繰り出し

自分,カメックス,交代
相手,リザードン,かえんほうしゃ
自分,カメックス,100ダメージ
自分,カメックス,やけど

...
(省略)
...

相手,リザードン,かえんほうしゃ
自分,フシギバナ,100ダメージ
自分,フシギバナ,瀕死

敗北