首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua:着色“胜利”状态失败

Lua:着色“胜利”状态失败
EN

Stack Overflow用户
提问于 2014-10-25 16:46:21
回答 1查看 34关注 0票数 0

我已经用了将近两年的时间了,我似乎不明白为什么它不适合着色。这是整个函数,但是您将看到下面没有工作的核心部分。

代码语言:javascript
复制
function showscoreboard()
    local function len(arg)
            return string.len(arg)
    end

    local function tbuff(arg)
            if len(arg) < 3 then
                    return arg.." "
            else
                    return arg
            end
    end

    local function sbuff(arg)
            if len(arg) < 2 then
                    return " "..arg
            else
                    return arg
            end
    end

    local function cteam(t,s)
                    local status = s or nil
                    local forecolor = ""

                    if status == "p" then
                            forecolor = "yellow"
                    elseif status == "w" then
                            forecolor = "cyan"
                    else
                            forecolor = "limegreen"
                    end

                    return "<color fore="..forecolor..">"..t.."</color>"
            end

    local function bcolor(i)
            local i = i or 0

            if i%2 == 1 then
                    return "maroon"
            else
                    return "navy"
            end
    end

    local scorestring = ""
    local allteams = {["ATL"]=0,["WAS"]=0,["MIA"]=0,["CLE"]=0,["OAK"]=0,["SD"]=0,["IND"]=0,["NYJ"]=0,["TEN"]=0,["SEA"]=0,["PHI"]=0,["DEN"]=0,["GB"]=0,["BUF"]=0,["TB"]=0,["PIT"]=0,["MIN"]=0,["HOU"]=0,["DET"]=0,["TB"]=0,["CAR"]=0,["CHI"]=0,["STL"]=0,["NYG"]=0,["ARI"]=0,["NO"]=0,["KC"]=0,["SF"]=0,["NE"]=0}
    local byeweek = ""

    for _,v in ipairs(nflscores.ss) do
            allteams[v[5]] = 1
            allteams[v[7]] = 1
    end

    for i,v in pairs(allteams) do
            if v == 0 then
                    byeweek = byeweek .. "<color white>".. i .."</color>\r"
            end
    end

    for i,v in ipairs(nflscores.ss) do
            local hteam = v[7]
            local ateam = v[5]
            local qgame = v[3]
            local hscre = v[8] or 0
            local ascre = v[6] or 0
            if v[4] then
                    qtime = "<color white>Time: "..v[4].."</color>"
            else
                    qtime = ""
            end
            local gposs = v[9] or ""
            if gposs ~= "" then
                    if gposs == hteam then
                            hteam = cteam(tbuff(hteam),"p")
                            ateam = cteam(tbuff(ateam))
                    else
                            ateam = cteam(tbuff(ateam),"p")
                            hteam = cteam(tbuff(hteam))
                    end
            else
                    hteam = cteam(tbuff(hteam))
                    ateam = cteam(tbuff(ateam))
            end
            if qgame == "Final" or qgame == "final overtime" then
                    if hscre > ascre then
                            hteam = cteam(tbuff(hteam),"w")
                            ateam = cteam(tbuff(ateam))
                    elseif hscre < ascre then
                            ateam = cteam(tbuff(ateam),"w")
                            hteam = cteam(tbuff(hteam))
                    else
                            ateam = cteam(tbuff(ateam))
                            hteam = cteam(tbuff(hteam))
                    end
                    if qgame == "Final" then
                            qgame = "<color cyan>F</color>"
                            elseif qgame == "final overtime" then
                                    qgame = "<color cyan>F/OT</color>"
                    end
            elseif qgame == "Pregame" then
                    qgame = "<color cyan>Pre</color>"
            elseif qgame == "Halftime" then
                    qgame = "<color white>"..qgame.."</color>"
            else
                    qgame = "<color white>Q"..qgame.."</color>"
            end
            scorestring = scorestring .. "<color back="..bcolor(i) .. ">".. v[1] .. ": " .. ateam .. "<color white>: " .. sbuff(ascre) .. "</color> <color black>@</color> " .. hteam .. "<color white>: ".. sbuff(hscre) .."</color></color> " .. qgame .. " " .. qtime .. "\r"
    end
    return scorestring .. "<color white>Bye week:</color>\r"..byeweek
end

没有正常工作的部分是:

代码语言:javascript
复制
 if hscre > ascre then
                            hteam = cteam(tbuff(hteam),"w")
                            ateam = cteam(tbuff(ateam))
                    elseif hscre < ascre then
                            ateam = cteam(tbuff(ateam),"w")
                            hteam = cteam(tbuff(hteam))
                    else
                            ateam = cteam(tbuff(ateam))
                            hteam = cteam(tbuff(hteam))
                    end

cteam的职能是:

代码语言:javascript
复制
local function cteam(t,s)
                    local status = s or nil
                    local forecolor = ""

                    if status == "p" then
                            forecolor = "yellow"
                    elseif status == "w" then
                            forecolor = "cyan"
                    else
                            forecolor = "limegreen"
                    end

                    return "<color fore="..forecolor..">"..t.."</color>"
            end

现在,它将"p“状态涂成很好的颜色。但是当状态改变为"w“时,它就失败了,而对于我的生命,我不知道为什么。我是不是遗漏了什么?这个代码会更干净吗?

编辑:我还没有发现问题的症结所在,但显然完全忽略了“score ==”w的说法。当比赛进行时,正确的控球队伍显示出黄色。然而,比赛结束后,两支球队都是青绿的,似乎没有得分比其他球队高。

第二版:第一个答案中列出的错误已经更正。不过,这并不能解决问题。我还是很茫然。

EN

回答 1

Stack Overflow用户

发布于 2014-10-25 19:05:58

没有什么是跳出的,我无法在这里进行测试,但是这里有一些需要检查的东西:

你提到了cteam在游戏中正确地工作,并且只有在游戏结束后,cteam才没有给出正确的最终结果。因此,cteam的逻辑是正确的。问题必须在调用cteam的代码中:cteam是否会以s等于“w”的形式被调用:如果hscre和ascre总是相同的话,这种情况永远不会发生。此外,在分支代码中也有一个错误,调用cteam:

代码语言:javascript
复制
if hscre > ascre then
    hteam = cteam(tbuff(hteam),"w")
    ateam = cteam(tbuff(ateam))
elseif hscre < ascre then
    ateam = cteam(tbuff(ateam,"w")) -- ERR
    hteam = cteam(tbuff(hteam))
else
    ateam = cteam(tbuff(ateam))
    hteam = cteam(tbuff(hteam))
end

标记错误的行应为:

代码语言:javascript
复制
ateam = cteam(tbuff(ateam),"w")

关于清理代码:在StackOverflow的代码评审论坛上发布您的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26564793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档