AOYAMA Koji's PROGRAMMING BLOG

テキスト形式のデータ構造は人間に扱いやすい

2021/03/21
プログラミングブログ / 便利ツール / スイスドロー / (本記事)

 順調に減っていたのにここのところげ止まりで、リバウンドしそうな勢いになっていますね。 なかなか理想的にはいかないものです。…って私の体重の話です。
 さて前回ご紹介したスイスドロー形式の対戦マッチングツールをここから少しずつ解説しようかと思います。 最初になる今回は、ツールの応用的な使い方にも繋がる、次の回戦のために受け渡す、内部的なデータの形式について。

テキスト形式のデータ構造で次回戦へ渡す


 本ツールは、名前登録1回戦2回戦…、と進めていきます。 その際に、名前の情報や、勝敗の結果を更新していく必要がありますが、 本ツールでは、名前のリストや試合結果を以下のようなテキスト形式のデータとしてしていく方式を用いました。

 この例は、AAAさんは1回戦でCCCさんに勝ち、2回戦でBBBさんに負け、BBBさんは1回戦で不戦勝、2回戦でAAAさんに勝ち…などを表しています。

場合分けをできるだけ減らす


 プログラミングをする際は、場合分けを少なくしてシンプルにした方がベターです。 本件の例では、1回戦と2回戦は同じ形式で結果が表現できると良いです。 そしてできれば名前登録部分もそれらと同じルールにできると、さらにいです。
 そのため本ツールでは名前登録時は以下の形式で入力してもらうようにしました。
AAA
BBB
CCC
DDD
EEE

そして1回戦の結果は
AAA +CCC
BBB +nobody
CCC -AAA
DDD -EEE
EEE +DDD

2回戦の結果は
AAA +CCC -BBB
BBB +nobody +AAA
CCC -AAA -EEE
DDD -EEE +nobody
EEE +DDD +CCC

というように、元々のテキストの各行に追加していくような形式にしています。
 このように拡張できるルールを決めることで、同一のプログラムで扱うことができます。

テキスト形式はHTMLおよびJavaScriptで扱いやすい


 テキスト形式にしたのはHTMLやJavaScriptで比較的扱いやすいためです。 プログラミング言語によっては扱いづらいケースもあるので選択には注意が必要ですね。

テキスト形式は人間にも扱いやすく応用が効く


 テキスト形式は人間にも扱いやすく、みやすい、ける、というメリットもあります。
 さらに前述の通り本ツールの各回戦が統一された形式で、実装としても受け渡しデータの読み込み部分は同一のプログラムです。 そのため本ツールは最初の名前登録のところで直接
AAA +CCC -BBB
BBB +nobody +AAA
CCC -AAA -EEE
DDD -EEE +nobody
EEE +DDD +CCC

と書くこともできます。 これで「ゲームスタート」を押下することで、3回戦から開始することができるといった応用が効きます。

まとめ


 スイスドロー形式の対戦マッチングツールで用いた、 対戦結果を次の回戦へ受け渡すための内部的なデータ形式について紹介しました。 またその応用についても記載しました。
 実際に本ツールを用いて何度かオンライン大会を実施しましたが、その中で、 1回戦を開始して間もない頃に2人が加わり、せっかくなのでその2人で対戦する、ということがありました。 本ツールは遅刻者を不戦敗として追加する機能はあるのですが、このシチュエーションには対応していません。 そのため、直接テキストで結果を書いて乗り切りました。
 ツールには、レアケースに対応する機能を追加していくことも必要ですが、 機能が増えると製作者としても使用者視点でもどんどん複雑になってしまいますので、実際に機能追加すべきかどうかは悩ましいところです。 そういった時に応用がくようになっているのは悪くないかなと思います。

補足

テキスト形式ではないデータ構造はバイナリ形式と呼ばれます。バイナリ形式は人間には読みづらいのですが、コンピューターには扱い易い場合が多く、高速に処理できます。ただし本ツールの範囲ではテキスト形式で十分高速ですしプログラムも書きやすいので、テキスト形式のメリットの方が大きいと思います。
・「1回戦と2回戦は同じ形式が良いです」と書きましたが、本ツールでは3回戦以降いくつ回戦があるかわかりませんので、1回戦用のプログラムと2回戦用、3回戦用…のプログラムがそれぞれ別々になっているのはよろしくないです。つまりここの統一化は必須レベルですね。
・この形式のテキストを扱う実際のプログラムも機会があればまた解説したいと思います。
・画像内のラスタライズ文字フォントにOpen Font LicenseNoto Sans Monoを使用しております。

カテゴリー:スイスドロー
著者プロフィール
青山公士(あおやま こうじ)
中学2年生からゲームプログラミングに明け暮れる。ゲーム開発者としての代表作に「スーパー桃太郎電鉄II」(ハドソン)メインプログラマー、[PR]『ドラゴンクエストX オンライン』(スクウェア・エニックス)テクニカルディレクター/プロデューサーなどがある。[PR]「ドラゴンクエストXを支える技術」(技術評論社)著者。本ブログは今までの経験を活かしプログラミングが楽しいと感じる人が少しでも増えるようなものにしたい。 @kojibm
株式会社ロジック推し
推し情報を論理的にわかりやすく紹介することで「世の中をちょっと楽しく」をミッションに活動中。 HP X Instagram
privacy policy
ピックアップ
Loading...
最新記事
Loading...
関連記事
Loading...