5.2.逻辑值的运算
如果需要同时判定多个条件成立,几个条件就套上几个if?如果需要多个条件任一成立,几个条件就写几个else,然后在里面写相同语句?乃们out了!其实许多条件也是可以合并成一个条件的
需要用到的就是逻辑运算符:且(&&)、或(||)和非(!)
且就是数字7上面那个符号打两遍,或就是右shift上面那个按键+shift打出来的(绝对值括号),非就是感叹号(全都是半角)
且和或用于连接两个逻辑值,放于两个逻辑值之间;非放在一个逻辑值的前面,用于否定这个逻辑值(真假颠倒)
5.2.1.几个逻辑运算的法则
1.!!a就是a
2.!(a&&b)就是(!a)||(!b)
3.!(a||b)就是(!a)&&(!b)
例题1:输出一个逻辑值M,在a和b同时不成立的前提下要求满足以下三点中任意两点便成立:①b和c任一成立②d和e同时成立③f成立
解1:M=(!a)&&(!b)&&(((b||c)&&d&&e)||(f&&d&&e)||((b||c)&&f))
评价:简单粗♂暴,适用于对多重括号很熟练的兄贵们
解2:int m=0;
if(b||c)m++;
if(d&&e)m++;
if(f)m++;
M=(!(a||b))&&(m>=2)
评价:略运用了化简的技巧,适用于懒♂的兄贵们
6.反击时刻!
现在让我们把这四条组成一个给附近300像素以内NPC上霜火debuff的效果吧~
6.1.思路(伸手党可以跳过这一段直接复制后方的成品,感兴趣的还是看一下吧~)
先遍历所有NPC记作n:foreach(NPC n in Main.npc)
操♂作开始,首先是确定范围:
NPC所在的矩形是new Rectangle((int)n.position.X,(int)n.position.Y,n.width,n.height)
玩家上下左右300像素的矩形是new Rectangle((int)p.position.X-300,(int)p.position.Y-300,p.width+600,p.height+600)
接下来是判定相交同时确保n还活着,而且是敌对NPC:
if(n.active&&!n.friendly&&new Rectangle((int)n.position.X,(int)n.position.Y,n.width,n.height).Intersects(new Rectangle((int)p.position.X-300,(int)p.position.Y-300,p.width+600,p.height+600)))
最后嘛……尝尝来自北国的FFF团精神吧!
n.AddBuff(44,300);
6.2.成品代码:
foreach(NPC n in Main.npc){
if(n.active&&!n.friendly&&new Rectangle((int)n.position.X,(int)n.position.Y,n.width,n.height).Intersects(new Rectangle((int)p.position.X-300,(int)p.position.Y-300,p.width+600,p.height+600))){
n.AddBuff(44,300);
}
}
6.3.效果图:
BURN BABY,BURN!
嗯……本期教程就此结束,下期将是:【猎奇篇:读取操作】,如何用饰品给予玩家可控的额外火力,尽请期待~
附思考题:
如何做出十动然拒徽章的效果?(排除危险NPC和proj到安全距离以外)(neta自拥着转)
提示:
①proj对应的组是Main.projectile,proj的类型是Projectile
②proj和NPC一样有位置和宽高数据,位置可以被任意操作
③敌对NPC特征是friendly逻辑值为假,敌对proj特征是hostile逻辑值为真
【猎奇篇:读取操作】
前言:
其实这一篇严格地说并不是为增强火力而存在的;换句话说,它不只是为增强火力存在的。
只要读取了电脑前玩家的操作,加上自定的一些代码,玩家就可以做到扩展整个人物的功能,就像K键召唤所有BOSS,F键瞬移,等等……
下面是正题:
1.读取玩家行动
读取玩家行动,其实只需熟记表示玩家状态的几个逻辑值,就能对玩家相应的行动做到加强或改变;平时需要用的基本就是这几条了:
controlLeft;控制向左
controlRight;控制向右
controlUp;控制向上
controlDown;控制向下
controlJump;控制跳
controlHook;控制钩子