レビュー依頼の準備をしよう Javaコース上級 ミニゲーム開発編Day14「レビュー前の最終チェックをしよう」

デイトラJava
ハック
ハック

こんにちは、運営者のハックです!

Javaコース上級ミニゲーム開発編Day14の今回はレビュー依頼前の最終チェックを行ったので、その内容を紹介します。

いよいよ作品のレビュー依頼、その前に…

前回までに作成した鉱石採掘ミニゲームのレビューをお願いする前に、レビュー依頼の要件を満たしているか最終チェックを行います。

コードレビュー時の主なチェック項目と依頼時に必要なもの

コードレビューの依頼は「機能要件」を漏れなく満たしていること、ゲームが正常に動作していることが条件です。
機能要件を満たしていない、または、ゲームにバグが発見されるとレビューが不可能なので、提出前に最終チェックを行います。

コードレビュー時の主なチェック項目

  • 機能要件を満たしているか?
  • ゲームとして動作するか?
  • コードの記載が必要最小限になっているか?
  • クラスの分け方 / 命名規則 / コメントの量は適切か など

コードレビュー依頼時に必要なもの

  • ソースコード
  • プラグインのjarファイル
  • Minecraftバージョン
  • Spigotバージョン
  • 独自の要件を追加している場合はその要件
モナ
モナ

コードレビュー時のチェック項目を順番に確認していきましょう。

課題の機能要件のチェックについてはDay11「DB周りの処理をリファクタリング」の回で行いましたので、「ゲームとして動作するか?」からチェックしていきます。

ゲームとして動作するか?

ねこ奈
ねこ奈

ゲームなら、前回の時点でちゃんと作動していることを確認できたのにゃ。

モナ
モナ

ゲームはただ動作すれば良い訳ではありません。

特定の条件下で変な挙動(バグ)をしていないか確認する必要があります。

特定の条件下でも正常に作動することを確認するため、以下の条件について確認しました。

  • ゲーム以外では点数及びボーナスポイントが加算されないこと
  • 連続で同じ鉱石ブロックを破壊している時に違う種類の鉱石を採掘すると、同種鉱石採掘カウントが1になること
  • ゲーム中、敵からのダメージ以外は無効化されないこと
そして、早速バグを発見してしまう…
モナ
モナ

銅鉱石やラピスラズリ鉱石を採掘したのに、点数が加算されない場合があることを発見しました。

原因が不明だったため、各ifステートメントに「System.out.println()」を追加し、どのコードで問題が起きているのかを推測しました。
すると、「[Server thread/INFO]: 採掘されたブロック: DEEPSLATE_LAPIS_ORE [Server thread/INFO]: その他のブロックが採掘されました。」というログを確認しました。これは、「深層岩のラピスラズリ鉱石」を採掘したものが、「その他」ブロックとして処理されていたことを意味します。

ねこ奈
ねこ奈

普通のラピスラズリ鉱石と、深層岩のラピスラズリ鉱石の2種類があるのにゃ!?

モナ
モナ

今まで深層エリアに行ったことがなかったので、気づきませんでした…

以下のとおり鉱石の種類に深層岩版(DEEPSLATE)を追加しました。

//OreMiningCommandクラス
 int basePoint = switch (blockType) {
        case COPPER_ORE, DEEPSLATE_COPPER_ORE -> { oreName = "銅鉱石"; yield 5; }
        case COAL_ORE, DEEPSLATE_COAL_ORE -> { oreName = "石炭"; yield 10; }
        case IRON_ORE, DEEPSLATE_IRON_ORE -> { oreName = "鉄鉱石"; yield 15; }
        case GOLD_ORE, DEEPSLATE_GOLD_ORE -> { oreName = "金鉱石"; yield 20; }
        case LAPIS_ORE, DEEPSLATE_LAPIS_ORE -> { oreName = "ラピスラズリ鉱石"; yield 25; }
    case REDSTONE_ORE, DEEPSLATE_REDSTONE_ORE ->
                      { oreName = "レッドストーン鉱石"; yield 30; }
        case EMERALD_ORE, DEEPSLATE_EMERALD_ORE -> 
                      { oreName = "エメラルド鉱石"; yield 150; }
        case DIAMOND_ORE, DEEPSLATE_DIAMOND_ORE -> 
                                           { oreName = "ダイヤモンド鉱石"; yield 500; }
        default -> { oreName = "その他"; yield -1; }
                    };

今回の修正を含めて先ほどの条件を満たしているか調べ、問題が無いことを確認しました。

アメジスト鉱石だと…!?
もなぁ
もなぁ

最終チェック中に深層エリアを探索していたら、なんかアメジストがたくさんある空間を見つけてしまいました。

ねこ奈
ねこ奈

アメジスト鉱石なんてあったんだにゃ…

アメジスト鉱石については、マインクラフトwikiの鉱石一覧に載っていなかったため、存在すら知らなかったです。ひょっとすると鉱石とは違うかもしれませんが、せっかくなのでアメジスト鉱石についても点数が加算されるように追加しました。

case AMETHYST_BLOCK -> { oreName = "アメジスト"; yield 30; }
モナ
モナ

アメジストには、アメジストブロックと、水晶のようなアメジストクラスター(塊)、成長中のアメジストの芽というマテリアルに分かれているようです。アメジストクラスター等も点数に加算するか迷いましたが、今回はアメジストブロックのみ加算することとしました。

コードの記載が必要最小限になっているか?

リファクタリングして余分なコードや不必要なコードを削除し、微修正しました。

モナ
モナ

微修正のため、修正したコードは特に紹介しませんが、主にIntelliJの機能を使ったり、ChatGPTにコードレビューをお願いし、改善案を取り入れたりしました。

クラスの分け方 / 命名規則 / コメントの量は適切か

クラスの分け方や命名規則については、ChatGPTにコードレビューを依頼した際に微修正を行っています(大文字→小文字などの小さい修正)。コメントの量については、適度にJavadocを追加しました。

//Javadoc例

/**
 * ゲーム中のプレイヤーに関する情報を管理するクラスです。
 * プレイヤー名、現在のスコア、ゲーム時間、アクティブ状態、
 * 最後に採掘された鉱石の種類、連続採掘回数を保持します。
 * このクラスはゲームの進行状況を追跡し、ゲームがアクティブな間は
 *プレイヤーのスコアとゲーム時間を更新します。
 */

/**
* ブロック破壊イベントが発生したときに呼び出されるメソッドです。
* プレイヤーが鉱石を破壊すると、
* その鉱石の種類に基づいてスコアが計算され、プレイヤーの現在のスコアに加算されます。
* また、連続して同じ種類の鉱石を破壊した場合はボーナスポイントが与えられます。
* * @param e ブロック破壊イベントの詳細情報を持つオブジェクト
*/
モナ
モナ

Javadoc作成は時間節約のためChatGPTに依頼しました。

ねこ奈
ねこ奈

まーたGPT先生に頼ってるのにゃ。

ただ作成して終わりじゃなくて、書き方のコツとかをちゃんと習得するんだにゃ!

READMEを作成しよう

READMEはプロジェクトの説明書のことです。プロジェクトの目的、設定方法、使用方法などの重要情報が記載されており、新しいユーザーや開発者に向けたガイドとして機能します。

モナ
モナ

今回は課題提出にあたって、以下の項目をREADMEに記載しました。

  • ゲームの概要
  • 開始方法
  • 対応バージョン
  • MySQLの設定
  • 独自要素
ねこ奈
ねこ奈

READMEってIntelliJで作成できるんだにゃ。

GitHubにプロジェクトをプッシュして共有しよう

引用:GitHub

GitHubにプロジェクトのソースコードをプッシュし、共有できるように設定しました。

モナ
モナ

コードレビューが終わり次第、当ブログにもソースコードのURLを紹介します。

ダウンロードして色々と設定すれば、ご自身のPCでも今回作成したミニゲームをプレイすることができます!

ねこ奈
ねこ奈

(プレイする人いるのかにゃ…?)

まとめ レビュー前の準備完了!

今回はコードレビュー前の準備を行いました。これで卒業制作編の課題作成は終了です!

ハック
ハック

当記事をアップする頃にはレビュー依頼を終えています。

レビューがあり次第、卒業制作編の振り返りを含めて最後の投稿を行います。

以上で今回の学習記録を終えます。

ここまでご覧いただきありがとうございました。

コメント

タイトルとURLをコピーしました