構成の見直し
今回は全体構成の見直しをします。ディレクトリについては変更ありませんが、ファイル名とクラス名について大幅な修正をかけていきます。
クラス名の重複回避
まず、クラス名の重複についてです。状態異常・状態変化の子クラスでは重複回避のために接頭語を着けて管理していましたが、他にも重複する点を確認したので、早い段階で対処しておきます。
- サイコキネシス(技)
→ Psychic
- エスパー(タイプ)
→ Psychic
- ゴースト(ポケモン)
→ Ghost
- ゴースト(タイプ)
→ Ghost
今回重複回避のため、以下の2つのクラスカテゴリに対して接頭語をつけて管理します。
タイプクラス
まずはタイプクラスからです。重複を回避するために子クラスには接頭語として「Type」を付与します。以下エスパータイプについて見ていきましょう。
エスパータイプクラス(/Classes/Type/TypePsychic.php)
<?php
$root_path = __DIR__.'/../..';
require_once($root_path.'/Classes/Type.php');
// エスパータイプ
class TypePsychic extends Type
{
/**
* 正式名称
* @var string
*/
protected $name = 'エスパー';
/**
* 攻撃技で使用したときの判定
*/
/**
* こうかばつぐん
* @var integer
*/
protected $excellent = ['TypeFighting', 'TypePoison'];
/**
* こうかいまひとつ
* @var integer
*/
protected $not_very = ['TypePshchic', 'TypeSteel'];
/**
* こうかがない
* @var integer
*/
protected $doesnt_affect = ['TypeDark'];
}
ポケモンクラスや技クラスに関しても、タイプクラスの指定をしているため、そちらも修正をかけておきます。
技クラス
次に対処するのが技クラスです。こちらに関しても重複回避のために、接頭語「Move」を付与します。例として「サイコキネシス」という技を作成します。
サイコキネシス(/Classes/Move/MovePsychic.php)
<?php
$root_path = __DIR__.'/../..';
require_once($root_path.'/Classes/Move.php');
// サイコキネシス
class MovePsychic extends Move
{
/**
* 正式名称
* @var string
*/
protected $name = 'サイコキネシス';
/**
* 説明文
* @var string
*/
protected $description = '追加効果として10%の確率で相手のとくぼうを1段階下げる。';
/**
* タイプ
* @var string
*/
protected $type = 'TypePsychic';
/**
* 分類
* @var string(physical:物理|special:特殊|status:変化)
*/
protected $species = 'special';
/**
* 威力
* @var integer
*/
protected $power = 90;
/**
* 命中率
* @var integer
*/
protected $accuracy = 100;
/**
* 使用回数
* @var integer
*/
protected $pp = 10;
/**
* 優先度
* @var integer
*/
protected $priority = 0;
/**
* 追加効果
*
* @param array $args
* @return void
*/
public function effects(...$args)
{
/**
* @param Pokemon $atk 攻撃ポケモン
* @param Pokemon $def 防御ポケモン
*/
list($atk, $def) = $args;
// 相手のとくぼうランクを1段階下げる
$msg = $def->subRank('SpDef', 1);
$this->setMessage($msg);
}
}
ポケモンにもタイプ、技のクラスをしている箇所があるので、合わせて修正をしておきましょう。
本番環境のエラー修正
最後に本番環境のエラー修正報告です。
技習得時のエラーについて報告が上がっていたので解消しました。技の格納をPPの概念を導入して連想配列で管理してからこちらの修正が漏れていたので対応しました。
ポケモンのチェックトレイト(/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();
// 技クラスをセット
$this->setMove($move);
$this->setMessage($move->getName().'を覚えた!', 'success');
}
}
}
その他アニメーションの追加やレイアウトの微修正などを対応しています。他にもお気づきの点があればお問い合わせお待ちしております。
不具合報告・お問い合わせ
まとめ
いかがだったでしょうか。
今回のPHPポケモンでは、構成の見直しと不具合箇所についてまとめました。
プログラミングやゲームづくりに興味がある人は、ぜひ参考にしてくださいね。