プログラミング

ネコにこばん編 PHPポケモン73

PHP PHPポケモン ポケモン
ネコにこばん編 PHPポケモン73

ネコにこばんとは

初代ポケモンでは、基本的にトレーナーとのバトルでしかお金を増やすことができず、もし手持ち金が0円の状態で金が必要なイベントが発生すると詰んでしまうという隠された落とし穴がありました。

ですが、初代でも唯一トレーナー意外からお金を得る方法があります。それが「ネコにこばん」というポケモンの技です。 

※売却を除きます

戦いが終わったら、この技の攻撃回数×レベル×5円のお金を拾える

 

散らばったお金

技の仕様は、技を使ったポケモンのレベル×5円をフィールドにバラまくというものです。複数回使用することで、上乗せで金額が増えていきます。散らばったお金を保管する場所には、バトル状態クラス(BattleState)を活用しましょう。

 

バトル状態クラス(/Classes/BattleState.php)
<?php
/**
* バトル状態クラス
*/
class BattleState
{
 
--省略
 
    /**
    * 散らばったお金
    * @var array
    */
    private $money = [];
 
--省略
 
    /**==================================================================
    * お金(ネコにこばん)
    ==================================================================**/
 
    /**
    * 散らばったお金の取得
    * @return integer
    */
    public function getMoney(): int
    {
        return array_sum($this->money);
    }
 
    /**
    * お金のセット
    * @param integer
    * @return void
    */
    public function setMoney($money): void
    {
        $this->money[] = $money;
    }
 
    /**
    * お金の初期化
    * @param integer
    * @return void
    */
    public function initMoney(): void
    {
        $this->money[] = [];
    }
}

 

お金は加算して保管せず、配列の要素として格納していき、最終的にarray_sumを使って合計金額を取得するという方式を取りました。状況によっては必要になる可能性も考慮し、初期化用メソッド(initMoney)も作成しました。

  

技の特別処理

 それでは、ネコにこばんの技クラスを作成しましょう。

 

ネコにこばん(/Classes/Move/MovePayDay.php
<?php
$root_path = __DIR__.'/../..';
require_once($root_path.'/Classes/Move.php');
 
// ネコにこばん
class MovePayDay extends Move
{
 
    /**
    * 正式名称
    * @var string
    */
    protected $name = 'ネコにこばん';
 
    /**
    * 説明文
    * @var string
    */
    protected $description = '戦いが終わったらお金を拾える。';
 
    /**
    * タイプ
    * @var string
    */
    protected $type = 'TypeNormal';
 
    /**
    * 分類
    * @var string(physical:物理|special:特殊|status:変化)
    */
    protected $species = 'physical';
 
    /**
    * 威力
    * @var integer
    */
    protected $power = 40;
 
    /**
    * 命中率
    * @var integer
    */
    protected $accuracy = 100;
 
    /**
    * 使用回数
    * @var integer
    */
    protected $pp = 20;
 
    /**
    * 対象
    * @var string
    */
    protected $target = 'enemy';
 
    /**
    * ネコにこばんの特別処理
    * @param atk:object::Pokemon
    * @param battle_state:object::BattleState
    * @return void
    */
    public function exPayDay($atk, $battle_state)
    {
        // レベル x 5円をセット
        $battle_state->setMoney(
            $atk->getLevel() * 5
        );
    }
 
}

 

技を使った後にお金をバラまく(外れた場合は無効)という効果ですが、こちらは相手の残りHPに関係なく追加効果が発生します。なので、特別処理としてexPayDayというメソッドに格納しました。

 こちらを、攻撃トレイトのeffectメソッドが呼び出される直前にコールします。

 

攻撃用トレイト(/App/Traits/Service/Battle/ServiceBattleAttackTrait.php
// attackSuccessメソッド内
//
// ネコにこばんの特別処理(相手のHPに関係無く発動)
if(get_class($move) === 'MovePayDay'){
    $this->exPayDay($atk_pokemon, $move);
}
// 追加効果(相手にHPが残っていれば)
if($def_pokemon->getRemainingHp()){

 

特別処理用トレイト(/App/Traits/Service/Battle/ServiceBattleExTrait.php
/**
* ネコにこばんの特別処理
*
* @param atk:object::Pokemon
* @param move:object::Move
* @return void
*/
protected function exPayDay(object $atk, object $move): void
{
    $move->exPayDay($atk, $this->battle_state);
    setMessage('辺りにお金が散らばった');
}

 

処理自体は複雑ではないため、トレイトのみで完結させることができる量ですが、あくまで技の効果ということをわかりやすくするため、今回は「攻撃トレイト → 特別処理トレイト → 技クラス」という3工程を経由させました。

 

おこづかいの増加

散らばったお金は、おこづかいとして回収しなければなりません。なので、こちらはバトル終了直前にチェックして、トレーナーのおこづかいに加算します。

 

バトルコントローラー用トレイト(/App/Traits/Controller/BattleControllerTrait.php
/**
* バトル結果判定
*
* @return void
*/
private function judgment()
{
    if($this->fainting['friend']){
        // 味方がひんし状態になった
        setMessage('目の前が真っ暗になった');
    }else{
        // 相手がひんし状態になった(味方はひんし状態ではない)
        // 経験値の計算
        $exp = $this->calExp($this->pokemon, $this->enemy);
        // 経験値をポケモンにセット
        $this->party[$this->order]
        ->setExp($exp);
        // 努力値を獲得
        $this->party[$this->order]
        ->setEv($this->enemy->getRewardEv());
        // もしポケモンが「へんしん状態」であれば変更後の状態を引き継ぎ
        if($this->pokemon->checkSc('ScTransform')){
            $this->pokemon
            ->judgmentTransform($this->party[$this->order]);
        }
    }
    // 散らばったお金の取得
    $money = getBattleState()->getMoney();
    if($money){
        setMessage($this->player->getName().'は、'.$money.'円拾った');
        $this->player
        ->addMoney($money);
    }
    // バトル終了判定用メッセージの格納
    setEmptyMessage('battle-end');
}

 

ネコにこばんでは、「にげる」や「ふきとばし」などによるバトル終了ではお金を拾うことができません。なので、それらが通過しないjudgmentメソッド内に判定処理を追加しました。

 

それでは、実際の動きを見てみましょう。

 

使用回数分のお金が獲得できましたね。これでネコにこばんの実装は完了です。

 

まとめ

いかがだったでしょうか。

今回のPHPポケモンでは「ネコにこばん」の実装方法をご紹介しました。

現在プログラミング学習に取り組んでいる方や、挑戦しようと興味を持たれている方は、ぜひ参考にしてみてくださいね。

 

注目の記事

3日坊主にならないために
雑記
ブログ,プログラミング
3日坊主にならないために

  プログラミングに挑戦してみたが、途中で挫折した人 ブログを書き始めたが、まったく続かない人   継続することの大切さは分かっても、なかなか難しいものです。 しかしそれは、取り組み方を見直すだけで、実は簡単に解決できてしまうものなのです。 今回は、そんな「3日坊主」と呼ばれる人が、そ...

フリーランスなら心がけておきたい3つのルール【仕事と遊びは両立させろ】
フリーランス
フリーランス,独立
フリーランスなら心がけておきたい3つのルール【仕事と遊びは両立させろ】

  フリーランスになっても不安がいっぱい   会社というものに縛られないというのは楽なイメージがありますが、それ相応の不安がついてまわります。 その結果、会社員へと舞い戻ってしまうと再度そこから抜け出すことは非常に困難です。   今回は、現在活動している人や、これから独立しようとしている...

フレンドリィショップ編 開店準備 PHPポケモン 75
プログラミング
PHP,PHPポケモン,ポケモン
フレンドリィショップ編 開店準備 PHPポケモン 75

アイテム(どうぐ) PHPポケモンもバトル機能が一通り揃ってきたので、新機能として「アイテム」の実装に取り掛かります。 アイテムにも色々ありますが、技やポケモンのクラス同様に、初代で登場したアイテムから順番に取り揃えていきましょう。   キズぐすりの実装 ポケモンのどうぐ、一番手は「キズぐすり」...

オウムがえし編 PHPポケモン 68
プログラミング
PHP,PHPポケモン,ポケモン
オウムがえし編 PHPポケモン 68

オウムがえしとは 今回は久々に新しい技を実装します。それが「オウムがえし」です。 オウムがえし(ポケモンwiki) https://wiki.ポケモン.com/wiki/オウムがえし   初代で登場した技であり、序盤に登場するポッポやオニスズメがレベルアップで覚える技の1つです。最新世代ではオウムがえしという技は実...

PHPポケモン(α)攻略wiki「稼ぎ方特集」
雑記
PHP,PHPポケモン,ポケモン
PHPポケモン(α)攻略wiki「稼ぎ方特集」

前回に引き続き、連続wiki投稿でPHPポケモン溺愛ユーザーにとっては歓喜の2日間です。   という冗談も踏まえつつ、今回は「稼ぐ」ということについて真面目に考察してみたいと思います。もしリアル世界での「稼ぐ」を目的に来た人は、盛大にブラウザバックしてください。   PHPポケモンにおける「稼ぐ」...

PHPポケモン「技ポイント(PP)編」36
プログラミング
PHP,PHPポケモン,ポケモン
PHPポケモン「技ポイント(PP)編」36

技ポイント(PP)とは ポケモンではそれそれの技に使用回数が定められています。それが技ポイント(PP)と呼ばれているものです。 PP(ポケモンwiki) https://wiki.ポケモン.com/wiki/PP   技のクラスを実装した際に、それぞれにppというプロパティをもたせて回数をセットしています。これが、対象の技...

戦闘用アイテム編 プラスパワー PHPポケモン96
プログラミング
PHP,PHPポケモン,ポケモン
戦闘用アイテム編 プラスパワー PHPポケモン96

戦闘用アイテムとは バトル中に使用できるアイテムはいくつかありますが、その中でも「バトル専用」のアイテムがあります。それが戦闘用アイテムであり、主にドーピングと呼ばれるものです。 アイテムカテゴリとして、プレイヤー対象(スプレーなど)、敵ポケモン対象(ボール類)、味方対象(キズぐすり)の3つに...

両隣のポケモン取得編(配列の隣の要素)PHPポケモン 92
プログラミング
PHP,PHPポケモン,ポケモン
両隣のポケモン取得編(配列の隣の要素)PHPポケモン 92

両隣のポケモンを判別する パーティーの中からID指定でポケモンを特定するためのメソッドは実装されていましたが、その両隣にどんなポケモンが控えているのかを判別する手段がありませんでしたね。 なので、今回は両隣のポケモンを判別するためのメソッドを準備して活用していきましょう。   パーティー まずは...

カテゴリ

SEO対策 イベント デザイン ネットワーク ビジネスモデル フリーランス プログラミング マーケティング ライティング 動画編集 雑記

タグ

5G Adobe AfterEffects AI ajax amazon Animate api artisan atom Automator AWS Bluetooth CSS CVR description EC-CUBE4 ECショップ ESLint Facebook feedly foreach function Google Google AdSense Honeycode htaccess HTML IEEE 802.11ax Illustrator Instagram IoT JavaScript jQuery jQuery UI keyword LAN Laravel Linux MacBook MAMP meta MLM MySQL NoCode note OS OSI参照モデル Paypal Photoshop PHP phpMyAdmin PHPポケモン PremierePro rss SEO SEO対策 Sequel Pro Skype SNS SSH Symfony TCP/IP title Toastr Trait Twig Twitter UCC V系 WAN WebSub Wi-Fi wiki Windows WordPress XAMPP xml Xserver YouTube YouTuber Zoom アーティスト アウトプット アクセス層 アニメーション アフィリエイト イーブイ インターネット インプット エンジニア オブジェクト指向 お金配り クリック単価 クリック数 コミュニケーション能力 コロナ コンサルティング サムネイル システムエンジニア スタートアップ スタイルシート スパム データベース ディープフェイク デザイナー デザイン テレワーク ナンパ ニュース ネットワークモデル ノマドワーク バナー ピカチュウ ビジネス フィード フリーランス ブロガー ブログ プログラマー プログラミング プログラミング学習 プログラミング教育 プロトコル ホームページ制作 ポケモン マークアップ マーケティング メール リモートワーク レンダリング 三井住友 三宮 仕事依頼 児童デイ 児童デイサービス 児童発達支援 公開鍵 初心者 助成金 勉強法 営業 広告 広告収入 必勝マニュアル 放課後等デイサービス 朝活 楽天 深層学習 無線LAN 独立 神戸 福祉 秘密鍵 翻訳 自己啓発 英語 見積書 計算機 読書 起業 迷惑メール 配列 銀の弾丸 集客 雑学力