プログラミング

PHPポケモン「わざ編〜わるあがき〜」35

PHP PHPポケモン ポケモン
PHPポケモン「わざ編〜わるあがき〜」35

わるあがき

そろそろ技のPPを実装段階にきたので、その前に「わるあがき」という技を作成しましょう。「わるあがきって何?」という人のために、どういった技なのか簡単に説明します。

全ポケモン使用可能。ただし、レベルアップなどで普通のわざとして覚えることはできず、自分の技がすべて選択不能になった場合のみ使用できる。

技のPPが尽きた場合や、技や持ち物の効果で選択できる技がなくなった場合に「たたかう」コマンドを選ぶと出される技。反動ダメージの存在から、両者が何もできない状況に陥った際にバトルを終わらせる為に存在する技であると言える。

わるあがき(ポケモンwiki

 

使用できる技がないとき等に、バトルを終わらせるために存在する救済処置用で用意されている技です。他のRPGゲームなどであれば「通常攻撃」という概念が存在しますが、ポケモンにはそれがありませんので、ゲーム仕様上必要な技の一つです。

特別な場面で使用される技という以外は、基本的に他の技と同じため、同様にクラスとして作成しておきましょう。

 

わるあがき(/Classes/Move/Struggle.php
<?php
require_once(__DIR__.'/../Move.php');
 
// わるあがき
class Struggle extends Move
{
 
    /**
    * 正式名称
    * @var string
    */
    protected $name = 'わるあがき';
 
    /**
    * 説明文
    * @var string
    */
    protected $description = '使用するたびに反動ダメージを受ける。';
 
    /**
    * タイプ
    * @var string
    */
    protected $type = 'TypeNull';
 
    /**
    * 分類
    * @var string(physical:物理|special:特殊|status:変化)
    */
    protected $species = 'physical';
 
    /**
    * 威力
    * @var integer
    */
    protected $power = 50;
 
    /**
    * 命中率
    * @var integer
    */
    protected $accuracy = null;
 
    /**
    * 使用回数
    * @var integer
    */
    protected $pp = null;
 
    /**
    * 優先度
    * @var integer
    */
    protected $priority = 0;
 
    /**
    * 追加効果
    *
    * @param array $args
    * @return void
    */
    public function effects(...$args)
    {
        /**
        * @param Pokemon $atk 攻撃ポケモン
        * @param Pokemon $def 防御ポケモン
        */
        list($atk, $def) = $args;
        // 自分の最大HPの1/4ダメージを受ける
        $atk->calRemainingHp('sub', floor($atk->getStats('HP') / 4));
        $this->setMessage($atk->getPrefixName().'は反動を受けた');
    }
 
}

 

それでは一つずつ見ていきましょう。

 

技の反動

わるあがきには「最大HPの1/4、反動ダメージを受ける」という追加効果があります。威力50の物理技というお世辞にも強いとは言い難い技ではありますが、こちらもゲームが終わらないという状態を回避するための仕様上必要な追加効果だと言えます。

 

追加効果として、最大HP÷4の値(切り捨て)をcalRemainingHpを使って自らのHPから減算しています。反動を受けた旨のメッセージも返しておきましょう。

他の反動技(とっしん等)も同様の処理になります。

  

タイプ判定

次にタイプ判定です。わるあがきのクラスで気づいた方もいるかも知れませんが、わるあがきにはタイプの概念が存在しません。

/**
* タイプ
* @var string
*/
protected $type = 'TypeNull';

 

但し、nullをセットするとなれば、オートロードや技からタイプをインスタンス化するなどの処理すべてにnull時の分岐処理が必要になるため、今回は「TypeNull」という空タイプを用意しました。

 

タイプヌル(/Classes/Type/TypeNull.php
<?php

require_once(__DIR__.'/../Type.php');
 
// タイプ無し
class TypeNull extends Type
{
 
    /**
    * 正式名称
    * @var string
    */
    protected $name = '';
 
    /**
    * 攻撃技で使用したときの判定
    */
 
    /**
    * こうかばつぐん
    * @var integer
    */
    protected $excellent = [];
 
    /**
    * こうかいまひとつ
    * @var integer
    */
    protected $not_very = [];
 
    /**
    * こうかがない
    * @var integer
    */
    protected $doesnt_affect = [];
 
}

 ※ポケモン「タイプ:ヌル」と名称被りになりますが、現段階ではそこまで作成することを想定していないのでスルーします

 

見たとおり、空タイプ(タイプ無し)です。あくまで、タイプ判定時にどのタイプでもないということが判別できれば問題ありません。

旧世代ではノーマルタイプの判定されていたり、場合によっては一部ノーマルタイプとして扱われるようなこともあったそうですが、最新世代を参考にして「どのタイプにも属さない」とします。

 

わるあがきの特別処理

わるあがきの準備が整えば、その実装に取り掛かりましょう。まずはバトルコントローラーに「初期値」のような扱いでわるあがきをセットします。

 

バトルコントローラー(/Classes/Controller/BattleController.php
/**
* アクション
*
* @param string $action
* @param mixed $param
* @return void
*/
private function action($action, $param)
{
    // 敵ポケモンの技をインスタンス化
    $e_move = $this->getInstance($this->aiSelectMove());
    switch ($action) {
        /**
        * にげる
        */
        case 'run':
        $this->run++;
        if($this->checkRun()){
            $this->endBattle();
        }
        $this->setMessage('逃げられない!');
        // 敵ポケモンの攻撃
        $p_damage = $this->attack($this->enemy, $this->pokemon, $e_move);
        break;
        /**
        * たたかう
        */
        case 'fight':
        // 自ポケモンの技をインスタンス化
        if(empty($param)){
            // 技が未選択の場合は悪あがきをセット
            $param = 'Struggle';
        }

 

現在、actionメソッドの第2引数$paramは技の受け渡しでしか使用していませんが、アイテムやポケモン交代などを導入した際には別のパラメーターが入ることになります。なので、初期値としてセットせずに、fightの分岐内で$paramが空だった際にわるあがき(Struggle)をセットします。

 

現段階、通常ルートでactionメソッドからfight分岐にきた際に、$paramが空になることはありません。ですが、今後作り込んでいくことで技選択が不能な状況に陥った際に「わるあがきが発動する」ということを条件に含めることができます。

 

次に攻撃処理にわるあがきの分岐を追加しましょう。

 

攻撃用トレイト(/Traits/Battle/AttackTrait.php
/**
* 攻撃
* (攻撃→ダメージ計算→ひんし判定)
*
* @param object $atk_pokemon
* @param object $def_pokemon
* @param object $move
* @return void
*/
protected function attack($atk_pokemon, $def_pokemon, $move)
{
    // 行動チェック(状態異常・状態変化)
    if(!$this->checkBeforeSa($atk_pokemon) || !$this->checkBeforeSc($atk_pokemon)){
        // 行動失敗
        return;
    }
    // チャージチェック
    if($move->charge($atk_pokemon)){
        // チャージターンならメッセージを格納して行動終了
        $this->setMessage($atk_pokemon->getMessages());
        $atk_pokemon->resetMessage();
        return;
    }
    // わるあがきの確認
    if(get_class($move) === 'Struggle'){
        $this->setMessage($atk_pokemon->getPrefixName().'は出すことのできる技がない');
    }
    // 攻撃メッセージを格納
    $this->setMessage($atk_pokemon->getPrefixName().'は'.$move->getName().'を使った!');

 

わるあがきを使用する際には、「〇〇は出すことのできる技がない」というメッセージが表示されます。なので、技の使用宣言前に技クラスをチェックして、もしわるあがきだと判定されればメッセージを表示しています。

 

それでは、実際にわるあがきを使ってみましょう。

 

 

 

 ※今回はミュウにわるあがきを覚えさせて検証しています

 

エラーに引っかからず、正常にわるあがきの使用メッセージが表示され、反動ダメージを受けるまでを確認することができました。

これで「わるあがき」の実装が完了です。

 

まとめ

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

今回のPHPポケモンでは「わるあがきの実装方法」をご紹介しました。

ゲーム上の都合技ではありますが、無くてはならない大切な技の一つです。ですがその分、他とは別処理が必要ということがわかりますね

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

 

注目の記事

フリーランスになるなら知っておきたい!無料サービス3選
フリーランス
フリーランスになるなら知っておきたい!無料サービス3選

  「フリーランスになる前に何を準備すればいいの?」 「フリーランス向けの便利なサービスが知りたい」   今回はそんな悩みを抱えた人へ向けて「フリーランスになるなら知っておきたい!無料サービス3選」をご紹介します。 この記事を読んで、フリーランスにとっての悩みである以下の3つの問題を一緒...

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

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

「発想と企画を量産する」第3回 朝活のまとめ
イベント
三宮,朝活,神戸
「発想と企画を量産する」第3回 朝活のまとめ

  第3回朝活を実施しました。   この記事では、その中で取り上げられた内容について具体的な考え方や内容をまとめていますので、ぜひ興味を持たれた方は次回朝活へお越しください。   今回の朝活のサブタイトルは「発想と企画を量産する」になります。      「話のネタが無い」は禁物   ブログで...

今からできる!ブログのアクセスを爆UPさせる3大SNS活用法
マーケティング
Facebook,Instagram,Twitter,ブロガー,ブログ
今からできる!ブログのアクセスを爆UPさせる3大SNS活用法

  ブログを収益化させたいけど、なかなかアクセス数が増えない 記事の質は高いのに、その良さをどうやって伝えれば良いかわからない   SEO対策をする上でも、収益化するためにも記事のクオリティは重要です。 しかし、せっかく良い記事を書いていても、そのブログや記事の存在を伝えることができなけれ...

AIが人類にもたらす驚異!深層学習が与える影響とは
ネットワーク
AI,ディープフェイク,深層学習
AIが人類にもたらす驚異!深層学習が与える影響とは

  海外の記事でAIについて記述した興味深いものが掲載されました。   今回は「AIが人類にもたらす驚異!深層学習が与える影響とは」について、上記サイトを参考にまとめましたのでご紹介します。 ※直訳ではありません、あくまで記事の内容を参考にして自らの考えを記述したものです     AIの驚異と...

ポケモン預かりシステム編 システムの実装 PHPポケモン 87
プログラミング
PHP,PHPポケモン,ポケモン
ポケモン預かりシステム編 システムの実装 PHPポケモン 87

ポケモン預かりシステムの実装 システムの仕様とクラスも整ってきたので、いざ実装をしていきましょう。 前回までに作成した項目で、いくつか変更になったものがあるので、まずはじめに挙げておきます。   シャットダウン機能 ボックスの選択を解除するというものでしたが、こちらを不採用にしました。ボックスは...

Toastr(トースト)活用編 PHPポケモン 100
プログラミング
JavaScript,PHP,PHPポケモン,ポケモン
Toastr(トースト)活用編 PHPポケモン 100

記念すべき第100回目です!   色々考えましたが、100回目だからと言って特別な内容ではなく、いつもの流れの延長での開発進行となります。ご了承ください。 今回は、何人かのプレイユーザーの声も参考にしながら、ユーザビリティをあげるための機能追加を進めていきます。   Toastr(トースト)と...

パーティー実装編 トレーナーの作成 PHPポケモン 63
プログラミング
PHP,PHPポケモン,ポケモン
パーティー実装編 トレーナーの作成 PHPポケモン 63

パーティーとは ポケモンでは、ゲーム・アニメ共に最大6匹のパートナーポケモンと旅をすることができます。7匹以上は持ち歩くことができず、ボックスに転送されてしまうという仕組みです。そして、その6匹のパートナーポケモンの構成をパーティーと呼んでいます。 現在のPHPポケモンでは1匹のポケモンしか管理で...

カテゴリ

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