鉱石の種類に応じて点数が変わり、スコアが表示されるには? Javaコース上級 ミニゲーム開発編Day6「スコアの表示・鉱石の種類で点数を変える」

デイトラJava
ハック
ハック

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

Javaコース上級ミニゲーム開発編Day6の今回はスコア表示の対応と、鉱石の種類に応じて点数を変える設定を追加をしたので、その内容を紹介します。

スコアの表示の実装をしよう

今回は最初に制限時間が経過するとスコアが表示されるように実装しました。作成するにあたり中級編Day18「スコアの表示」の回を参考にしました。

実際のコード

実装するにあたり以下のコードを作成及び追加しました。

  • ゲーム開始時点でゲームタイムを20取得するように設定
  • ゲームが終了するとプレイ画面にスコアが表示されるように設定
  • ゲームが終了するとスコアが0になるように設定
//OreMiningCommandクラス
 if(sender instanceof Player player){
            PlayerScore nowPlayer = getPlayerScore(player);
            nowPlayer.setGameTime(20);
             InitStatus(player);

            Bukkit.getScheduler().runTaskTimer(main, Runnable ->{
                if(nowPlayer.getGameTime() <= 0){
                    Runnable.cancel();
                    player.sendTitle("ゲーム終了!",
                            nowPlayer.getPlayerName() + " 合計" +
              nowPlayer.getScore() + "点!お疲れ様でした!",
                            0,45,5);
                    nowPlayer.setScore(0);
                    return ;
                }
                nowPlayer.setGameTime(nowPlayer.getGameTime() - 5);
            },0,5 * 20);

            return true;
        }
        return false;
    }
モナ
モナ

他にも色々と変更したり追加している部分はありますが、ほぼ中級編のコードと同じです。

ただ、中級編で設定した時間だと鉱石採掘ゲームにしては制限時間が短くなってしまうため、完成前に制限時間を訂正します。

ねこ奈
ねこ奈

少しゲームっぽくなってきたのにゃ。

実装結果

一定時間を経過するとスコアが表示されるように実装しました。また、ゲーム終了後はスコアが0になることも確認しました。

鉱石の種類によって加算する点数を変更しよう

次に鉱石の種類によって加算する点数を変更するように実装しました。作成するにあたり中級編Day19「敵の種類で点数を変える」の回を参考にしました。

モナ
モナ

中級編と異なり、敵の種類ではなく鉱石の種類で点数が変更となるように設定します。

実際のコード

実装するにあたり以下のコードを作成及び追加しました。

  • switch文で鉱石の種類ごとに点数が変更されるように設定
  • 中級編では「Entity」だが、今回は「Material」であるためコードの文章が異なることに注意
//OreMiningCommandクラス
 public void onBlockBreak(BlockBreakEvent e) {
            // ここにブロックが壊された時の処理を追加
            Player player = e.getPlayer();
        if (Objects.isNull(player) || playerScoreList.isEmpty()) {
            return;
        }
        for(PlayerScore playerScore : playerScoreList){
            if(playerScore.getPlayerName().equals(player.getName())){
                int point = 0;
                Material blockType = e.getBlock().getType();
                point = switch (blockType) {
                    case COPPER_ORE -> 5;
                    case COAL_ORE -> 10;
                    case IRON_ORE -> 15;
                    case GOLD_ORE -> 20;
                    case REDSTONE_ORE -> 50;
                    case EMERALD_ORE -> 80;
                    case DIAMOND_ORE -> 150;
                    default -> point;
                };

                playerScore.setScore(playerScore.getScore()+ point);
                player.sendMessage("ブロックを壊した!現在のスコアは" +             playerScore.getScore() + "点です!");
            }
        }
    }
ねこ奈
ねこ奈

…石炭って鉱石なのかにゃ?

モナ
モナ

とりあえず鉱石を採掘してマテリアルが得られる種類には点数を割り当てています。

鉱石の種類はゲームの調整の際に再設定します。

実装結果

鉱石の種類に応じて点数が変化するように実装できました。

モナ
モナ

ただし現状では、鉱石以外のブロックを破壊した際にも「ブロックを壊した!現在のスコアは〇〇点です!」と表示されてしまいます。これは「0点」が点数として加算されているため、表示されているのだと思われます。

今後は、鉱石以外のブロックを壊しても点数が加算されないように訂正する必要があります。

まとめ 採掘ゲームらしくなってきた!

今回は「スコアの表示」と「鉱石の種類で点数を変更する」コードの実装を行いました。

ハック
ハック

まだまだ訂正箇所は多いですが、鉱石の種類に応じて点数が変更されるなど、少しずつ鉱石採掘ゲームらしくなってきたのではないかと思います。

コードの根幹は中級編で作成したコードを参考としていますが、それでも自分自身でミニゲームを作成しているということに、少しはJavaエンジニアとして成長したのかなと感じます。

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

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

コメント

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