ヌメロン製作講座第13回:棋譜データ構造の設計
前回までで設定データの基本的な処理ができたので、今回からは棋譜データの処理に入ります。
今回は棋譜データ構造の設計です。
棋譜データ構造体
ヌメロンの棋譜の種類は、コール&ジャッジまたはアイテム使用です。1つのデータには手番とデータ種別、そしてデータ種別毎のパラメータを格納します。
struct Record
1つの棋譜データを格納する構造体です。
struct Record { MoveID move; DataID did; union { Call call; ItemHighLow itemHighLow; ItemDouble itemDouble; ItemTarget itemTarget; ItemSlash itemSlash; ItemShuffle itemShuffle; ItemChange itemChange; }; };
move は手番の種類(先攻、後攻)です。
did はデータ種別です。
そして union は各データ種別に対応するパラメータ構造体を格納するための共用体です。
enum DataID
データの種別を表す識別子です。
enum DataID { DATA_NULL = 0, DATA_CALL, DATA_ITEM_HIGHLOW, DATA_ITEM_DOUBLE, DATA_ITEM_TARGET, DATA_ITEM_SLASH, DATA_ITEM_SHUFFLE, DATA_ITEM_CHANGE, MAX_DATA };
それぞれ以下に示す内容を表します。
- DATA_CALL
- コール&ジャッジデータ
- DATA_ITEM_HIGHLOW
- ハイ&ローアイテム使用データ
- DATA_ITEM_DOUBLE
- ダブルアイテム使用データ
- DATA_ITEM_TARGET
- ターゲットアイテム使用データ
- DATA_ITEM_SLASH
- スラッシュアイテム使用データ
- DATA_ITEM_SHUFFLE
- シャッフルアイテム使用データ
- DATA_ITEM_CHANGE
- チェンジアイテム使用データ
struct Call
コールデータ構造体です。
struct Call { Number number; Column eat; Column byte; };
number は設定ナンバー、eat はイート数、byte はバイト数です。
struct ItemHighLow
ハイ&ローアイテム使用データ構造体です。
struct ItemHighLow { Rank rank; HighLowID highlows[ MAX_COLUMN ]; Column high; Column low; };
ハイ&ローアイテムデータのパラメータは、ルール設定によって以下の3種類のパタンに分けられます。
- ヌメロン第1~2回大会
- rank は攻撃側が指定した相手の設定ナンバーの位です。highlow[ 0 ] はその位のハイまたはローの種別です。
- ヌメロン第3回大会
- high は相手の設定ナンバーのハイの数です。low はローの数です。
- ヌメロン第4~6回大会
- highlows 配列は相手の設定ナンバーのすべての位のハイまたはローの種別です。
struct ItemDouble
ダブルアイテム使用データ構造体です。
struct ItemDouble { Rank rank; DigitID digit; };
rank は相手が指定した攻撃側の設定ナンバーのオープンしたい位です。digit はその番号です。
struct ItemTarget
ターゲットアイテム使用データ構造体です。
struct ItemTarget { DigitID digit; Rank rank; };
digit は攻撃側が指定したターゲット番号です。rank は使用している位です。ただし未使用の場合は 0 です。
struct ItemSlash
スラッシュアイテム使用データ構造体です。
struct ItemSlash { DigitID slash; };
slash は相手が設定ナンバーとして使用している番号のうち、最大値から最小値を引いたスラッシュナンバーです。
struct ItemShuffle
シャッフルアイテム使用データ構造体です。
struct ItemShuffle { Number number0; Number number; };
アイテムを使用した手番の設定ナンバーが未設定ならばパラメータはありません。もし設定ナンバーが既知ならば number0 はシャッフル前の設定ナンバー、そして number はシャッフル後の設定ナンバーです。
struct ItemChange
チェンジアイテム使用データ構造体です。
struct ItemChange { Rank rank; DigitID digit; HighLowID highlow; DigitID digit2; };
ルールの種別によって以下の2種類に分かれます。
- ヌメロン第1~5回大会
- rank はチェンジする位です。digit はチェンジ前の番号です。設定ナンバーが既知の場合は digit2 はチェンジ後の番号です。
- ヌメロン第6回大会
- rank はチェンジする位です。digit はチェンジ前のハイまたはローの種別です。設定ナンバーが既知の場合は digit2 はチェンジ後の番号です。
以上です。
次回は棋譜データグリッドの作成です。