うまげーむのゲームブログ

ゲームの情報を主に投稿します。

【ウマ娘】Javaでウマ娘キャラソートプログラムを作った。 - うまげーむの雑記 #4

はじめに

どうも。久しぶりの雑記です。

 

このブログではまだ3つしかウマ娘の記事を投稿していませんが、私は最近のゲームのプレイ時間で言うと7割ぐらいをウマ娘が占めているほどのウマ娘好きだったりします。

実際の総プレイ時間でいうとおそらく1600時間ぐらいですね。

1年ちょいで1600時間が多いのか少ないのかは分かりませんが、2019年~2021年の間に私はフォートナイトを3000時間弱プレイしているので、めちゃくちゃ多いわけではないと思います。多分。

なんかウマ娘めちゃくちゃやってるアピールしてますが、チャンピオンズミーティング(月一で開催される大会)では全然勝ててないというのが現実。(でも人一倍、ウマ娘への愛はあります!!)

 

ウマ娘に限らず、何かの作品を語るときは「推し」というのがかなり重要になってくると思うんですよね。

私はウマ娘以前にはアニメとか全然ハマってなかったので、「推し」という言葉にはほとんど縁がなかったわけですが。

ということで今回は、少し前に作ったウマ娘キャラソートプログラムの話です。

キャラソートってなんすか

ピクシブ百科事典より、キャラソートとは、「ある作品や作品群に登場するキャラクターを特定の順序で並べること」らしいです。

好きな順に並べることが多いですね。好きなキャラランキングみたいな感じです。

そして、インターネット上にはそんなキャラソートを簡単に行えるプログラムが多く存在します。

大体は2つのキャラクターが表示され、どっちが好きかを選び、すると違うキャラクターが表示されるので同じようにどっちが好きかを選ぶという作業を繰り返していくといったものです。

約1ヶ月前の私は暇だったので、これをJavaで再現しようと思い作り始めました。

キャラソートの仕組み

キャラソートはソートアルゴリズムを実装することによって作られます。

ソートアルゴリズムにはクイックソートバブルソートなど様々な種類がありますが、キャラソートには主にマージソートと呼ばれるものが使われます。なぜマージソートなのかは知りません。

f:id:Umagame:20220404181350g:plain

Wikipediaマージソートのわかりやすいgifがあったので貼っておきます。

既に整列されている塊同士をマージ(Merge)するやり方で、最も速いと言われているクイックソートと同じぐらい速くソートすることができます。

キャラソートでは、キャラ同士の並び順の判定を人間側がするだけで、他は普通のソートプログラムと同じですね。

ソートアルゴリズムの実装

マージソートの実装は自分で考えてやることにしました。実装例を調べてコピペするのは流石におもんないので。

ですがマージソートの実装は想像より難しく、完成まで2回ほどすべてのコードをリセットする羽目になりました。

ただ数字などを大きさ順で並べかえるプログラムならすぐに作れたと思いますが、並べ替えの判定を人間側が行うというキャラソートの特性のため、実装にかなり苦戦しました。

実際のコードは素人が作ったゆえに難解なので載せませんが、大まかな作りを説明します。

f:id:Umagame:20220404194618p:plain

まず、JavaのListを使って、List<List<ウマ娘>>型のリスト(上の図でいうと「List1」)を作ります。

これはリストのリストなので、図のようにいくつかのウマ娘が入ったリストがいくつか入っています。

List1に入っているリストはそれぞれ、既に中身が並べられているようにしてあります。(なので、ソート開始時はウマ娘1人だけが入ったリストがウマ娘の人数だけ入っています)

List1に入っているリストのうちどれか2つを選んで(①)、その2つをマージします。

マージの過程で、GUIを使って並び替えるウマ娘の画像を表示し、ボタンを押して選べるようにしています。(②)

そして、マージ後のリスト(図でいうとList2)が完成したら(③)、それをList1にまた戻します。(④)

この作業を繰り返していくと(⑤)、いずれList1の中身が一つの大きなリストになっている、という感じです。

説明が下手で申し訳ないです。

まあとりあえず、頑張ってリストを駆使してソート部分を実装できました。

GUI

GUI、つまり操作画面を作ります。

JavaにはSwingと呼ばれるGUIを作るためのキットがあるので、これを使います。

私はSwing大好きマンなので、ソート画面を作るのは楽しかったです。

f:id:Umagame:20220404200122p:plain

タイトル画面です。スタートボタンのみ置いています。

f:id:Umagame:20220404200125p:plain

ソート画面です。2人のウマ娘が表示され、その下に名前の書いてあるボタンが表示されます。

f:id:Umagame:20220404200517p:plain

こちらが結果画面です。左の選択肢を連打した結果です。

全体的に安っぽい、というか必要最低限の作りしかしていませんが個人用なので問題ありません。

「戻る」ボタンの実装

ソートの途中でミスった時、元に戻るボタンがあれば便利ですよね。というか無いとおかしいですよね。

ということで実装しましょう。

調べると履歴の実装は、Dequeと呼ばれるものを使ってやると便利らしいです。

操作を一回するごとに一つ前の状態をDequeに保存し、戻るボタンを押したときに前の状態にすぐ戻れるようにします。

f:id:Umagame:20220404202538p:plain

「1問前へ戻る」ボタンも追加して、戻る機能の実装ができました。

まあ、こんなさらっと戻る機能を実装できるほどのプログラミングの実力があるわけもなく、実装はソートアルゴリズムの時より苦戦しました。

結局、うまげーむの推しって誰なん??????????

ウマ娘キャラソートプログラムの作成の流れはこんな感じです。製作期間は3日ぐらいかな?

では実際に私のソート結果を発表します。

ちなみに、ウマ娘ナリタトップロードまでの74人です。

ナリタトップロードまでなので、最近追加されたツルマルツヨシアストンマーチャンは入ってません。また、ビターグラッセやリトルココン、ハッピーミークは入ってません。

f:id:Umagame:20220404205744p:plain

はい。こちらが私の好きなウマ娘ランキングTOP74です。

ファインモーションが最推しですが、ほとんど2位のスマートファルコンと同率です。

好きなキャラについては後ほど語ることにします。

悲報、ポンコツ

キャラソートも完成したことですし、インターネット上の他のウマ娘ソートを見てみましょうか。

f:id:Umagame:20220404210850p:plain

dumapp.comというサイトのウマ娘ソートの画像です。

えっと、、、真ん中に見慣れないボタンがありますねぇ。。。

どうやら、キャラソートの多くは「どちらも好き」とか「どちらも微妙」のボタンがついているみたいです。全然知りませんでした。

今更この機能を追加するのは面倒なのでやりません。

私が頑張って作ったウマ娘ソートは、どうやらポンコツのようです。

殿下サマ、ファル子ちゃん

では軽く私の好きなキャラについて書いていきます。

f:id:Umagame:20220404212359p:plain

まずはファインモーションです。

ファインモーションが好きな理由は、可愛いからです。

育成キャラとして実装されたときは、石3万個ぶち込んで速攻で手に入れました。

クライマックスシナリオのせいで読む機会が圧倒的に減りましたが、育成シナリオがかなり良いです。

ちなみにチャンミには出したことがありません。全然強いので使えると思うんですが、他の強いキャラ出しちゃいます。(チャンミ報酬>推し)

f:id:Umagame:20220404215007p:plain

次にスマートファルコンです。

スマートファルコンが好きな理由は、可愛いからです。

ファインと違ってファル子にはチャンミで幾度も助けてもらいました。

そのおかげか、私のアカウントでは2番目に多くファン数を稼いだウマ娘になっています。

 

偶然にも「STARTING GATE 09」というウマ娘のアルバムには、この2人のソロ曲がどちらも入っているんですよね。

これは入手するしかない、とは思っていますがまだ買ってません。(いつか必ず買います!!!)

ちなみに2人のソロ曲はどちらも良い曲なのでぜひ聞いてください。(ファル子の方は最近ホーム画面のジュークボックスに追加されましたね)

さいごに

まあ数日かけてポンコツプログラムを作ったわけですが、Javaの練習にもなったし作ってて楽しかったので全然OKです。

ウマ娘大好きマンのウマげーむは、今日もウマ娘をプレイします。