プログラミング

忘れさせる技選択 前編(覚えるのを諦める) PHPポケモン 55

PHP PHPポケモン ポケモン
忘れさせる技選択 前編(覚えるのを諦める) PHPポケモン 55

忘れさせる技の選択

PHPポケモンでは技習得時に忘れさせる技の選択が出来ず、古いものから順番に消えていっていました。ですが、これでは主力技として使っているものが、覚えたくもない技に消されてしまうということが起こってしまいます。

実際のゲームでも、技を覚えようとした際に既に最大数の4枠が埋まっていれば、代わりに忘れさせる技を選ぶことができます。今回はその「忘れさせる技の選択」を実装していきましょう。

 

技習得時の分岐

まず、技習得時の分岐について考えてみましょう。

忘れさせる技を選択させる以上、強制的に技を置き換える処理は一旦中断させなければなりません。なので、技習得時の選択肢は以下の2つになります。 

  1. 新しい技を覚えるのを諦める
  2. 現在覚えている技を指定して忘れさせる

 

新しい技を覚えるのを諦める

まずは処理が簡単な方から実装していきます。「新しい技を覚えるのを諦める」のは、現在の技構成から変更する必要がありません。なので、レスポンスに対して処理を行わなければ現在の技構成を維持することが可能です。

 

まずは、レベルアップ処理時の技習得処理に処理を加えていきましょう。

 

ポケモンクラスのチェック用トレイト(/App/Traits/Class/Pokemon/ClassPokemonCheckTrait.php
/**
* 現在のレベルで覚えられる技があるか確認する処理
*
* @return void
*/
protected function checkMove()
{
    // レベルアップして覚えられる技があれば習得する
    $level_move_keys = array_keys(
        array_column($this->level_move, 0),
        $this->level
    );
    foreach($level_move_keys as $key){
        $move_class = $this->level_move[$key][1];
        // 覚えようとしている技(クラス)が存在かつ重複していないか
        if(!in_array($move_class, array_column($this->move, 'class'), true)){
            // インスタンス化
            $move = new $move_class;
            if(count($this->move) < 4){
                /**
                * 技が4つ未満なら即習得
                */
                // 技クラスをセット
                $this->setMove($move);
                $this->setMessage($move->getName().'を覚えた!');
            }else{
                /**
                * 技選択用モーダルの返却
                */
                // メッセージIDを生成
                $msg_id = $this->issueMsgId();
                // レベルアップメッセージ
                $this->setMessage($this->getNickName().'は'.$move->getName().'を覚えたい');
                $this->setMessage('しかし技を4つ覚えるので精一杯だ');
                $this->setMessage($move->getName().'の代わりに他の技を忘れさせますか?', $msg_id);
                // レスポンスデータをセット
                $this->setResponse([
                    'toggle' => 'modal',
                    'target' => '#'.$msg_id.'-modal',
                    'move' => $move_class
                ], $msg_id);
                // モーダル用のレスポンスをセット
                $this->setModal([
                    'id' => $msg_id,
                    'modal' => 'selectmove',
                    'move' => array_merge($this->getMove(), [[
                        'class' => $move,
                        'remaining' => $move->getPp(),
                        'correction' => 0,
                    ]]),
                ]);
                // 諦めメッセージを事前に用意しておく
                $this->setMessage($this->getNickName().'は'.$move->getName().'を覚えるのを諦めた');
            }
        }
    }
}

 

現在習得している技が4つ未満であれば、今まで通りの処理です。もし4つ以上だった場合は強制的に書き換えるのではなく、確認メッセージを返却するようにしています。

モーダルのパラメータ(move)には、現在覚えている技と、新しく覚えようとしている技を配列で返却しています。この時点では覚えている技は変わっておらず、あくまで新しい技はレスポンス(モーダル)に追加しただけになります。

 

また、諦めメッセージについてですが、こちらは技習得段階で用意しておきましょう。諦めるという選択をした際にJavaScriptで追加するよりも処理が簡単で、もし諦めなかった場合はその時点でフォームの送信が発生するためメッセージはそのまま破棄することができるからです。

 

次に、返却されたモーダルの作成です。

 

忘れさせる技の選択モーダル(/Resources/Partials/Battle/Modals/selectmove.php
<!-- Modal -->
<div class="modal fade" id="<?=$modal['id']?>-modal" tabindex="-1" role="dialog" aria-labelledby="<?=$modal['id']?>-modal-title" aria-hidden="true" data-keyboard="false" data-backdrop="static">
    <div class="modal-dialog modal-dialog-centered" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="<?=$modal['id']?>-title">忘れさせる技を選ぶ</h5>
            </div>
            <div class="modal-body">
                <?php # 覚えている技 ?>
                <table class="table table-bordered table-sm table-hover">
                    <thead class="thead-light">
                        <tr>
                            <th scope="col">覚えている技</th>
                            <th scope="col">タイプ</th>
                            <th scope="col">PP</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach($modal['move'] as $key => $move): ?>
                            <tr class="move-detail-link forget-selectmove <?php if($key === 4) echo 'active new-move'; ?>"
                                data-target="#<?=$modal['id']?>_<?=get_class($move['class'])?>-content"
                                data-name="<?=$move['class']->getName()?>"
                                data-num="<?=$key?>">
                                <th scope="row" class="w-50"><?=$move['class']->getName()?></th>
                                <td><?=$move['class']->getType()->getName()?></td>
                                <td><?=$move['remaining']?>/<?=$move['class']->getPp($move['correction'])?></td>
                            </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
                <?php # 技説明 ?>
                <div class="overflow-auto p-3 border" style="height:160px;">
                    <?php foreach($modal['move'] as $key => $move): ?>
                        <div class="move-detail-content <?php if($key === 4) echo 'active'; ?>" id="<?=$modal['id']?>_<?=get_class($move['class'])?>-content">
                            <h6><?=$move['class']->getName()?></h6>
                            <hr>
                            <p><?=$move['class']->getDescription()?></p>
                        </div>
                    <?php endforeach; ?>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button"
                class="btn btn-danger btn-sm"
                id="btn-forget-move"
                data-msg_id="<?=$modal['id']?>"
                style="display:none;">
                <span class="move-name"></span>を忘れる</button>
                <button type="button" class="btn btn-secondary btn-sm action-message-box" id="btn-abandon-move" data-dismiss="modal">
                    <?=$modal['move'][4]['class']->getName()?>を諦める
                </button>
            </div>
        </div>
    </div>
</div>

 

ホーム画面用の技詳細と同じテーブルを使用しました。忘れさせる手順は、テーブルから技を選択して、決定ボタンを押すという流れです。技を忘れさせる場合は別のボタンを用意し、モーダルを閉じるだけの処理を行います。

もし「忘れさせる」ボタンを押せば、そこで必要データをPOSTして処理を行います。諦める場合は、そのままモーダルを閉じることで、事前に用意した諦めメッセージが表示されます。

 

それでは、技習得時の流れを確認してみましょう。

 

  

問題なくモーダルが表示されました。技選択を諦める場合はモーダルをそのまま閉じて処理を進行させているだけなので、レベルアップ後のステータス表示処理とさほど変わりませんね。

これで、技選択の分岐1が完成です。

 

まとめ

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

今回のPHPポケモンは「技を忘れさせる(諦める)」の処理作成についてご紹介しました。

いろんな処理を作成しましたが、処理途中で分岐が入るのがWEBプログラミング(PHP)にとってはそこそこ厄介だということが、後編を見ればわかるはずです。ですが、実現できないわけではありません。

それでは、後編を乞うご期待ください。

 

注目の記事

PHPポケモン「状態異常編〜まひ〜」23
プログラミング
PHP,PHPポケモン,ポケモン
PHPポケモン「状態異常編〜まひ〜」23

  今回のPHPポケモンでは「状態異常」を導入します。バトルシステムにも関係してくる部分ですが、それ以外にも影響を与える部分が多く、且つ非常に判定がややこしく、作り込む必要があったため1つずつ片付けていきます。   状態異常の実装  ポケモンの除隊異常に該当するものは以下の7通りです。 ...

甘い誘惑に気をつけよう「わからないことへの対処法」
雑記
甘い誘惑に気をつけよう「わからないことへの対処法」

  最近は開発記事が多めだったので、今回は気分転換も込めてみんな大好きコラムのコーナーです。開発疲れという理由ももちろんありますが、久々に考えを書き綴りたくなったというのが本音です。   今回のテーマは「甘い誘惑に気をつけよう」です。高校生ぐらいまではあまり縁がなかったことでも、大学生・社会...

LANとWANについて【第2回 ド素人のためのネットワーク講座】
ネットワーク
IoT,LAN,WAN,Wi-Fi
LANとWANについて【第2回 ド素人のためのネットワーク講座】

  YQUALがお送りする、ド素人のためのネットワーク講座。 栄えある第2回は「LANとWANについて」です。   フロントエンジニアや現在プログラミングを学習中の方を中心に、ネットワークについての基礎的理解を深めていくための内容になっています。 ざっくりとした説明で物足りない、または細かく見ていった...

進化の石編(構成) PHPポケモン 102
プログラミング
PHP,PHPポケモン,ポケモン
進化の石編(構成) PHPポケモン 102

進化の石 ピカチュウさんもそろそろ進化したがっているので、β版の公開に向けて進化の石を実装していきます。しかし、イーブイなど特別な進化先や条件を持ったポケモンを考慮すると、少し実装が手間取りそうだったので、今回は構成部分のみのまとめとなっておりますので、ご了承ください。   アイテムクラスの作...

PHPポケモン「バトルシステム実装編〜ランク補正〜」22
プログラミング
PHP,PHPポケモン,ポケモン
PHPポケモン「バトルシステム実装編〜ランク補正〜」22

ランク補正とは  ポケモンでは通常ステータスとは違い、バトル中にのみ変化するステータスが存在します。初代仕様であれば、「なきごえ」や「かたくなる」といった変化技により「こうげき」や「ぼうぎょ」の強化や弱体化をさせるものです。これはバトル中であれば引き継がれるものですが、交代やバトルが終了すればリ...

有料ノートが公開停止!?プラットフォーム依存の危険性とは
雑記
note,YouTube,ブログ
有料ノートが公開停止!?プラットフォーム依存の危険性とは

  「いままでのnoteがいきなり公開停止になった」 「YouTubeであげていた人気動画が削除された」   規約変更、違反などを理由にこういった被害は年々増えています。自覚して悪意あるコンテンツを作っているユーザーであれば当然の結果だと言ってしまえば済むことですが、努力して収益化する糸口を見つけ...

プログラミングでフリーランスを目指す人にPHP学習をオススメする3つの理由
プログラミング
Laravel,PHP,SEO,WordPress
プログラミングでフリーランスを目指す人にPHP学習をオススメする3つの理由

  「フリーランスになるためにプログラミングを身に着けたい」 「セカンドキャリアで技術を習得したい」 「副業でパソコン1台で稼げるものに挑戦したい」   終身雇用が危ぶまれている現在、スキルを身に着けて転職やフリーランスとして活躍したいと考える人が増え、プログラミングの需要は年々高まってきて...

あばれる編(あばれる・はなびらのまい)PHPポケモン52
プログラミング
PHP,PHPポケモン,ポケモン
あばれる編(あばれる・はなびらのまい)PHPポケモン52

あばれる状態とは 技を使うと、しばらくの間その技のみしか使用できなくなる技があります。その状態を「あばれる状態」と言います。 あばれる状態(ポケモンwiki) https://wiki.ポケモン.com/wiki/あばれる_(状態変化) あばれるの効果 2~3ターンの間攻撃し続け、交換したり、他の指示を出すことが出...

カテゴリ

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