プログラミング

いかり編 PHPポケモン 42

PHP PHPポケモン ポケモン
いかり編 PHPポケモン 42

いかり(技)とは

2020年10月段階での最新シリーズである「ソード・シールド」では、今まであった技が使用不可能になっているものが数多くあります。その1つが「いかり」という技です。

いかり(ポケモンwiki

 

使えなくなっている技の中には、世代を経る毎に追加された要素に対応すべくゲームバランスを整えるために残念ながら不採用になったものなどもありますが、いかりについては他の技と判定の基準が大きく違っていたり各世代においてバグが連発したなど様々な理由があるのではないかと考えています(あくまで想像です)。

 

ですが、立派な初代から実装されてきた技の1つで、御三家である「ヒトカゲ一族」が覚える技でもあるので、PHPポケモンでは用意します。

ではまず、技の詳細を見てみましょう。 

自分をいかり状態にする。このときダメージを受けるとこうげきランク補正が1段階上がる。

いかりが外れたり、無効化されたときでもいかり状態になる。

いかり状態は次の自分の行動まで維持される。状態異常/状態変化により行動できなかった場合や、道具を使ったとき、にげようとして失敗したときもいかり状態は解除される。

 

攻撃をすることで、自らをいかり状態にしてその状態に応じて効果が適用されるというものです。なので、技クラスに関しては通常技と同じ要領で作成していきましょう。

 

いかり(/Classes/Move/Rage.php
<?php

$root_path = __DIR__.'/../..';
require_once($root_path.'/Classes/Move.php');

// いかり
class Rage extends Move
{
 
    /**
    * 正式名称
    * @var string
    */
    protected $name = 'いかり';
 
    /**
    * 説明文
    * @var string
    */
    protected $description = 'いかり状態になり、ダメージを受けるたびにこうげきが1段階上がる。';
 
    /**
    * タイプ
    * @var string
    */
    protected $type = 'Normal';
 
    /**
    * 分類
    * @var string(physical:物理|special:特殊|status:変化)
    */
    protected $species = 'physical';
 
    /**
    * 威力
    * @var integer
    */
    protected $power = 20;
 
    /**
    * 命中率
    * @var integer
    */
    protected $accuracy = 100;
 
    /**
    * 使用回数
    * @var integer
    */
    protected $pp = 20;
 
    /**
    * 優先度
    * @var integer
    */
    protected $priority = 0;
 
    /**
    * 追加効果
    *
    * @param array $args
    * @return void
    */
    public function effects(...$args)
    {
        /**
        * @param Pokemon $atk 攻撃ポケモン
        * @param Pokemon $def 防御ポケモン
        */
        list($atk, $def) = $args;
        // 攻撃ポケモンを怒り状態にする
        $atk->setSc('ScRage');
    }
 
}

 

いかり(状態変化)

いかりを使用すると、自身を「いかり状態」にしなければなりません。なのでこちらは「状態変化」の1つとして作成します。

 

いかり:状態変化(/Classes/StateCange/ScRage.php
<?php
$root_path = __DIR__.'/../..';
require_once($root_path.'/Classes/StateChange.php');
 
// いかり
class ScRage extends StateChange
{
 
    /**
    * 正式名称
    * @var string
    */
    protected $name = 'いかり';
 
    /**
    * 発動した際のメッセージ
    * @var string
    */
    protected $active_msg = '::pokemonの怒りのボルテージが上がっていく!';
 
}

 

いかり状態で必要なメッセージは、攻撃を受けていかりが発動したときに表示されるもの1つだけです。他のメッセージとは少し異なったタイミングのため、active_msgというプロパティを用意しておきます。

合わせて、親クラスに初期値と取得用メソッドを追加しておきましょう。

 

状態変化クラス(/Classes/StateChange.php
// 状態変化
abstract class StateChange
{
 
    // プロパティの初期値
    protected $sicked_msg = '';
    protected $sicked_already_msg = '';
    protected $turn_msg = '';
    protected $failed_msg = '';
    protected $recovery_msg = '';
    protected $active_msg = '';
 
--省略
 
    /**
    * 発動時のメッセージを取得
    *
    * @param string $pokemon
    * @return string
    */
    public function getActiveMessage($pokemon)
    {
        return str_replace('::pokemon', $pokemon, $this->active_msg);
    }
 
}

 

それでは、作成したクラスを機能に実装していきましょう。

  

発動条件

まずは発動条件です。いかりを使用すると「いかり状態」になり、その状態下で技によるダメージを受ければこうげきランクが1段階上昇します。これは、今まで作成した状態変化の確認タイミング(checkBeforeSc, checkAfterSc)のどちらにも属していません

もし相手が「連続攻撃」を使用した場合は、ヒットする度に判定が行われるため、ターンに1回ではなく「ダメージ判定直後」にチェックを導入します。

 

攻撃トレイト(/App/Traits/Service/Battle/ServiceBattleTrait.php
/**
* 攻撃判定成功時の処理
*
* @param object $atk_pokemon
* @param object $def_pokemon
* @param object $move
* @return void
*/
private function attackSuccess($atk_pokemon, $def_pokemon, $move)
{
   
--省略
 
    // 追加効果(相手にHPが残っていれば)
    if($def_pokemon->getRemainingHp()){
        // 追加効果
        $move->effects($atk_pokemon, $def_pokemon);
        // 追加効果のメッセージをセット
        $this->setMessage($move->getMessages());
        $move->resetMessage();
        // いかり判定
        if($def_pokemon->checkSc('ScRage') && !empty($damage ?? 0)){
            $rage = new ScRage;
            // いかり発動メッセージをセット
            $this->setMessage($rage->getActiveMessage($def_pokemon->getPrefixName()));
            // こうげきランクを1段階上昇
            $msg = $def_pokemon->addRank('Attack', 1);
            $this->setMessage($msg);
        }
        return;
    }
}

 

もし防御側のポケモンがいかり状態且つダメージがあれば、メッセージを返却して攻撃ランクを1段階上昇させています。これで技によるダメージを受ける度に発動させることができます。

 

解除のタイミング

発動タイミングが実装できたので、次はいかり状態の解除についてです。いかり状態は、次に自分が行動するまで残り続けます。なので、もし後手であれば、いかりを発動した次のターンに攻撃を受ければ、いかり状態の効果が発動します。これも、2つの状態変化のチェックタイミングと異なっているため、個別で「攻撃ポケモンの行動前」に処理を追加します。

 

たたかう用サービス(/App/Services/Battle/FightService.php
/**
* 行動順に攻撃処理
*
* @return boolean (false: ひんしポケモン有り)
*/
private function actionAttack($orders)
{
    foreach($orders as list($atk, $def, $move)){
        // 攻撃ポケモンの怒り解除
        $atk->releaseSc('ScRage');
        // 攻撃
        $this->attack($atk, $def, $move);
        // ひんしチェック
        $this->fainting = [
            $atk->getPosition() => $this->checkFainting($atk),
            $def->getPosition() => $this->checkFainting($def),
        ];
        // どちらかがひんし状態なら処理終了
        if($this->fainting['friend'] || $this->fainting['enemy']){
            $result = false;
            break;
        }
    } # endforeach
    // 結果返却
    return $result ?? true;
}

 

こちらはサービス内の行動処理のループ最初に記述しておきます。後手の場合、相手の行動でダメージを受ければ、いかり状態が解除される前のため判定が行われることになります。

 

更に「にげる」実行時にも解除処理を追加します。 

状態異常/状態変化により行動できなかった場合や、道具を使ったとき、にげようとして失敗したときもいかり状態は解除される。

 

説明ではこの通り、にげるに失敗した際にも解除されると記されています。なので、こちらはにげるサービス内の失敗時の分岐に処理を追加しましょう。

 

にげる用サービス(/App/Services/Battle/RunService.php
/**
* @return void
*/
public function execute()
{
    if($this->checkRun()){
        // 逃走成功
        $this->setResponse(true, 'result');
        $this->setMessage('上手く逃げ切れた');
        // バトル終了判定用メッセージの格納
        $this->setMessage(' ', 'battle-end');
    }else{
        // 逃走失敗
        $this->setResponse(false, 'result');
        $this->setMessage('逃げられない!');
        // 攻撃ポケモンの怒り解除
        $atk->releaseSc('ScRage');
        // 相手ポケモンの攻撃
        if(!$this->enemyAttack()){
            // どちらかがひんし状態なら処理終了
            $this->exportProperty('fainting');
            return;
        }
    }
    // 行動後の状態異常・変化をチェック
    $this->afterCheck();
    // 指定したプロパティを返却
    $this->exportProperty('fainting');
}

 

これで「にげる」に失敗した際も残り続けず、正常に解除することができます。

それでは実際に使用してみましょう。

 

 

 

  

いかりを使ったターン、攻撃を受けると攻撃ランクが1段階アップしました。

これで「いかり」の実装は完了です。

 

まとめ

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

今回のPHPポケモンでは「いかり」の実装方法を紹介しました。

 

これで、初代御三家とピカチュウを含めた計10匹+1匹(ラ●チュウ)のレベルアップ技をすべて用意、実装することが出来ました。ただ、ポケモンの技はまだまだ多くあり、現状のシステムだけでは実装ができないものもあります。こちらも引き続き、ポケモンを追加しながら用意していきましょう。

プログラミング学習中の方や、ゲームづくりに興味がある方は、ぜひ参考にしてみてくださいね。

 

注目の記事

WordPressをローカルと本番環境で同じ状態にするために理解しておきたい3つのポイントを徹底解説
プログラミング
PHP,phpMyAdmin,WordPress
WordPressをローカルと本番環境で同じ状態にするために理解しておきたい3つのポイントを徹底解説

  WordPressで作ったサイトは通常のサイトと違い、DBが絡んでくるためローカル環境と本番環境を同一の状態で稼働させるには設定や更新されるディレクトリの知識が必要になります。 今回は、WordPressを使ったサイトを作成している人や、開発に挑戦しようとしている人に向けて、ローカルで作ったWordPressのサイ...

PHPポケモン「バトルシステム編〜HP計算〜」26
プログラミング
PHP,PHPポケモン,ポケモン
PHPポケモン「バトルシステム編〜HP計算〜」26

HP計算 これまでに実装したダメージ計算ですが、計算はできていてもお互いに相手ポケモンのHPを削ることはできませんでした。なので、今回は実際のバトルのように、HPに対してダメージを与えるという仕組みを作成していきます。   残りHP ここで必要になるのが「残りHP」という概念です。今までステータス上のHP...

起業・独立を考えている人に向けた具体的なアドバイス3選
雑記
起業・独立を考えている人に向けた具体的なアドバイス3選

  「どのタイミングで起業すべき?」 「会社を作るためにはどういったことをすればいいの?」   あなたはこんな悩みを抱えていませんか? 今回は、これから独立・起業をしようと考えている方や、そういった野望をいだいている人に向けて、自らの経験を元に具体的なアドバイスを3つピックアップしてご紹...

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

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

本当に価値のある宣伝方法 〜多くの人が実践している【間違った努力】とは〜
マーケティング
Facebook,note,Twitter,YouTube,集客
本当に価値のある宣伝方法 〜多くの人が実践している【間違った努力】とは〜

  YouTubeやTwitter、Facebookやnoteなど、いろんなサービスを使った集客方法があります。集客という視点ではなく、それ自体に人を集めたいという人も多いでしょう。   フォロワーやチャンネル登録者数を増やすために、多くの人が様々な取り組みをしていますが、その中でもひときわ意味のないことをただ繰り返して...

捕獲処理実装編 PHPポケモン 80
プログラミング
PHP,PHPポケモン,ポケモン
捕獲処理実装編 PHPポケモン 80

捕獲処理の作成 前回モンスターボールのクラスを作成したので、今回は捕獲判定までの一連の処理を仕上げていきます。サービス自体は他のアイテムと一緒にするためItemServiceを呼び出し、その中で使用されたアイテムを判断して分岐を作ります。   バトル中のアイテムサービス(/App/Services/Battle/ItemService.ph...

PHPポケモン「オートロード編(修正版)」17 おまけ:日本語化
プログラミング
PHP,PHPポケモン,ポケモン
PHPポケモン「オートロード編(修正版)」17 おまけ:日本語化

  前回実装したオートローダーの使い方が盛大に間違っていたので、今回その間違いの説明をしながら、正しい実装方法をご紹介します。 申し訳ありません。(誠意)    オートロードについて(再)  必要なタイミングで必要なファイルをrequireまたはincludeするあれです。   前回spl_autoload_reg...

いかり編 PHPポケモン 42
プログラミング
PHP,PHPポケモン,ポケモン
いかり編 PHPポケモン 42

いかり(技)とは 2020年10月段階での最新シリーズである「ソード・シールド」では、今まであった技が使用不可能になっているものが数多くあります。その1つが「いかり」という技です。 いかり(ポケモンwiki) https://wiki.ポケモン.com/wiki/いかり   使えなくなっている技の中には、世代を経...

カテゴリ

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