luminoray/role-php

PHP的一个简单的RPG框架。

0.1 2016-07-12 10:31 UTC

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');
	}
}

注意我们使用了类属性,如attackdefensehealth。这些属性是在将Status对象传递给构造函数时由Character类的__construct方法定义的。此时,Character对象将包含一个Status对象,它有自己的属性和方法。

注意在attack()方法末尾,我们调用Statusstat_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() 方法进行更新。

祝您玩得开心!