请教巨大 if elseif 程序的优雅组织方式

2020-12-09 22:41:33 +08:00
 bbxiong

程序功能是使用 lua 大漠插件模拟执行一些简单操作,开启游戏后使用图片查找方式挨个判断当前页面进行操作. 现在使用的 if elseif 结构代码行数已经达到 200+行,还在增加. 1.前面已经过去的游戏画面继续判断比较耗时(不重要) 2.代码看起来非常臃肿

请教类似逻辑有没有优秀的组织方式?纯代码的组织,不是类似下面使用 table 表的配置类方案(已经在使用中) 排除使用 table 如: 配置_游戏画面识别操作 = { {图片名 = "开始_结束比赛.bmp",点击 = {x=1147,y=547}}; {图片名 = "开始_结束比赛_是否退出.bmp",点击 = {x=384,y=375}}; }

if game.是游戏界面("开始_结束比赛.bmp") then
    ldm.点击坐标(1147,547)
elseif game.是游戏界面("开始_结束比赛_是否退出.bmp") then
    结束开始的比赛 = true
    ldm.点击坐标(384,375)
elseif game.是游戏界面("进入等待界面.bmp") then
    ldm.KeyPress(32)
elseif game.是游戏界面("配置加载.bmp|配置加载 2.bmp|配置_个人设置.bmp") then
    game.鼠标居中()
    game.回车()
elseif game.是游戏界面("配置加载_继续按钮.bmp|配置加载_继续按钮 2.bmp") then
    ldm.点击坐标(160,630)
elseif game.是游戏界面("广告接受.bmp|广告接受 2.bmp") then
    game.鼠标居中()
    game.回车()
...
   200+行
end   
5245 次点击
所在节点    Python
26 条回复
lithbitren
2020-12-10 18:37:25 +08:00
动态语言分支超过 3 个就比不上表驱动的速度了,静态语言的条件分支性能上限在十几个到几十个不等
bbxiong
2020-12-10 22:21:36 +08:00
```lua
{
{图片名 = "开始_结束比赛.bmp",点击 = {x=1147,y=547}};
{图片名 = "开始_结束比赛_是否退出.bmp",点击 = {x=384,y=375}};
}
```
目前为止只有用 table 配置的方式最简单...
bianz103
2020-12-11 07:34:40 +08:00
采用 for 循环代替呢
Cloutain
2020-12-11 08:59:43 +08:00
switch case 即可,本质就是建表
Leigg
2020-12-11 09:27:05 +08:00
不嵌套还好
jwchen
2020-12-11 17:10:50 +08:00
搞个字典吧 k:func
还可以改成工厂方法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/733921

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX