滤油机|润滑油滤油机|供应真空滤油机|真空滤油机|滤油机厂家|板框滤油机|高效真空滤油机|液压油滤油机|透平油滤油机|绝缘油变压器油滤油机|净油机|重庆滤油机

滤油机|润滑油滤油机|供应真空滤油机|真空滤油机|滤油机厂家|板框滤油机|高效真空滤油机|液压油滤油机|透平油滤油机|绝缘油变压器油滤油机|净油机|重庆滤油机

« 2009-03-03 | first blood.成长过程的装备更换 修理交通省钱窍门 »

$StrMod['mprenew']&gt

VBA是EXCEL自带的一种脚本语言,是微软开放给用户对EXCEL二次开发的产物.VBA语言形式就是VB语言,借助VBA你可以在EXCEL里进行代码编写,甚至可以调用各种强大的API功能.
那么VBA对我们的数值策划有什么好处呢?很多数值策划都认为VBA根本可以不必使用,为什么呢?因为他们都觉得直接在EXCEL的单元格中用"="调用各种公式的参数即可.但我并不看好这种方式,因为使用多了这种调用方式之后,一旦整个表格的结构复杂之后,数值调试人员甚至都会忘记自己当初为什么要这么设计公式了.
我举个例子,例如EXCEL里有这样一个公式:
=(((W8+I8)*宏观数据!$B$7/4+P8)-AG8)*IF((3+E8/25)*(1+B8/2)>25,25,(3+E8/25)*(1+B8/2))
嗯,初看这个公式就很复杂,且不要说更复杂的公式我们该怎么办.类似这种公式,一旦过了一段时间之后(哪怕就上周你设计的这个公式),我们都会忘记这个公式当初是用来做什么的了.如果需要知道这个公式是做什么的,那么我们就要去研究研究这个公式的参数都是哪些了,做这类事情确是很花时间的,比如我想知道其中的W8是什么参数,那么我就要在表格里找到W8的单元格,然后再看看这个单元格是什么数据才能明白,等到我把这个公式弄清楚是什么之后,自己的脑袋瓜子也有些累了(为什么累? 这还用说,当然是眼睛找数据找到累啊hh ),而且何况还有一整个表格的公式都可能随时都要我去重新温故一下呢 ,经常做这种无谓的劳动是很损害脑细胞的,也会使得我们调整优良平衡性的决心慢慢消退.
这个时候我们再来看看如何用VBA写公式吧,VBA的好处就是可以将这些公式写到一个VB函数里,然后在表格中直需要调用相应的参数mm单元格即可.而下次你就不必经常修改表格里的数据了,也不必再去因为改变了公式而将表格里的所有公式都重新修改一遍(就因为表格里的数值公式都是单独的),同时最重要就是你也不必找公式的参数是做什么的了,因为在函数的参数申明中,写的一清二楚!
我们现在可以利用VBA写的函数,做出一个公用的函数,这个函数里缀入了你所设计的公式,如果你想要修改公式的计算方法,那么很简单,只需要修改函数里的公式即可,EXCEL里的数据,我们根本不必经常去管他!
最后给出2个EXCEL的VBA函数给大家参考参考:
'蛮力转物理最小伤害
Public Function PowerToMinPhyDmg(varPower, varCD) As Integer
PowerToMinPhyDmg = Int(varPower * Sheets("属性系数").Cells(1, 3) * AttackCoolDownToAttackMod(varCD))
End Function
'蛮力转物理最大伤害
Public Function PowerToMaxPhyDmg(varPower, varCD) As Integer
PowerToMaxPhyDmg = Int(varPower * Sheets("属性系数").Cells(2, 3) * AttackCoolDownToAttackMod(varCD))
End Function
以上几个函数都是基本属性转战斗属性的公式,比如1点蛮力=3点最小伤害之类的转换.PowerToMinPhyDmg这个函数就是让你填入蛮力的数值,得到最小伤害的转换值,如果将来你不想让1点蛮力=3点最小伤害,而是想让1点蛮力=5点最小伤害的话,那么就可以在这里进行修改.是的,以后修改起来就这么简单啦!
我们甚至可以将战斗相关的公式也写到VBA函数中:
'计算命中概率的函数
Public Function HitToHitRate(varAttLv, varDefLv, varHit, varHedge) As Single
Dim result As Single
Dim LvModify As Single
If varHit = 0 And varHedge = 0 Then
varHit = 1
varHedge = 1
End If
result = (varHit / (varHit + varHedge * 0.35)) * (varAttLv * 1.9 / (varAttLv + varDefLv) + (varAttLv - varDefLv) / 50)
LvModify = (150 - varAttLv) / 320
result = result + LvModify
If result > 0.95 Then
result = 0.95
ElseIf result < 0.05 Then
result = 0.05
End If
HitToHitRate = result
End Function
我们想要得到某个数值所产生的命中率效果时,就可以随意的调用了.这类函数在将来进行战斗模拟器的设计时,也会十分方便.
除了我们修改公式方便以外,我们甚至可以将各种公式函数分门别类,方便查找,如下图:
左边的模块就是类别的划分.我们将基本的数值计算、平衡值、人物平衡的计算、怪物平衡的计算、装备平衡的计算等,都分为几个类别,即方便自己查阅,即时比分,也方便哪天一旦你需要接手其他的项目时,可以方便的移交你的工作.
PS:除此之外,这种方法也减少了EXCEL里的公式长度和复杂性,可以对EXCEL文件的大小进行优化.
最后的最后show一下最近写的基本属性函数,很方便,修改每个基本属性增加的战斗属性值之后,可以自动在界面显示基本属性的效果,这类函数甚至可以写到游戏里的客户端、服务端哦,可以即时改变游戏中的平衡性,而不必更新版本:
以下是属性基本系数-
//力量
$StrMod = Array(
'atk' => 9,
'def' => 0,
'matk' => 0,
'flee' => 0,
'maxhp' => 0,篮球比分,
'hprenew' => 0,
'maxmp' => 0,
'mprenew' => 0
);
$StrInfo = "每1点力量:".
(($StrMod['atk']>0) ? ("\n - 增加".$StrMod['atk']."点攻击"
(($StrMod['def']>0) ? ("\n - 增加".$StrMod['def']."点防御"
(($StrMod['matk']>0) ? ("\n - 增加".$StrMod['matk']."点魔攻"
(($StrMod['flee']>0) ? ("\n - 增加".$StrMod['flee']."点回避"
(($StrMod['hit']>0) ? ("\n - 增加".$StrMod['hit']."点命中"
(($StrMod['maxhp']>0) ? ("\n - 增加".$StrMod['maxhp']."点最大生命值"
(($StrMod['hprenew']>0) ? ("\n - 每回合恢复".$StrMod['hprenew']."点生命值"
(($StrMod['maxmp']>0) ? ("\n - 增加".$StrMod['maxmp']."点最大魔法值"
(($StrMod['mprenew']>0) ? ("\n - 每回合恢复".$StrMod['mprenew']."点魔法值"
//体质
$VitMod = Array(
'atk' => 0,
'def' => 1.5,
'matk' => 0,
'flee' => 0,
'maxhp' => 10,
'hprenew' => 0.05,
'maxmp' => 0,
'mprenew' => 0
);
$VitInfo = "每1点体质:".
(($VitMod['atk']>0) ? ("\n - 增加".$VitMod['atk']."点攻击"
(($VitMod['def']>0) ? ("\n - 增加".$VitMod['def']."点防御"
(($VitMod['matk']>0) ? ("\n - 增加".$VitMod['matk']."点魔攻"
(($VitMod['flee']>0) ? ("\n - 增加".$VitMod['flee']."点回避"
(($VitMod['hit']>0) ? ("\n - 增加".$VitMod['hit']."点命中"
(($VitMod['maxhp']>0) ? ("\n - 增加".$VitMod['maxhp']."点最大生命值"
(($VitMod['hprenew']>0) ? ("\n - 每回合恢复".$VitMod['hprenew']."点生命值"
(($VitMod['maxmp']>0) ? ("\n - 增加".$VitMod['maxmp']."点最大魔法值"
(($VitMod['mprenew']>0) ? ("\n - 每回合恢复".$VitMod['mprenew']."点魔法值"
//敏捷
$AgiMod = Array(
'atk' => 3,
'def' => 0,
'matk' => 0,
'flee' => 4,
'maxhp' => 0,
'hprenew' => 0,
'maxmp' => 0,
'mprenew' => 0
);
$AgiInfo = "每1点敏捷:".
(($AgiMod['atk']>0) ? ("\n - 增加".$AgiMod['atk']."点攻击"
(($AgiMod['def']>0) ? ("\n - 增加".$AgiMod['def']."点防御"
(($AgiMod['matk']>0) ? ("\n - 增加".$AgiMod['matk']."点魔攻"
(($AgiMod['flee']>0) ? ("\n - 增加".$AgiMod['flee']."点回避"
(($AgiMod['hit']>0) ? ("\n - 增加".$AgiMod['hit']."点命中"
(($AgiMod['maxhp']>0) ? ("\n - 增加".$AgiMod['maxhp']."点最大生命值"
(($AgiMod['hprenew']>0) ? ("\n - 每回合恢复".$AgiMod['hprenew']."点生命值"
(($AgiMod['maxmp']>0) ? ("\n - 增加".$AgiMod['maxmp']."点最大魔法值"
(($AgiMod['mprenew']>0) ? ("\n - 每回合恢复".$AgiMod['mprenew']."点魔法值"
//智慧
$KnoMod = Array(
'atk' => 0,
'def' => 0,
'matk' => 6,
'flee' => 0,
'maxhp' => 0,
'hprenew' => 0,
'maxmp' => 2.5,
'mprenew' => 0.05
);
$KnoInfo = "每1点智慧:".
(($KnoMod['atk']>0) ? ("\n - 增加".$KnoMod['atk']."点攻击"
(($KnoMod['def']>0) ? ("\n - 增加".$KnoMod['def']."点防御"
(($KnoMod['matk']>0) ? ("\n - 增加".$KnoMod['matk']."点魔攻"
(($KnoMod['flee']>0) ? ("\n - 增加".$KnoMod['flee']."点回避"
(($KnoMod['hit']>0) ? ("\n - 增加".$KnoMod['hit']."点命中"
(($KnoMod['maxhp']>0) ? ("\n - 增加".$KnoMod['maxhp']."点最大生命值"
(($KnoMod['hprenew']>0) ? ("\n - 每回合恢复".$KnoMod['hprenew']."点生命值"
(($KnoMod['maxmp']>0) ? ("\n - 增加".$KnoMod['maxmp']."点最大魔法值"
(($KnoMod['mprenew']>0) ? ("\n - 每回合恢复".$KnoMod['mprenew']."点魔法值"
//耐力
$DexMod = Array(
'atk' => 0,
'def' => 6,
'matk' => 0,
'flee' => 2,
'maxhp' => 0,
'hprenew' => 0,
'maxmp' => 0,
'mprenew' => 0
);
$DexInfo = "每1点耐力:".
(($DexMod['atk']>0) ? ("\n - 增加".$DexMod['atk']."点攻击"
(($DexMod['def']>0) ? ("\n - 增加".$DexMod['def']."点防御"
(($DexMod['matk']>0) ? ("\n - 增加".$DexMod['matk']."点魔攻"
(($DexMod['flee']>0) ? ("\n - 增加".$DexMod['flee']."点回避"
(($DexMod['hit']>0) ? ("\n - 增加".$DexMod['hit']."点命中"
(($DexMod['maxhp']>0) ? ("\n - 增加".$DexMod['maxhp']."点最大生命值"
(($DexMod['hprenew']>0) ? ("\n - 每回合恢复".$DexMod['hprenew']."点生命值"
(($DexMod['maxmp']>0) ? ("\n - 增加".$DexMod['maxmp']."点最大魔法值"
(($DexMod['mprenew']>0) ? ("\n - 每回合恢复".$DexMod['mprenew']."点魔法值"
我的相关日志:
2009-06-18 | 你为游戏平衡做了数值生成器没?
2009-06-11 | 让大家见识一下新一代分析源代码生成流程图的东东吧
2009-06-04 | AION的战斗系统特色:移动时的上下左右箭头
2009-05-23 | 系统策划如何将功能列的更完整?
2009-05-15 | 重拾记忆:AI系统概述
2009-03-24 | 网页游戏 Ogame 公式一览
2009-03-23 | 卓越之剑伤害系统
2009-03-23 | 战斗流程及相关公式说明
2009-03-23 | 《泰坦之旅不朽王座》1.1mm伤害教科书
2009-02-06 | 让玩家做NPC,让玩家成为我们的一员!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 100427

Copyright 滤油机|润滑油滤油机|供应真空滤油机|真空滤油机|滤油机厂家|板框滤油机|高效真空滤油机|液压油滤油机|透平油滤油机|绝缘油变压器油滤油机|净油机|重庆滤油机 Your WebSite. Some Rights Reserved.