luminoray/ role-php
PHP的一个简单的RPG框架。
Requires (Dev)
- phpunit/phpunit: 4.0.*
This package is not auto-updated.
Last update: 2024-09-14 18:58:30 UTC
README
欢迎来到RolePHP,这是一个简单的PHP库,用于创建自己的浏览器RPG。该项目仍处于非常早期的开发阶段。
安装
RolePHP可以通过Composer获得,因此有几种安装选项(假设已安装composer,如果没有,请参阅Composer安装)
终端
导航到您的项目文件夹,并执行以下命令
php composer.phar require luminoray/role-php
依赖定义
如果您打算让项目依赖于RolePHP之外的更多包,则这种方法很有用。在项目的根目录下创建一个名为composer.json的文件,内容如下
{
"require": {
"luminoray/role-php" : "dev-master"
},
"minimum-stability" : "dev"
}
dev-master版本定义的是本github项目中master分支的当前状态。随着开发进行,这应更改为RolePHP的当前版本(例如v1.0)。由于RolePHP仍在开发中,因此在更新此README文件时,最低稳定性必须设置为dev。
文件创建后,导航到您的项目文件夹,并执行以下命令
php composer.phar install
更新
要更新RolePHP的安装,只需导航到项目文件夹并执行以下命令
php composer.phar update
这将根据您的composer.json文件获取最新的匹配版本。有关更多信息,请参阅Composer基本用法。
基本用法
RolePHP提供了一个框架,用于创建基于PHP的浏览器RPG。因此,RolePHP不能立即使用,因为它允许开发者创建自己的伤害公式。
安装RolePHP后,必须包含位于vendor文件夹中的autoload.php文件。
<?php require_once('vendor/autoload.php');
包含该文件后,您将可以访问RolePHP类以及您在安装过程中在composer.json中定义的任何其他依赖项。但是,包含的Character类是一个抽象类,必须扩展以适应开发者的需求。当扩展Character时,必须定义如位于/Vendor/LuminoRay/RolePHP/src/character/iCharacter.php的字符接口iCharacter中描述的方法。
interface iCharacter { public function __construct(iStatus $status); public function attack(iCharacter $target); public function skill($name, $level, iCharacter $target); public function __get($stat_prop); }
Character类已定义了__construct()
和__get()
方法,这意味着在类扩展中只需定义attack()
和skill()
。以下是一个示例
class MY_Character extends LuminoRay\RolePHP\Character\Character { public function attack(LuminoRay\RolePHP\Character\iCharacter $target) { $damage = $this->attack - $target->defense; if ($damage > 0) { $new_health = $target->health - $damage; } else { $new_health = $target->health - 1; } $target->status->stat_set('health', $new_health, 0, 'greater_equal', 'set_constraint'); } public function skill($name, $level, LuminoRay\RolePHP\Character\iCharacter $target) { echo ('Skills are not yet implemented.\n'); } }
注意我们使用了类属性,如attack
、defense
和health
。这些属性是在将Status
对象传递给构造函数时由Character
类的__construct
方法定义的。此时,Character
对象将包含一个Status
对象,它有自己的属性和方法。
注意在attack()
方法末尾,我们调用Status
的stat_set()
方法来更新目标的健康值。该函数的参数可以在位于/Vendor/LuminoRay/RolePHP/src/character/iCharacter.php的状态接口iStatus中查看。
interface iStatus { public function __construct(array $stat_array); public function stat_set($stat_prop, $value, $constraint, $compare, $fallback); }
$stat_prop
是要更新的状态属性。$value
是我们将属性设置为的新值。$constraint
是必要的,如果我们将在新值和约束值之间进行比较。默认为0。$compare
是我们将要执行的比较类型。这可以是'equal'、'not_equal'、'less'、'less_equal'、'greater'、'greater_equal'。默认为'not_equal'。$fallback
定义了比较结果为假时将执行的操作。这可以是 'cancel' 或 'set_constraint'。默认为 'set_constraint'。
一旦我们创建了自定义的 MY_Character 类,现在就可以开始使用 RolePHP 了。
实例化
在我们创建 MY_Character 对象之前,必须首先创建一个将包含在内的 Status 对象。为此,我们首先定义一个状态关联数组,然后通过将此数组传递给构造函数来实例化 Status。以下是一个为两个角色生成统计数据示例:
$player_array = array( 'name' => 'LuminoRay', 'health' => 20, 'max_health' => 20, 'attack' => 10, 'defense' => 4 ); $enemy_array = array( 'name' => 'Slime', 'health' => 10, 'max_health' => 10, 'attack' => 7, 'defense' => 2 ); $player_stats = new LuminoRay\RolePHP\Character\Status($player_array); $enemy_array = new LuminoRay\RolePHP\Character\Status($enemy_array);
在实例化 Status 对象后,我们现在可以开始创建我们的 MY_Character 实例。
$player = new MY_Character($player_stats); $enemy = new MY_Character($enemy_stats);
从现在开始,我们可以尝试,通过 $player->health
或 $player->status->health
查看他们的统计数据,并命令他们互相攻击。
echo ("{$player->name} - {$player->health} / {$player->max_health} HP\n"); // LuminoRay - 20 / 20 HP echo ("{$enemy->name} - {$enemy->health} / {$enemy->max_health} HP\n\n"); // Slime - 10 / 10 HP $player->attack($enemy); echo ("{$player->name} attacked {$enemy->name}!\n"); // LuminoRay attacked Slime! echo ("{$player->name} - {$player->health} / {$player->max_health} HP\n"); // LuminoRay - 20 / 20 HP echo ("{$enemy->name} - {$enemy->health} / {$enemy->max_health} HP\n\n"); // Slime - 2 / 10 HP
请注意,这些属性是只读的,必须通过 Status 对象的 stat_set()
方法进行更新。
祝您玩得开心!