Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl RPG库中字符与地图的分离_Perl_Design Patterns - Fatal编程技术网

Perl RPG库中字符与地图的分离

Perl RPG库中字符与地图的分离,perl,design-patterns,Perl,Design Patterns,我正在用Perl开发一个RPG库,希望使每个部分都尽可能可互换。我目前正在创建地图子系统,并将继续创建角色子系统。我应该如何处理角色和地图之间的交互 $character->move('left'); # Character encapsulates a Map 或者类似的 $runtime->moveCharacter('left'); # Runtime encapsulates both Map and Character 地图似乎不应该是角色的一部分,但在其他方面似乎很尴

我正在用Perl开发一个RPG库,希望使每个部分都尽可能可互换。我目前正在创建地图子系统,并将继续创建角色子系统。我应该如何处理角色和地图之间的交互

$character->move('left'); # Character encapsulates a Map
或者类似的

$runtime->moveCharacter('left'); # Runtime encapsulates both Map and Character
地图似乎不应该是角色的一部分,但在其他方面似乎很尴尬

另外,我应该如何将地图平铺的图形元素和角色的外观与其基础数据分离?或者在这种情况下,图形是其数据的一部分

我知道我想得太多了,我想让这个系统更灵活,而不是完全过度设计。谢谢

第一部分:

视情况而定。如果没有看到一些游戏的设计文档,你就无法肯定地回答这个问题,你希望人们能够通过你的库实现这些游戏。如果你想获得灵感,你需要一个全球性的对象,这个对象的相关部分正在悬挂

第二部分:

使平铺成为对象。图形方面只是一个属性。当您将其解耦到足以将瓷砖和其他内容传递给不同的渲染器,从而生成(可缩放或位图)图形、ANSI终端输出,甚至类似的文本描述时,您就知道您这样做是正确的


由于对象不仅封装了哑数据(外观),而且还将行为与之关联,因此您可以通过流体动力学或温度交互轻松扩展磁贴系统。

谢谢,这非常有用!所以对于Tile对象,我可以有一个抽象的Map::Tile类,其中Map::Tile::Graphical::GTK、Map::Tile::Graphical::Qt等是具体的类,而Map::Tile::Text是另一个具体的类?然后在地图中,我确保添加的每个瓷砖类型都是相同的?(我真的需要复习一下设计模式)。