「モダホラ2」コレブーBOXは誰の手に!?春のセカチャレ結果発表!
初の開催から1年目を迎えた本イベント。今回も、マジック×ITの学びの機会として、また腕試しの場として、多くの方にご参加いただきました。誠にありがとうございます。
※各課題の詳細はこちら
多くのご参加の中から、特に優れた作品をお寄せいただいた4名の方に賞品を進呈いたします。また、数名の方に弊社より採用のオファーを、ご応募くださった方全員に参加賞となるスリーブをお送りいたします。
なお、Sekappyでは今後もプログラミングチャレンジを実施予定です。最新情報は弊社の公式Twitterアカウント @SekappyOfficial から発信しております。ぜひフォローいただき、続報をお待ちください。
それでは以下、優秀作品の発表です!
部門(1) 優秀作品(2名)
実務未経験の方を対象とした部門(1)のお題は、デッキから特定のカードを引く確率の計算ツール。
「次のドローであのカードを引ける確率は……!?」
カードゲーマーなら誰もが気にする(?)次のドローの確率を計算してくれるプログラムを作成いただく課題でした。
3部門の中でももっとも多くのご応募を頂戴した本部門。今回は、特に素晴らしい作品をお寄せくださった2名の方に『ストリクスヘイヴン:魔法学院』日本語版ドラフト・ブースター1ボックスをお贈りいたします。
制作者:25歳 男性
部門1:デッキから特定のカードを引く確率の計算ツール(『ストリクスヘイヴン』1BOXプレゼント)
アピールポイント
コードの保守性向上のため、ゲーム状態を記憶するオブジェクトを作成し、課題内容を実装した。本コードを元により複雑な計算の実装をすることは簡単なはずである。
デッキ枚数とその他の入力の整合性が取れているかなどの、入力の合法性の確認処理を丁寧に書いた。プレイヤーとしての経験から、人手での処理のにミスが多いことを常日頃から実感しているため。
講評
ソースコードについて、全体的にキレイに実装されていました。関数やクラス化が行われていて、可読性・保守性が高い点が良いですね。
コメントも適切に記載されていて、他の人に改修を依頼しても問題なく実装ができるでしょう。エラーが発生した場合、どこでエラーが起きているのかがメッセージに表示されるとより使いやすくなりそうです。
気になった点としては、入力時に「デッキの枚数」など、文字列を入力しないとならないこと。また、デッキリストのインポート時に、エキスパンションが異なる等の理由から同名カードが複数行あった際に不具合が生じるようです。
総合的に見て、動作面で若干の不具合や見づらい部分はありましたが、実装面では優れた完成度といえる作品でした。
制作者:20歳 男性
部門1:デッキから特定のカードを引く確率の計算ツール(『ストリクスヘイヴン』1BOXプレゼント)
アピールポイント
MTGアリーナのデッキエクスポートでコピーされる形式に合わせたため、ネット上のデッキレシピやMTGアリーナ上で組んだデッキをそのままコピーするだけで簡単に検証を行えます。
さらに、入力内容から選択肢を生成し選択させることでタイプミスによるエラーをなくすことが可能です。
講評
関数でまとめられていて、見やすいソースコードでした。UI部分と実働部分を分けて実装していると、より見やすいコードになったでしょう。
デッキリスト読み込み後にその場で修正できる点やカウントするカードを一覧化している点など、入力のしやすさが好印象でした。重複エラーも考慮されており、独自性が感じられます。
今後の課題は視認性や操作性の改善でしょうか。同じカードが複数枚あると並んでしまい見づらいので数字での表記を併用する、上部に表示される計算結果を見やすいよう上にスクロールする……など。また、デッキセットを複数回行うと、前のデッキがクリアされず混合されてしまうという不具合が見られました。
総合的に見て、動作面はわかりやすいUIでした。まだ改善の余地は見られましたので、さらに良いものにできるでしょう。
実装面では、関数化されていて見やすいコードでした。インデントなどのコーディング規約や、UI部分と実働部分を分けて記載されているとなお可読性が高くなります。
部門(2) 最優秀作品(1名)
実務経験3年未満の方を対象とした部門(2)の課題は、コンボが初手に揃う確率の計算ツール。
初手にパーツが揃うかどうか?という、コンボデッキの命題に挑むこちらの課題。デッキ内のコンボパーツや土地枚数を指定し、それらが初手に揃う確率を求めるプログラムを製作いただきました。
今回は、課題内容に加えてプラスアルファの機能を実装した、こちらの作品を最優秀賞とさせていただきました。製作者様には、賞品として『モダンホライゾン2』コレクター・ブースター日本語版1BOXを進呈いたします!
部門2 最優秀作品 制作者:32歳 男性
部門2:コンボが初手に揃う確率の計算ツール(『モダンホライゾン2』コレクターブースターBOXプレゼント)
アピールポイント
課題では2種のコンボパーツを1枚ずつ組み合わせれば良いとしています。また、土地の指定も1種のみでした。
今回の実装ではN種類のコンボパーツに対して複数の組み合わせを入力することができます。デモを簡易的に作成しましたので、そちらでご確認ください。
懸念点はマリガンパウダーの存在を無視していることです。
講評
ソースコードについて、本体と関数を別ファイルに分けて記載していて、非常に見やすいものとなっていました。関数にコメントが詳細に記載されており、例も記されていることでイメージしやすくなっています。
アピールポイントでも触れておられるように、ソース内にデモを内蔵しているのもGood。改修時も助かりそうです。総じて、保守性に優れた良い作品となっていました。
部門(3) 最優秀作品(1名)
部門(3)は実務経験の有無を問わない最難関。パックが無くてもドラフトを練習できる、8人対人ドラフトツールの作成が課題でした。
参加受付、席順決定、パック内容のチェックからピックまで、これさえあればドラフトができる!という、高度な機能を要求された本部門ですが、たいへん素晴らしい作品をお寄せいただくことができました。
今回は、業務レベルの大作に仕上がっていたこちらの作品を最優秀賞として表彰いたします!短期間で製作されたとは思えない、お見事な作品でした。製作者様には、『モダンホライゾン2』日本語版コレクターブースター1BOXを進呈いたします!
部門3 最優秀作品 制作者:30歳 男性
部門3:8人対人ドラフトツール(『モダンホライゾン2』コレクターブースターBOXプレゼント)
アピールポイント
拡張性
カード情報、カード画像の取得などすべてバッチプログラム化しているため少しの作業でエキスパンションの追加が可能です。
またウェブドラフト機能において実装したいと思われる機能についての実装のしやすさ(インフラやフロントエンドのソースコード、データベースの設計など)を意識して行いました。(チャット機能、ドラフト卓の募集機能、ドラフト卓が立った際の通知機能、アクセスが増えた際に redis などを用いキャッシュをフルに利用する・・・)など現在のものをベースに簡単に実装が可能です)
保守性
国内でメジャーなフレームワークの Laravel, Nuxt.js の比較的新しいバージョンをできるだけフレームワークのドキュメント・作法に則った方法で開発しているため属人性が少ないです。また Docker で簡単に起動できるよう設計しているので簡単に開発環境の構築ができます。
その他諸々ありますが時間の都合で割愛させてください。かけられる時間が少なく、手順方法が見づらい、わかりづらいものになってしまっている点申し訳ございません。ご容赦いただけますと幸いです。
講評
- フロントエンドとAPIサーバの2部構成で、それぞれがフレームワークの基本に沿って実装されています。手堅い作りで保守性に優れていると感じました。
- コーディングも一般的な規約に忠実。変数・関数の命名、引数・戻り値の型指定、適度なコメント等どれを取っても文句の付け所がありません。
- 機能面は、席順がランダムではないこと以外は課題内容を不足なく実装されています。ユーザ登録&ログイン、立てた卓をURLで共有、複数卓の運営可能等、ハイレベルに仕上がっていると思います。
- 新エキスパンションのカード情報・画像取得機能があったり今後のTODOがコメントとして記載されていたりと、運用面まで意識されていて好印象を受けました。
- UIや操作性はアリーナに近しく、問題なく整っています。ピックしたカードの順番が不規則な点だけ気になりました。
- 残り時間のカウントダウンや最終ピックがうまく行かないといった軽微な不具合がいくつかありました。とはいえ、短期間でこの規模のシステムを実装された事を考えれば看過できる量かと思います。
ご紹介は以上となりますが、惜しくも選外とさせていただいた作品も素晴らしいものばかりでした。改めて、ご応募くださった皆様に御礼申し上げます。賞品も順次発送しておりますので、到着をお待ちいただければ幸いです。
Sekappyでは、これからもマジック×ITを盛り上げるべく、プログラミングチャレンジを継続開催してまいります。本記事で企画を知られた方、自分のスキルを試してみたいという方、賞品獲得を狙っちゃおう!という方、ぜひ次回の開催を楽しみにお待ちください。
この度は多数のご参加、誠にありがとうございました。