找回密码
 点一下
查看: 2390|回复: 20

关于一个技能的问题

[复制链接]
发表于 2009-11-19 18:28:27 | 显示全部楼层 |阅读模式
最近突然想到一个技能 就是说目标生命尾数是7的情况下(如:337)对目标造成7、77、777或者7777点伤害
那么判断目标尾数是否为7的条件是什么 改怎么做呢?
发表于 2009-11-19 18:38:14 | 显示全部楼层
用mod求余数
回复

使用道具 举报

发表于 2009-11-19 21:20:16 | 显示全部楼层
直接捕捉生命值不行吗  瞬间伤害的话这个很容易吧
回复

使用道具 举报

发表于 2009-11-19 22:41:36 | 显示全部楼层
只是尾数的话要取余数计算的,不然你就把7,17,27……之类的全部拿来判断罢。
那就生不如死
回复

使用道具 举报

发表于 2009-11-19 22:47:00 | 显示全部楼层
貌似mod不能用T来取。只能用Jass。
如果不怕累的话就取生命值的整数,然后一步一步小心判断减掉万位的,减掉千位的,减掉百位的,减掉十位的,就可以判断个位数了。很欢乐对不对。
回复

使用道具 举报

发表于 2009-11-20 13:14:57 | 显示全部楼层
引用第4楼alexries于2009-11-19 22:47发表的  :
貌似mod不能用T来取。只能用Jass。
如果不怕累的话就取生命值的整数,然后一步一步小心判断减掉万位的,减掉千位的,减掉百位的,减掉十位的,就可以判断个位数了。很欢乐对不对。

地精大叔。。老狼的UI MOD可以用T来弄 ···
回复

使用道具 举报

发表于 2009-11-20 14:53:15 | 显示全部楼层
大叔。
恩恩这样就欢乐多了,额感觉我从来没有注意过这功能。在原版里面找不到以后我就开始潇洒地用上自定义代码。
回复

使用道具 举报

发表于 2009-11-20 14:59:44 | 显示全部楼层
普通WE本来就有取余数功能。要什么UI。


只是楼主啊,你这个提问本身就是有问题的。


“生命尾数是7”在技术上讲,出现的概率极少,甚至对英雄来说几乎是不可能出现的。因为两个原因,

1生命值这个东西是实数,而不是整数,它只是显示为整数而已。
2通常单位尤其是英雄,由于有自己的生命恢复能力,因此生命值一直都是在变化的,只是界面显示值的刷新频率较慢而已。

因此,要做这种效果,首先第一步得把生命值转化为整数,忽略掉小数部分才可行。
回复

使用道具 举报

发表于 2009-11-20 15:08:43 | 显示全部楼层
GUI界面下没有见过……应该罢?
回复

使用道具 举报

 楼主| 发表于 2009-11-20 16:36:16 | 显示全部楼层
用MOD以后我又困惑了。如果说被除数是需要判断的生命值(定为A),余数是7,除数怎么求?假设设除数为X,那么结果是A/X -7。之后我就困惑了。那么应该怎么判断?
回复

使用道具 举报

发表于 2009-11-20 16:44:16 | 显示全部楼层
你要每个数位弄个,我就用假设你的生命最多万位罢。那就首先求出10000的余数,之后用这个余数求1000的余数,如此如此。最后剩下就是个位数。
回复

使用道具 举报

发表于 2009-11-20 16:49:41 | 显示全部楼层
lz不会不知道取模的含义吧?就是取余数的意思,数学里初中就应该学到了
就是判断生命值 mod 10,不过就像头目说的,生命值是实数,你可以先转换为整数再取模
回复

使用道具 举报

发表于 2009-11-20 16:52:15 | 显示全部楼层
阿,是mod10……
回复

使用道具 举报

发表于 2009-11-20 17:00:17 | 显示全部楼层
即使是jass,也不支持原生的mod,而是用基本的运算组成BJ函数实现的,所以其实无所谓咋写
[codes=jass]
function ModuloInteger takes integer dividend, integer divisor returns integer
    local integer modulus = dividend - (dividend / divisor) * divisor

    // If the dividend was negative, the above modulus calculation will
    // be negative, but within (-divisor..0).  We can add (divisor) to
    // shift this result into the desired range of (0..divisor).
&#160;&#160;&#160;&#160;if (modulus < 0) then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set modulus = modulus + divisor
&#160;&#160;&#160;&#160;endif

&#160;&#160;&#160;&#160;return modulus
endfunction
//--
function ModuloReal takes real dividend, real divisor returns real
&#160;&#160;&#160;&#160;local real modulus = dividend - I2R(R2I(dividend / divisor)) * divisor

&#160;&#160;&#160;&#160;// If the dividend was negative, the above modulus calculation will
&#160;&#160;&#160;&#160;// be negative, but within (-divisor..0).&#160;&#160;We can add (divisor) to
&#160;&#160;&#160;&#160;// shift this result into the desired range of (0..divisor).
&#160;&#160;&#160;&#160;if (modulus < 0) then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set modulus = modulus + divisor
&#160;&#160;&#160;&#160;endif

&#160;&#160;&#160;&#160;return modulus
endfunction
[/codes]
回复

使用道具 举报

 楼主| 发表于 2009-11-20 17:01:53 | 显示全部楼层
汗。。要个位十位百位反复取啊。。。
那么谢谢各位了!
回复

使用道具 举报

发表于 2009-11-20 17:04:39 | 显示全部楼层
引用第14楼knife12590于2009-11-20 17:01发表的  :
汗。。要个位十位百位反复取啊。。。
那么谢谢各位了!
不是啦……我搞错了,是取10位的啦……
回复

使用道具 举报

 楼主| 发表于 2009-11-20 19:25:20 | 显示全部楼层

回 13楼(westwood) 的帖子

integer modulus = dividend - (dividend / divisor) * divisor
我虽然不是太懂,但这个不成立的吧
modulus = dividend - (dividend / divisor) * divisor
modulus = 必然等于0
后面被抵消了
回复

使用道具 举报

发表于 2009-11-20 19:28:38 | 显示全部楼层

Re:回 13楼(westwood) 的帖子

引用第16楼knife12590于2009-11-20 19:25发表的 回 13楼(westwood) 的帖子 :
integer modulus = dividend - (dividend / divisor) * divisor
我虽然不是太懂,但这个不成立的吧
modulus = dividend - (dividend / divisor) * divisor
modulus = 必然等于0
后面被抵消了
你错了。
jass中的整数除法是这样的:
如果整除则结果正确
如果没有整除,则结果为减去余数之后再除的结果。
比如
47 / 4 = 11 ... 3
在jass里47/4结果为11。
因为整数本来就无法存储剩余的小数部分。
相当于把正确结果的小数部分都忽略了。
回复

使用道具 举报

 楼主| 发表于 2009-11-20 19:42:20 | 显示全部楼层
额,明白了
回复

使用道具 举报

发表于 2009-11-20 19:46:30 | 显示全部楼层
“相当于把正确结果的小数部分都忽略了。”
根本和四舍五入没关系。
只要有小数部分全部舍掉。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-26 21:46 , Processed in 0.050872 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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