プログラミング

ネコにこばん編 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ポケモンでは「ネコにこばん」の実装方法をご紹介しました。

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

 

注目の記事

ひとのものをとったらどろぼう!編 PHPポケモン 99
プログラミング
PHP,PHPポケモン,ポケモン
ひとのものをとったらどろぼう!編 PHPポケモン 99

ひとの ものを とったら どろぼう! ポケモンの中でも有名なセリフの1つです。モンスターボールを投げることでポケモンを捕まえることができますが、既に別トレーナーが所有しているポケモンを捕まえることはできません。 初代から、トレーナー戦でモンスターボールを投げると「ひとの ものを とったら どろぼう!...

未経験からWeb系エンジニアとしてフリーランスになる現実的な方法教えます【軌道に乗れば起業も可能】
フリーランス
エンジニア,フリーランス,プログラミング学習,独立,起業
未経験からWeb系エンジニアとしてフリーランスになる現実的な方法教えます【軌道に乗れば起業も可能】

  セカンドキャリアとしてプログラミングやデザインを学習したい   そう考えてスクールを受講したり、独学で始める人が増えていますが、そのほとんどが実らずに挫折してしまいます。 ですが、学習方法と経験の積み方や職の選び方さえ間違えなければ、技術を身につけてフリーランスとして活動することも難しく...

SEOで強いURLとは?安易に決めると危険だった!「よく分かるSEO対策」パーマリンク編
SEO対策
WordPress,ブログ
SEOで強いURLとは?安易に決めると危険だった!「よく分かるSEO対策」パーマリンク編

  パーマリンクの設定ってSEO対策に関係あるの?   意外と気になっているポイントではないでしょうか。実は、URLとSEO対策には全くの無関係ではなく、安易に決めてしまうとせっかく積み上げた資産的価値を台無しにしてしまうかも知れない危険なポイントでもあるのです。   今回は、ブログの収益化を目指...

かなしばり編 PHPポケモン 95
プログラミング
PHP,PHPポケモン,ポケモン
かなしばり編 PHPポケモン 95

かなしばりとは 最近は技のアップデートをおろそかにしていたので、久々の追加実装です。へんしんという再現が面倒な技は乗り越えましたが、他の技も仕様がややこしいため、覚えるポケモンが用意できたタイミングに基本的に増やしていきたいのですが、バトルシステムを作り上げていく関係上、どうしても見逃せない部...

なぜプロは有線のマウスやキーボードを選ぶのか?【有線VS無線】
雑記
Bluetooth
なぜプロは有線のマウスやキーボードを選ぶのか?【有線VS無線】

  無線が普及する現代、何故有線のマウスやキーボードは売れているのか   いろんなものが製品の進化と共に無線化している一方、有線の需要も高く、とくにプロなど上層で活躍する人は有線を選択するケースが少なくありません。 今回は、そんな有線と無線の違いや、それぞれのメリットについて解説していき...

PHPポケモン「UI(Bootstrap4の導入)編」コード配布・デモ有り 13
プログラミング
PHP,PHPポケモン,ポケモン
PHPポケモン「UI(Bootstrap4の導入)編」コード配布・デモ有り 13

  第13回のPHPポケモンは「UI編」ということで、CSSの大人気フレームワークBootstrapさんにお手伝いいただきます。 また、前回実装したレスポンス機能により進化のアクションに一部不具合が出ていたので、このあたりも合わせて修正をしながら進めていきましょう。   Bootstrapを導入するにあたり、今までin...

教師が勝ち組!?出会い&学習の超正統派マッチングサービスとは【ビジネス企画書】
ビジネスモデル
マーケティング
教師が勝ち組!?出会い&学習の超正統派マッチングサービスとは【ビジネス企画書】

  「出会いがない」   社会人になると多くの人が抱く悩みの1つです。職場の男女比率や年齢層が理由の人もいれば、同じ職場での出会いは求めていない人もいるでしょう。 今回はそんな「出会い」を解決するための企画「出会い&学習の超正統派マッチングサービス」について、企画案と考察をまとめました。   ...

ピカチュウから学ぶオブジェクト指向 〜進化編〜 7
プログラミング
PHP,PHPポケモン,オブジェクト指向,ポケモン
ピカチュウから学ぶオブジェクト指向 〜進化編〜 7

  ※前回(第6回)で意味不明な場所に空変数が入っており、ステータスが一部しか出力できないという問題がありました。修正しています。犯人は「$stats = [];」です。(GetTrait.php)   今回はポケモンのゲームでは欠かせない、楽しみの一つとなる「進化システム」を導入していきます。これからPHPポ...

カテゴリ

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 独立 神戸 福祉 秘密鍵 翻訳 自己啓発 英語 見積書 計算機 読書 起業 迷惑メール 配列 銀の弾丸 集客 雑学力