设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1981|回复: 2
打印 上一主题 下一主题

[已经解决] 求教自动战斗的评价机制

[复制链接]

Lv1.梦旅人

梦石
0
星屑
105
在线时间
297 小时
注册时间
2009-1-7
帖子
216
跳转到指定楼层
1
发表于 2014-11-6 11:18:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
在Game_Action类的evaluate和evaluate_item方法用来计算技能/物品的使用评分,用来进行自动战斗。
脚本如下:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 行动的价值评价(自动战斗用)
  3.   #    自动设置 @value 和 @target_index 。
  4.   #--------------------------------------------------------------------------
  5.   def evaluate
  6.     @value = 0
  7.     evaluate_item if valid?#如果可以行动则开始计算评价
  8.     @value += rand if @value > 0#评价为正数时加上一个随机数(0-1)
  9.     self#[color=Red][b]返回自身??????[/b][/color]
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   # ● 技能/物品的评价
  13.   # 按我的理解:评价只根据目标数量和伤害来进行计算,当目标为全体时,每一个目标都会给评价加分;当目标为单体时,则评分为当前目标的分数。
  14.   #--------------------------------------------------------------------------
  15.   def evaluate_item
  16.     item_target_candidates.each do |target|#对每一个技能的候选目标进行获取
  17.       value = evaluate_item_with_target(target)#对指定的目标计算评价
  18.       if item.for_all?#如果技能作用于全体
  19.         @value += value#将计算得来的评价累加到已有评价
  20.       elsif value > @value#或者如果计算出来的评价大于已有评价
  21.         @value = value#将已有评价重新赋值为计算出的评价
  22.         @target_index = target.index#技能目标赋值为当前计算的目标
  23.       end
  24.     end
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 技能/物品的评价(对指定目标)
  28.   #--------------------------------------------------------------------------
  29.   def evaluate_item_with_target(target)
  30.     target.result.clear#清除行动结果
  31.     target.make_damage_value(subject, item)#对目标计算伤害,不会造成伤害
  32.     if item.for_opponent?#判断技能是否对敌人有效
  33.       return target.result.hp_damage.to_f / [target.hp, 1].max#将目标受到的伤害经过计算后返回评价。当伤害越高,目标的生命值越低,评价越高
  34.     else#如果技能不是对敌人有效(对队友有效的情况)
  35.       recovery = [-target.result.hp_damage, target.mhp - target.hp].min#计算目标实际受到的治疗量。治疗溢出忽略不计。
  36.       return recovery.to_f / target.mhp#将治疗量进行计算后返回评价。当治疗越高,目标的最大生命值越低,评价越高。
  37.     end
  38.   end

简而言之:评价计算的机制是:无论是单体技能还是群体技能,都会对每一个目标计算评价,在最后进行累加(单体技能只有一个目标,因此没有累加)。目标的评价由伤害/治疗决定,并且忽略溢出。因此,伤害/治疗越高,目标生命值/最大生命值越低,评价越高。对于伤害技能而言,评价高表示该技能容易一击杀死敌人;对于治疗技能而言,评价高表示该技能容易一击回满状态。但是过高的评价会造成技能浪费。

以上就是我根据脚本理解而来的系统评价行动的机制,不知道是不是正确的,希望各位指教。

另:脚本中我有注释了一行红色加粗的文字,我暂时不知道这句话的意义。望知道的告知!

点评

什么?在脚本中无法定义文字样式?  发表于 2014-11-6 11:19
游戏群组:https://rpg.blue/forum.php?mod=group&fid=565在这里你可以看到我在制作游戏过程中分享的内容。

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2014-11-6 12:39:02 | 只看该作者
Game_Actor 里面
  1.   def make_action_list
  2.     list = []
  3.     list.push(Game_Action.new(self).set_attack.evaluate)
  4.     usable_skills.each do |skill|
  5.       list.push(Game_Action.new(self).set_skill(skill.id).evaluate)
  6.     end
  7.     list
  8.   end
复制代码
这下你知道 evaluate 返回 self 的意义了吗?

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

故九江太守

梦石
0
星屑
623
在线时间
2166 小时
注册时间
2012-12-5
帖子
4464
3
发表于 2014-11-6 12:41:39 | 只看该作者
rand是随机数
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-15 05:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表