HowToWriteAdventureGamesUsingArianne

来自gamedev
220.184.179.103留言2022年6月3日 (五) 23:36的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索




备注:本教程介绍创建探险游戏的早期步骤。Stendhal已经运行好几年了,从创建以来发生了很多事情。然而,如果你打算开始自己的探险游戏,那么这个文档仍然是一个有趣的读物。



介绍[编辑]

本文档是一个教程,它将帮助您使用Arianne系统和Java2D开发多人在线游戏。

编写游戏是一个包含若干阶段的过程:

  • 规格说明
  • 设计
  • 实施
  • 评估
  • 部署

Arianne是一个多人在线游戏框架和引擎,用于开发基于回合的实时游戏。它提供了一种在可移植和健壮的服务器架构上创建游戏的简单方法。服务器Marauroa是用Java编写的,可以使用Java或Python来描述游戏。它还提供了一个SQL后端,并使用TCP传输通道与客户机通信。 为了实现最大的可移植性,我们的参考客户机使用Java(过去是C)进行编码。

Arianne引擎的设计使您可以集中精力设计实际的游戏,而忽略复杂系统的所有详细实现方面,例如多人在线游戏内容服务器中的实现。因此,您不必关心线程、数据库和网络处理的问题。

从一开始,阿里安发展的核心概念就是KISS:Keep it simple, stupid! (保持简单,愚蠢!)

Arianne一直是一个开源项目,根据GNU GPL许可证编写和发布。我们相信正确的方法是开源的,我们希望您能够在客户机和服务器中更改、编辑和配置您想要的任何内容。Arianne始终欢迎您对代码的贡献和修改,以便为游戏内容提供商创建尽可能最好的开源参考平台。

我们所有的努力都得到了Arianne的引擎——Marauroa的支持。Marauroa完全用Java编写,使用多线程服务器体系结构、面向TCP的网络协议、基于SQL的持久性引擎和灵活的游戏系统。Marauroa完全是游戏无关的,对你所要做的几乎没有任何假设,因此在创建游戏时允许了极大的自由。游戏系统是完全可扩展和修改,以满足您的游戏的需要。它能够运行定义游戏规则的Python脚本,提供了一种指定游戏行为的简单方法。

Marauroa基于一种设计理念,我们称之为动作/感知。感知是每个回合发送给客户的数据集合,向他们解释他们当前在游戏环境中的感知。动作从客户端发送到服务器,用于要求服务器为它们执行操作。


Stendhal游戏示例[编辑]

在本文中,我将以一个游戏的开发为例,展示stendhal游戏的开发。

在文件的最后,我将提供更多的指导和模板,以帮助你开始自己的游戏。但请首先阅读stendhal的例子。通过一个真正的游戏工作的例子,可以充分了解Arianne系统。

预先准备[编辑]

开发多人在线游戏是一项非常复杂的任务。事实上,我想说这是你能想象到的最复杂的软件开发任务。Arianne把复杂度降低了几个数量级!但是,要成功理解这个游戏设计示例,您还需要了解以下几点:

  • Java:本例中的所有内容都是用Java编写的。
  • 客户机/服务器概念:这些概念将帮助您理解为什么事情应该那样做。
  • 游戏设计:了解游戏设计可以简化对整个文档的理解。

只需确保你了解基本知识,即你能够编写Java代码,并且你对游戏设计过程略知一二。

记住,Arianne提供了一个客户机/服务器中间件,需要扩展和修改以适应您的游戏,因此您需要考虑服务器和客户机两方面:

  • 服务器:这类似于所有在线玩家的裁判。它告诉每个玩家他/她看到了什么,他/她能做什么。它还决定了玩家所做动作的结果。
  • 客户端:它们类似于电视,它们使用来自服务器的信息来提供游戏的视图。客户端还从玩家获取输入并将其发送到服务器。

使用Arianne技术没有其他先决条件,您应该会发现,本文档将解释您所需的几乎所有其他内容。我们开始吧!

规格说明[编辑]

在开始做任何事情之前,想想你想实现的游戏。
决定你的游戏是关于什么,它将有什么功能,什么将使它不同于其他类似的游戏,什么技术会用在里面,等等。。。先把你的设计计划好,以免日后出现问题。

在我们的例子中,我们将编写一个名为stendhal的游戏。

基本描述[编辑]

Stendhal是一款成熟的多人在线冒险游戏(MMORPG),使用Arianne游戏开发系统开发。 Stendhal拥有一个新的、丰富的和不断扩展的世界,在这个世界上你可以探索城镇、建筑、平原、洞穴和地下城。 你将遇到NPC,并从任务中获得有价值的经验和金钱。 你的角色会发展和成长,随着每一个新的水平的提高变得越来越强和更好。用你获得的钱,你可以购买新的物品,提高你的盔甲和武器。 你要在世界上漫游,寻找邪恶的怪物,以满足你们的killing欲望!

游戏世界的初稿如下:

File:Stendhal Map.jpg


游戏看起来应该是这样:

http://arianne.sourceforge.net/wiki_images/Stendhal_GUI_detailed.jpg

GFX不是真正的ingame外观

多人游戏[编辑]

多人模式是基于玩家之间的合作和竞争:

  • 玩家可以合作让绵羊更安全、更快地成长
  • 玩家可以合作杀死强壮的生物
  • 玩家可以互相竞争杀死其他玩家的绵羊。
  • 玩家可以通过引诱怪物进入其他玩家来相互竞争。

也有可能把这看作是一个新手区,训练玩家真正在更大的区域玩更多的怪物、问题和新任务。

为什么要玩塞尔达游戏?[编辑]

Stendhal是一个使用Arianne进行代码对游戏的好例子,因为它暴露了与更复杂游戏类似的问题,如:

  • 世界上有很多东西
  • 对象具有与其关联的触发器
  • 游戏中有角色发展
  • 世界是永恒的
  • 人工智能(NPC,绵羊和狼)是复杂的,因为它将是一个更复杂的RPG游戏
  • 然而,一切都是概念上的简单
  • 滞后确实很重要

如你所见,Stendhal是一款小型游戏,它试图推动与RPG相关的一切:

  • 玩家需要分几个步骤完成的任务
  • 在基于上下文的情况下玩家可以执行的操作
  • 玩家需要探索的几个领域
  • 合作与竞争的角色扮演

细节[编辑]

我们需要考虑游戏中发生或出现的情况,并构建一些详细的“用例”来指出游戏中存在的实体和动作。 一旦我们知道游戏中会出现什么,我们就可以对游戏的每个实体分别进行详细的描述。如果你觉得这听起来像OOP方法,那就拍拍自己的背,因为你是对的!Arianne使用基于对象的设计方法。 在游戏中,我们有以下实体:

  • 区域
    1. 城市
    2. 村庄
    3. 平原
    4. 森林
    5. 地牢
  • 生物
    1. 绵羊
    2. 老鼠
    3. 山洞鼠
  • 玩家
  • NPC
  • 任务

目标[编辑]

因为许多多人游戏Stendhal没有明确的目标。
目标可能是:

  • 成为世界上最好的玩家
  • 从最深的地牢里得到最奇怪的东西
  • 探索整个世界
  • 让自己成为传奇:)

很难解释目标,但一旦你开始比赛,你就会上钩:)

游戏整体外观[编辑]

在前进之前我们需要知道比赛会是什么样子。我们使用标准的pacman游戏作为参考:
http://arianne.sourceforge.net/wiki_images/StendhalLook.jpg

设计[编辑]

使用的技术[编辑]

为了实现mapacman,我们将使用我们的多人在线游戏引擎Arianne。所以在设计游戏之前,我们必须了解阿里安的主要概念和思想。我们需要使设计符合一些简单的规则,以获得最简单的设计和最好的性能。 Arianne使用UDP传输协议,这是可用的最快、最低的ping传输。然而,它的代价是应用程序无法检测丢失的数据包。如果你的连接真的很糟糕,你将经常失去与服务器的同步,因为如此多的数据发送将丢失。但是,没有传输方法可以帮助您进行这种连接! 阿里安的系统基于感知/动作/感知方案。这涉及到服务器向客户机发送一个Perception,它是一个RPObjects列表(Arianne中的对象是RPObject类型),其中包含了相应的修改、添加和删除。客户端接受感知并处理它以更新他们对游戏环境的看法,然后如果他们想执行一个动作,他们会将一个RPAction(Arianne中的动作类型为RPAction)发送回服务器。在下一个回合,服务器发送一个新的感知消息,该消息将包含操作的结果(即受操作影响的对象的更改)。 这种方案有几个优点:

  • 与基于回合和实时的游戏完美结合
  • 在每个时间点上都有一个连贯的博弈状态
  • 低ping时间的玩家不会获得疯狂的优势
  • 可以修改轮换时间以提高带宽/性能
  • 支持比其他系统多几个数量级的玩家。

另一方面,它也有一系列明显的缺点:

  • 结果只有在回合实际发生时才有效(即,动作结果只在下一回合出现)
  • 不是制作第一人称射击类游戏的最佳/最简单方法

然而,这个简单的系统功能强大,几乎可以轻松地编写所有游戏:实时游戏和基于回合的游戏。

File:PerceptionActionPerception.png

游戏设计中的一个主要问题是为服务器选择一个转换时间。它应该基于我们正在做的游戏类型。例如,一个实时策略游戏需要大约300毫秒的转弯时间,而基于转弯的策略游戏则需要1000-1500毫秒的转弯时间。回合制游戏比非回合制游戏节省了很多带宽,但是请注意,回合时间越短,带宽使用率就越高。还要记住,转动时间越短,CPU使用率就越高。 感知由一系列对象组成。RPObject由以下几种属性组成:

 attribute=value

这些属性允许在对象中存储字符串、int和float。 RPObject也由插槽构成。槽是一个物品的容器,很像一个口袋、一个袋子、一个盒子或一只手。关键是,如果我们的对象需要有对象在其中,或附加到它们,您需要使用插槽。

File:RPObjectER.png

世界上所有的动态变化都是通过行动来实现的。RPAction也由属性组成。您必须重新定义动作对象的默认属性,以便该动作特定于您的游戏。 每个播放器都使用MySQL数据库系统存储在关系数据库中。你不需要知道这是怎么做到的,但你可以相信我,它的工作!所有东西都存储在数据库中,从而使整个世界永久不变。这取决于您决定哪些程度的东西需要存储在数据库中,何时以及多久提交(存储)一次。数据库是Arianne在撰写本文时的主要瓶颈。

世界设计[编辑]

整个游戏区域看起来像:

File:Stendhal Map.jpg

它被分成5个不同的区域来使用Arianne的多区域功能。
玩家需要改变区域来完成他们的任务和在游戏中的进步。

城市[编辑]

这座城市由两个区域组成:一个是绵羊买家工作的地方,另一个是装满老鼠的地方,以轻松赢得XP。

http://arianne.sourceforge.net/wiki_images/city.jpg

http://arianne.sourceforge.net/wiki_images/city_underground.jpg

你可以用树附近的洞从一个移动到另一个。 此外,这个区域还有一些买家的羊圈和一些NPC喜欢:卡门,威尔士人和迪奥根尼斯,一个不诚实的乞丐。

村庄[编辑]

村里住着卖羊肉的小贩:长濑,他会把羊肉卖给你,让你养大。

http://arianne.sourceforge.net/wiki_images/village.jpg

平原[编辑]

你在哪里能找到更好的地方种绵羊?但绵羊是狼的食物。这个区域有几只狼和几只老鼠。

http://arianne.sourceforge.net/wiki_images/plains.jpg

森林[编辑]

http://arianne.sourceforge.net/wiki_images/forest.png

实体设计[编辑]

为了让这个世界看起来是活的,我们添加了下一个实体。

  • 绵羊
  • 卖羊的
  • 买羊人
  • 老鼠
  • 山洞鼠
  • 玩家
  • 食物
  • 盔甲
  • 武器
  • 治疗药剂

用例[编辑]

这些用户案例描述了实体的行为。这有助于我们在编码阶段明确目标的实现。

玩家的用户案例[编辑]

玩家是一个玩游戏的实体,它可以移动,聊天,攻击,治疗。

  Player enter village in entry point
  Player moves to Farm zone

  Player talks with Sheep seller
    Player: Hi
    Seller: Greetings! How may I help you?
    Player: buy Sheep
    Seller: Do you want to buy a Sheep for 50 coins?
    Player: yes
    Seller: Thank you! Bye

  Player moves. Sheep follows Player.
  Player moves to plains
  Player moves around looking for food
  Player protect Sheep of wolves attacks

  When Sheep is big enough Player moves to Village
  Player talks with Sheep buyer
    Player: Hi
    Buyer: Greetings! How may I help you?
    Player: sell Sheep
    Buyer: Do you want to sell this Sheep for 73 coins?
    Player: yes
    Buyer: Thank you! Bye

  Player spend money in new Sheep and equipment
  * Armor
  * Weapon
  * Healing potions

绵羊卖家的用例[编辑]

这个卖家是一个NPC实体,会卖给我们一只羊,让它长大赚钱。

FOREVER do:
  Listen to Player

  If listen "Hi":
    Seller says "Greetings <Player>!"

  If listen "Buy Sheep" from Player:
    Seller says "Do you want to buy a Sheep for 50 coins?"

  If listen "yes" from Player:
    If Player money - 50 > 0:
      set Player money=Player money - 50
      Duplicate Sheep
      Make Sheep follows Player
  Say bye to Player
DONE

绵羊买家的用例[编辑]

这个买家是一个NPC实体,它会给我们买羊。

FOREVER do:
  Listen to Player

  If listen "Hi":
    Seller says "Greetings <Player>!"

  If listen "Sell Sheep" from Player:
    Estimate Sheep value related to Sheep weight
    Seller says "Do you want to sell your Sheep for <estimated price> coins?"
  
  If listen "yes" from Player:
    set Player money=Player money + <estimated price>
    set Player XP=Player XP + 100 * Sheep Weight / 100
    Destroy Sheep
  
  Say bye to Player
DONE

绵羊的用户案例[编辑]

绵羊是我们的关键游戏概念。玩家必须牧羊他们的羔羊,保护他们的狼等,直到他们值得出售。

  Sheep is in Farm
  Player buys Sheep
  Sheep seller duplicates Sheep
  Sheep follows Player

  If Sheep finds food:
    Sheep moves to food
    Sheep eats food
    Sheep gains weight

  Player sells Sheep
  Sheep dissappear

狼的用例[编辑]

狼是Stendhal的竞争实体。他们一起攻击绵羊,也经常是玩家。他们能很快杀死一只羊。

  Wolf moves
  If Wolf sees Sheep:
    Wolf attacks Sheep
  
  If Wolf is attacked:
    Wolf attacks Attacker

老鼠的用例[编辑]

老鼠和山洞里的老鼠会攻击玩家,使羊更难长大。

  Rat moves
  If Rat sees Player:
    Rat attacks Player
  
  If Rat is attacked:
    Rat attacks Attacker

让我们描述每个实体及其属性和操作。

绵羊[编辑]

绵羊具有以下属性:

  • x是绵羊的x位置
  • y是绵羊的y位置
  • dx是绵羊的x速度
  • dy是绵羊的y速度
  • hp是绵羊的生命指标,当它达到0时,绵羊死亡。
  • atk是RP攻击值。见速递签名规则
  • def是RP防御值。见速递签名规则
  • xp是RP经验值。见 RP rules
  • 体重是绵羊的体重指标,体重越重,价格越贵。

绵羊的任务应该是:

  • 跟随

绵羊的行为主要是跟随主人寻找食物。
如果羊找到食物,它就会吃。
羊被攻击就会逃跑。

生物:狼、鼠、洞鼠[编辑]

狼、老鼠和山洞鼠具有以下属性:

  • x是狼的x位置
  • y是狼的y位置
  • dx是狼的x速度
  • dy是狼的y速度
  • hp是狼的生命指标,当它达到0时狼就会死亡。
  • atk是RP攻击值。见 RP rules
  • def是RP防御值。见 RP rules
  • xp是RP经验值。见 RP rules

狼(鼠和洞鼠)的任务应该是:

  • 跟随意味着狼用最短的方法跟随一个物体到达它。
  • 攻击意味着狼会试图伤害被攻击的目标,直到其血量达到0
    另一个动作将取消攻击任务。
  • 巡逻意味着狼会沿着指定的路径移动。
  • 聊天意味着狼会开始喊“auuuuuuu!”。狼通常会把这理解为一种召唤。

狼(老鼠和山洞鼠)的行为包括在指定区域巡逻。
如果狼找到一只羊,它就会攻击羊。
如果狼找到一个玩家,它就会攻击玩家。
如果狼被攻击了,狼就会返回攻击。
如果狼受了重伤,狼就会逃跑。

卖羊人、买羊人、乞丐[编辑]

买卖双方具有以下属性:

  • x是NPC的x位置
  • y是NPC的y位置
  • dx是NPC的x速度
  • dy是NPC的y速度
  • hp是NPC的寿命指示器,当它达到0时,它将重置为满。
  • atk是RP攻击值。见 RP rules
  • def是RP防御值。见 RP rules
  • xp是RP经验值。见 RP rules
  • 参加是实际参加的玩家的对象id。

卖家、买家和乞丐的任务是:

  • 巡逻意味着NPC将绕指定路径移动。

NPC的行为包括倾听身边的人。
如果对方说“嗨”,NPC将面对对方并进行对话。

玩家[编辑]

玩家拥有以下属性集:

  • x是播放器的x位置
  • y是播放器的y位置
  • dx是播放器的x速度
  • dy是播放器的y速度
  • hp是玩家的生命指示器,当它达到0时,玩家死亡。见
  • atk是RP攻击值。见 RP rules
  • def是RP防御值。见 RP rules
  • xp是RP经验值。见 RP rules
  • money是玩家拥有的金钱数量。

它有三个插槽:

  • 盔甲
  • 左手
  • 右手
  • 背包

玩家任务应该是:

  • 移动表示播放器将其dx,dy参数更改为移动。
  • 攻击表示玩家将尝试伤害被攻击对象,直到其生命值达到0。
    另一个操作将取消攻击任务。
  • 聊天表示玩家向其他玩家或NPC写入文本

食物[编辑]

食物具有以下属性:

  • x是播放器的x位置
  • y是播放器的y位置
  • 数量是可用的食物量

食物每X个单位的时间就会再生一次。

装甲[编辑]

盔甲是玩家可以“穿戴”的物品:

  • x是玩家不穿盔甲时盔甲的x位置。
  • y是玩家不穿盔甲时盔甲的y位置。
  • def是RP防御值。见 RP rules
  • 重量是装甲的重量。

屏蔽[编辑]

盾牌是玩家可以“佩戴”的物品:

  • x是玩家不戴盾牌时盾牌的x位置。
  • y是玩家不戴盾牌时盾牌的y位置。
  • def是RP防御值。见 RP rules
  • weight是防护罩的重量。

武器[编辑]

武器是玩家可以“佩戴”的物品:

  • x是玩家不佩戴武器时武器的x位置。
  • y是玩家不佩戴武器时武器的y位置。
  • atk是RP攻击值。见 RP rules
  • weight是武器的重量。

治疗药剂[编辑]

疗伤药水是玩家可以在背包中“佩戴”的物品:

  • x是当玩家不戴药水时药水的x位置。
  • y是当玩家不戴药水时药水的y位置。
  • 治疗是药水将治疗的血量。

RP设计[编辑]

角色扮演游戏基于一套规则。有很多规则:广告与开发,专家,战锤,…
Stendhal定义了一组新的“典型”规则,它们具有共同的简单性和易计算性。 该系统基于三个理念:

  • 使用1D6的随机性
  • 风险评估
  • 创造力

风险评估使数据挖掘有权权衡玩家希望执行的动作,比如玩家在该类动作中的经验和所处的情况。 DM代表“地牢主人”。在Stendhal中,我们的任务是设计DM,因为它是游戏的规则。

属性[编辑]

每个玩家都有一组属性:

  • attack-此值用于解决攻击情况。
  • defense-此值用于解决玩家受到攻击的情况。
  • hp-此值存储可用的活动点。
  • level-创建角色时,该级别从零开始,并将随着经验的增加而增加
  • experience-这是在当前级别获得的经验量

任何RP最困难的部分是平衡不同实体的值。 我们需要将RP(atk、def和hp)值提供给:

玩家[编辑]

玩家有以下属性:

  • ATK-2
  • DEF-2
  • HP-100

这些值是随机设置的。

绵羊[编辑]

羊不能攻击,所以它必须比玩家弱。

  • ATK-0
  • DEF-1
  • HP-30

这些值也是根据玩家值随机设置的。 杀羊不会给你任何经验。

老鼠=[编辑]

老鼠是你能在司汤达找到的最简单的敌人,所以一级玩家要杀死它必须非常简单。

  • ATK - 3
  • DEF - 2
  • XP - 5
  • HP - 10

为了设置这些值,我们运行了一个模拟,直到在图中找到正确的外观。
File:Rat Fight.gif

洞穴鼠=[编辑]

山洞老鼠是老鼠的一个更强大的版本,所以2-3级玩家要杀死它必须非常简单。

  • ATK - 6
  • DEF - 2
  • XP - 10
  • HP - 20

为了设置这些值,我们运行了一个模拟,直到在图中找到正确的外观。
File:Caverat Fight.gif

狼=[编辑]

狼是平原和森林中常见的生物,它必须简单到足以让4-5级玩家杀死。

  • ATK - 6
  • DEF - 4
  • XP - 18
  • HP - 35

为了设置这些值,我们运行了一个模拟,直到在图中找到正确的外观。
File:Wolf Fight.gif

经验和水平=[编辑]

所有的属性都可以在游戏中通过获得经验和等级来增加。 DM授予经验的原因如下:

  • 良好的角色扮演
  • 技能的使用
  • 战斗

经验不能通过训练获得。 当你获得一个等级时,你可以增加一个属性。 要达到一个水平,你需要达到下一个经验点:

LevelExperience neededHP value
00100
1100110
2128120
3384130
4768140
51408150
62432160
73712170
85504180
97808190
1010624200

正如你可以推断的那样,每升一级的生命值以10的速度增长,并且每升一级,ATK和DEF值都会增加一个。 计算XP的公式是:

 exp = (10*level+5*level^2+10*level^3+80)

战斗[编辑]

战斗是两个或多个玩家之间的战斗。 战斗是以回合为基础的。每轮5圈。 攻击玩家的风险可以写为:

  Attacker.attack VS Defender.defense/6 + 1D6

如果玩家被击中,我们需要计算已经造成的伤害:

  result = Attacker.attack/6 + 1D6 VS Defender.defense
  if result > 0:
    Defender.hp = Defender.hp - result
  end if

当生命值达到0时死亡。 当两个骰子都是6时,会发生致命一击。损失等于攻击者.攻击

防护罩[编辑]

盾牌等级增加你的防御技能:

ShieldRating
Buckler shield+1
Small shield+2
Medium shield+3
Tower shield+5

装甲[编辑]

盔甲帮助你吸收伤害。

ArmourRating
Leather armour+1
Studded leather armour+2
Scale mail armour+3
Chain mail armour+4
Plate mail armour+5
Field plate armour+6
Full plate armour+7

武器[编辑]

武器帮你杀人:)

WeaponRating
Knife+2
Club+3
Spear+4
Axe+5
Long sword+6
Two hand sword+7

死亡[编辑]

战斗的结果通常是死亡。 当你杀死一个生物时会出现一具尸体。如果你打开它,你就能得到里面的东西,通常是食物、黄金、武器、盾牌或盔甲。
每次你杀死一个怪物你都会获得经验值。 当你被杀的时候,你又出现在城市里,如果你有羊的话,你就会失去你的羊。
同样为了惩罚死亡,你将移除10%的经验值,如果是这样的话,你将移除生命值,ATK和防御值会因为等级提升而增加。


逻辑设计[编辑]

使Stendhal移动的关键是添加操作。 正如我们所看到的,每个实体都有一个可以执行的操作列表。让我们看看它们,研究它们之间的相互作用。

移动[编辑]

移动动作可以理解为两个动作: 向下键时向左、向右、向上或向下移动
这个动作允许控制玩家的头像使用我们的键盘,这是街机/冒险游戏风格,如任天堂塞尔达。

此操作应具有下一组属性:

  • dir 化身移动的方向。
  • speed 阿凡达的速度

我们想干什么就干什么。最后执行的动作将是唯一一个真正改变方向和速度的动作。 我们将让我们的头像以完整的单位在世界上移动,客户将平滑它,使它看起来头像移动了一点。我们也希望我们的头像只移动N,W,S和E方向,所以我们禁用对角线移动。 我们的世界将有物体,如果玩家与物体碰撞,它将停止。
一般来说,玩家、生物和其他物体是不可移植的。

移动到一个位置[编辑]

这个动作允许用鼠标控制游戏的头像,所以我们可以点击(或双击)移动到鼠标点击的位置。这种模式是伟大的一个更轻松的冒险游戏风格,如生物制品巴尔杜尔之门。 此操作应具有下一组属性:

  • x avatar所需的x坐标
  • y avatar所需的y坐标

我们只能有一个此类操作,只有最新的操作才被视为有效。这个动作被任何其他动作取消,比如移动,攻击,面对。。。 这两个移动动作都将在每一个回合结束时,移动化身,如果可能的话,在x轴上移动dx单位,在y轴上移动dy单位。 如果阿凡达在移动时与某物碰撞,dx和dy将变为0。

面对[编辑]

这个动作对于游戏的社交方面来说是很有用的;当你说话的时候,面对你说话的人通常也是很好的。所以面部动作可以让我们的角色看到我们告诉它的方向:左,右,上或下。

聊天[编辑]

这个动作是任何像MORPG这样的社交游戏的基础。 此操作应具有下一组属性:

  • text 玩家要说的文字

由于Arianne框架不可能创建一个叫喊或低语动作,当你说话时,你为区域内的每个人说话,这就是为什么区域设计对于实现良好的游戏性是非常重要的。

攻击[编辑]

这个动作是游戏的核心,很多玩家都会考虑到游戏的乐趣。所有的战斗都是由RP游戏系统控制的,在本页的RP部分有详细说明。 现在战斗有一些限制:

  • 无PvP(玩家对玩家)
  • 不能攻击自己
  • 不能攻击NPC

我们想保留一个良好的游戏体验,所以我们已经删除了玩家对玩家的战斗。
我们只能有一个攻击行动,所以明智地选择你的目标,这个行动被任何其他行动取消,除了 ChatHeal.

此操作应具有下一组属性:

  • target 我们攻击的玩家的object.ID 。

这个动作要求动作的目标是“接近”我们的化身。接近意味着目标的化身必须与我们的化身相撞。 攻击动作具有跟踪目标的隐含含义。

评估[编辑]

从Sourceforge下载文件[编辑]

使用CVS访问[编辑]

部署[编辑]

客户端[编辑]

服务器[编辑]

{{#breadcrumbs: Marauroa | Using | How to write games}}