中文编程入门(Lua5.4.6中文版)第六章 Lua 运算符

在网游的战斗世界里,我们同样可以借用各种"技能"来理解Lua语言中的运算符。想象一下这些运算符就像是英雄们施展的不同招式:

算术招式

在网游的经济系统中,假设你操控的英雄A拥有500金币,英雄B则有1000金币。

  • 加法:A与B金币相加(A + B),相当于双方金币合并,结果是1500金币。
  • 减法:A从B那里扣除金币(A - B),那么A将获得额外的500金币,而B剩余500金币。
  • 乘法:A与B通过合作任务共同赚取金币(A * B),团队总共可以获得500,000金币的收益。
  • 除法:B平分给A一部分金币(B / A),每位英雄按照当前比例分配的话,A可得2份金币(因为1000 ÷ 500 = 2)。
  • 取余:若B使用A的一件价值恰好能用完其金币的装备(B % A),由于B的金币多于A,在这个例子中没有剩余零配件的情况;但若假设A有一件价值150金币的装备,那么B购买后会剩下850金币(1000 % 150 = 850)。
  • 乘幂:A提升自身能力等级到平方(A^2),这里我们可以理解为如果每1金币对应一定战斗力,那么当A将其金币翻倍时,战斗力增加至250,000(500^2)。
  • 负号:逆转A的金币增益(-A),这意味着A遭受了一次损失,金币减少500,变为-500金币(在游戏中通常不会出现负金币,此处仅为数学运算概念)。

实例

我们可以通过以下实例来更加透彻的理解算术运算符的应用:

-- 定义英雄甲和乙的金币数量
局部 甲的金币 = 500
局部 乙的金币 = 1000

-- 算术招式应用
-- 加法
局部 加法 = 甲的金币 + 乙的金币
输出("加法:", 加法) -- 输出:1500

-- 减法(这里理解为乙给甲金币)
局部 减法 = 乙的金币 - 甲的金币
输出("减法后甲的金币:", 甲的金币 + 减法) -- 输出:1000 (假设甲得到了这500金币)

-- 乘法(团队收益)
局部 乘法 = 甲的金币 * 乙的金币
输出("团队收益金币数:", 乘法) -- 输出:500000

-- 除法(平分金币)
局部 除法 = 乙的金币 / 甲的金币
输出("乙的金币是甲的:", 除法,"倍") -- 输出:2.0

-- 取余
-- 假设有一个价值150金币的装备
局部 除法 = 乙的金币 / 150
局部 取余 = 乙的金币 % 150
输出("购买",除法,"套装备后剩余金币:", 取余) -- 输出:100

-- 乘幂
局部 乘幂 = 甲的金币 ^ 2
输出("能力等级提升后的战斗力:", 乘幂) -- 输出:250000

-- 负号(损失金币)
局部 负号 = -甲的金币
输出("遭受损失后的金币数(仅作演示,游戏中通常不会有负金币):", 负号) -- 输出:-500

显示答案如下:

C:\lua> lua 算术运算.lua

加法: 1500

加法: 1500

减法后甲的金币: 1000

团队收益金币数: 500000

乙的金币是甲的: 2.0 倍

购买几套装备后剩余金币: 100

购买6.0套装备!

能力等级提升后的战斗力: 250000.0

遭受损失后的金币数(仅作演示,游戏中通常不会有负金币):

关系对决

设定英雄A的生命值为250点,英雄B的生命值为200点。

  • 等于:判断A和B生命值是否相同(A == B),结果显示不相等。
  • 不等于:检测A与B生命值是否不同(A ~= B),确实如此。
  • 大于:比较A的生命值是否高于B(A > B),答案是肯定的。
  • 小于:看A的生命值是否低于B(A < B),这不成立。
  • 大于等于:查看A的生命值是否不低于B(A >= B),本例中不满足条件。
  • 小于等于:确认A的生命值是否不高于B(A <= B),结论正确。

逻辑联手

以两位英雄的状态为例,A处于战斗状态(true),B暂时撤退(false)。

  • 逻辑与:如果A和B同时作战(A and B),协同攻击无法触发。

  • 逻辑或:只要A或B中有任意一位在战场(A or B),即可保持攻势。

  • 逻辑非:否定A和B同时作战的情况(not(A and B)),这个否定成立。

    A 与 B
    A 或 B
    非 (A 与 B)

连接与计数魔法

两个英雄口号相连形成更强的战意:

  • .. 连接符:英雄A的口号"英雄"与英雄B的口号"无敌"组合起来,形成合力口号"英雄无敌"。

  • # 长度探测:测量口号"Battle!"(#"Battle!")或队伍名称"Test"(#"Test")的字符数量。

    输出("英雄".."无敌") --- 结果是"英雄无敌"
    输出(#"Battle!") --- 结果是5
    输出(#"Test") --- 结果是4

操作符优先级

就像英雄释放技能的顺序影响着战场局势一样,在Lua中运算符也有执行优先级:

  • 先施展最高阶的强化魔法(指数运算符^)
  • 接着单体强化(逻辑非not、负号-)
  • 再来是群体BUFF叠加(算术运算符*、/、+、-、..)
  • 最后是位置关系调整(关系运算符<、>、<=、>=、~=、==)
  • 组合技生效规则(and、or)

通过实战演练(示例代码运行),我们可以看到不同的计算策略如何影响最终的结果数值,就如同英雄们根据战场形势采取不同的战术配合。

相关推荐
小白不太白9503 分钟前
设计模式之 模板方法模式
java·设计模式·模板方法模式
Tech Synapse5 分钟前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
xoxo-Rachel12 分钟前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
乌啼霜满天24914 分钟前
JDBC编程---Java
java·开发语言·sql
色空大师26 分钟前
23种设计模式
java·开发语言·设计模式
闲人一枚(学习中)27 分钟前
设计模式-创建型-建造者模式
java·设计模式·建造者模式
Bruce小鬼39 分钟前
QT文件基本操作
开发语言·qt
2202_754421541 小时前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
蓝染-惣右介1 小时前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis