那么问题又来了:
什么是Lua里的逻辑,怎样构建技能的逻辑方式呢?
我用一个稍微复杂的技能作为例子(由于是针对逻辑,故看官不必在意是V1还是V2):
”失去手牌时,若你的手牌数为全场最少,你可以亮出牌堆顶的3张牌并获得其中一种颜色的牌,然后将剩下的牌交给一名其他角色。“
我相信绝大部分人能够轻松写出”失去手牌时“的时机,但不少人会(有一点)卡在”手牌数“为全场最少。
好,那么问题来了(我怎么又说这句话了······
):
怎么比较手牌?
搜索搜索搜索搜索搜索搜索搜索搜索搜索搜索搜索搜索搜索搜索搜索搜索搜索搜索!
经过搜索,我确定你能找到类似
local x=player:getHandcardNum()
for _,p in sgs.qlist(room:getOtherPlayers(player)) do
if p:getHandcardNum()<x then···································
之类的语句,很明显,这句就是先获取自己的手牌数,然后把其他人的手牌数一个个与自己比对。问题KO。
接下来,亮出牌堆顶的3张牌。这时候已经不用我提示该怎么做了。
你绝壁能够搜到亮牌的写法
local x= 3
local card_ids=room:getNCards(x)
room:fillAG(card_ids,nil)
local card_id=room:askForAG(player, card_ids, false, self:objectName())
从牌堆取三张,放到一个框子里,展示给自己选择。
下一步就是”我点一个颜色的牌,然后这种颜色的牌全跑到我手里“,对吧。
你也许想不到这段操作的逻辑表述,但是你可以去搜,只要有类似的表述,你就可以打开别人家的代码,看看人家是怎么实现逻辑的。
”哦~原来是这样的啊“:
local acard_ids=sgs.IntList()--这个池子放给自己的同色牌
local acard_idss=sgs.IntList()--这个池子放给别人的同色牌
--------------------------------------------嗯,我今天学会了用sgs.IntList()收集目标牌的方式
local same=sgs.Sanguosha:getCard(card_id):getColor()--原来这就是比对颜色是不是一样的东西啊!
for _,id in sgs.qlist(card_ids) do
if (sgs.Sanguosha:getCard(id)):getColor()==same then
acard_ids:append(id)--放到给自己的牌池里
for _,id in sgs.qlist(acard_ids) do
player:obtainCard(sgs.Sanguosha:getCard(id))--我拿走这些同色牌
end
else
acard_idss:append(id)--剩下的放在池子里准备给别人
end
end
干得漂亮!