こんにちは、運営者のハックです!
Javaコース上級ミニゲーム開発編Day4の今回はコマンドを入力すると装備が変更され、さらにブロックを壊すと点数が加算させる設定を追加をしたので、その内容を紹介します。
採掘ゲームの根幹となる部分を実装しよう
今回は鉱石採掘ゲームの根幹となる、「コマンドを入力すると利き手にツルハシを装備する」状態と「ブロックを壊したら点数が加算される」ようなコードを作成します。
コマンドを入力すると利き手にツルハシを装備する
「oreMining」コマンドを入力すると利き手にツルハシを装備するコードを実装します。作成するにあたり中級編Day14「ゲームスタート時の装備変更」の回を参考にしました。
実装するにあたり以下のコードを作成しました。
- オフハンドに松明も持たせるように追加。
- 前回実装した体力や空腹度と合わせて、プレイヤーの状態初期化としてメソッドの抽出をした。
//OreMiningCommandクラス
/**
* ゲームを始める前にプレイヤーの状態を設定する。
* 体力と空腹度を最大にして、メインハンドにネザライトのツルハシ、オフハンドに松明を64個持たせる。
*
* @param player コマンドを実行したプレイヤー
*/
private static void InitStatus(Player player) {
//プレイヤーの状態を初期化する
player.setHealth(20);
player.setFoodLevel(20);
PlayerInventory inventory = player.getInventory();
inventory.setItemInMainHand(new ItemStack(Material.NETHERITE_PICKAXE));
inventory.setItemInOffHand(new ItemStack(Material.TORCH,64));
}
オフハンドって何にゃ?
いわゆる左手のことです。上手く活用するとメインハンド(利き手)とオフハンドの両方の手で同時にアイテムを持つことができます。私は通常では左手には盾を持っていました。
鉱石採掘=洞窟探検になるため、松明を初期装備に入れても良いかなと思い追加で実装することにしました。
画像は作成したコードを実行した結果です。オフハンドに松明を64個持っているようにできました。
ブロックを壊したら点数が加算される
次はブロックを壊したら点数が加算されるようなコードを実装しました。作成するにあたり中級編Day15「点数計算と合計表示」の回を参考にしました。
実装するにあたり以下のコードを作成しました。
- BlockBreakEventでプレイヤーがブロックを破壊した時に点数が加算されるように実装した。
//OreMiningCommandクラス
@EventHandler
public void onBlockBreak(BlockBreakEvent e) {
// ここにブロックが壊された時の処理を追加
Player player = e.getPlayer();
if(e.getPlayer().equals(this.player)){
score += 10;
player.sendMessage("ブロックを壊した!現在のスコアは" + score + "点です!");
}
}
中級プラグイン開発編Day1&6「イベントの理解・ドキュメントの読み方(Javadoc)」の回で探したイベントだにゃ。
中級編では「EntityDeathEvent」というイベントを使用しました。
使用するイベントが違うのですが根本となるコードは似ているため、作成する上で中級編の講義内容をかなり参考にさせていただきました。
画像は作成したコードを実行した結果です。ブロックが破壊されるたびに点数が加算されるように実装できました!
とは言ってもこのままでは鉱石ブロック以外を破壊しても点数が加算されます。
今後はブロックの種類に応じて点数が加算されたり、加算されなかったりする状態を実装していきます。
まとめ 簡単そうに見えるが実際は試行錯誤の連続
今回は「コマンドを入力するとメインハンドにツルハシを、オフハンドに松明64個を装備する」状態と「ブロックを壊したら点数が加算される」コードを作成しました。
できあがったコードだけを見ると「たったこれだけの実装に何時間かけているんだ」と思われるかもしれませんが、実際はコードエラーが度々発生し、その度にコードを直したりChatGPTに訂正案を出してもらったりと、時間がかかっています。
「オフハンドに松明を装備」のアイデアもイベントリ実装の際に候補の中に偶々「InOffHand」を発見したので、試しに実装してみたところ「これはいける」と感じたため追加したものです。
このような感じで数行のコードに数時間かかっております。
完成するのに何日かかるのでしょうか…
以上で今回の学習記録を終えます。
ここまでご覧いただきありがとうございました。
コメント