虚无时间 虚无时间
第一次最大的失败
关注数: 6 粉丝数: 392 发帖数: 7,292 关注贴吧数: 66
【点灯游戏变种】MATLAB解多元一次同余方程组求助 首先说一下背景…… 目的是为了解一个游戏,之前也有人在这个吧里发过,是exponential idle一个增量小游戏的里小游戏(套娃) 它长这样:点击圆片会让它自己和周围的圆片状态发生变化,为方便举例以及后续运算,给圆片进行标号:举个例子,点击1圆片会让1,2,8,9这几个圆片状态变化,点击31则是24,25,26,30,31,32,35。 一个圆片以它的朝向作为状态,如果是2就是经典的点灯游戏了,这里的状态量则是6。 于是,为了和游戏内容契合,把朝上记为0状态,而后每瞬时针旋转π/3标记一个状态,分别是1,2,3,4,5 我们知道,经典的点灯游戏可以通过解异或方程组随后进行高斯消元来快速得到一组特解 同时因为在游戏内的需求,我们也只关注特解。 这个游戏同样可以做类似的事情,不过是从异或方程组变成了同余方程组 以上述记号继续,我们标记圆片1的点击次数为X1,而它的最终变化量为Y1,以此方法标记所有圆片 从而可以列出第一个方程,mod(X1+X2+X8+X9,6)=mod(Y1,6) 当然,这个方程也能引入一个参量Z1∈Z来写成简单的形式: X1+X2+X8+X9=6*Z1+Y1 同理,我们可以对所有圆片写出类似的方程,构成同余方程组: AX=6*Z+Y 这里A是系数矩阵,X是X1到Xn的向量,同理Z和Y 构成同余方程组之后,就可以用高斯消元来将A变成类似上三角矩阵的结构,判断解的存在情况 然后从最后一个方程开始一步步回代,就能得到一组特解了 举个例子,对于下面两个方程: a1X1+a2X2+...=6Z1+Y1,记为① b1X1+b2X2+...=6Z2+Y2,记为② 记L=lcm(a1,b1),La=L/a1,Lb=L/b1。为了方便在matlab中调用,若X1前系数小于0,则方程两边变号 我们可以用La*①-Lb*②替代②式来消去X1元,得到的式子还可以两边求模进一步简化(或者说把乘数全部塞到Z里面) 当然有时候会存在一个问题,就是在进行消元后,发现后续的方程中跳过了下一个未知元 比如消元完X1后,发现后续方程里都没有X2了,只有X3及之后的元 这时候把X2标记为自由元,然后跳过这个元继续进行消元 在方程数量和未知元数量一样的情况下,每多一个自由元,A化简到最后就会多一行0向量在底部 这时根据你的目标状态数,也就是输入的Y,可以验证方程是否有解,也就是变化后的Y对应0向量的位置上的元素是不是0 有解之后,为便利起见,将所有自由元都代入为0,然后从A中最后一个不是0向量的方程一步步代入,就能得到一组特解了 以上是我的思路,想问问大佬们是否存在矛盾,或者推论错误的地方? 因为当我实际上用MATLAB进行操作时就出现问题了…… 简单来说,就是答案对不上…… 已经逐行逐句检查了快半个月了,包括A矩阵的录入也检查了数遍,始终没能发现问题所在 而且最令我疑惑的是,这个代码应对状态数为2或者4的情况都是成立的,唯独6总是出问题…… 我会在二楼附上我的代码,也尽可能地注释了代码的含义,希望能有大佬看看哪里出了问题……
【绳索】关于绑人成功率的相关因素 首先贴灰机wiki: ' 抓捕与唤醒成功率 ' 对于成功率的判定自上而下依次进行。若对方并非主战角色,或者身前有任何队友,捕捉/唤醒便不会成功。 若对方的精纯低于玩家6点及以上,则此次捕捉/唤醒必定成功。 战败标记不足70%时必然无法成功,即在20格战斗中标记需求是14格,在30格战斗中需求是21格。 ' 成功率 = 攻击方面板四命中总和 * (基值 + (标记数量-标记需求)*基值/2 ) / 防守方面板四化解总和 * (1 + 加成) * 战斗抓捕成功率% 基值在20格战斗中是6,在30格战斗中是12。 加成指所有增加失心人救治的宝物及代步的加值之和;使用绳子时,每一品级提高15%。 某些特殊战斗抓捕成功率会锁死为0,而其他战斗抓捕成功率为1。 ' 疑问: 1.我仔细看了一下wiki中关于面板命中/化解的描述,如果没理解错的话,应该是指战斗中点开人物状态时显示的数值?也就是说,战斗中施展的身法与护体的加值是不影响这个数值的?(因为释放了之后再点开状态栏面板也是不变的)比如我抓人之前开一个梅点头加迅捷精妙,是没用的嘛? 2.『加成指所有增加失心人救治的宝物及代步的加值之和;使用绳子时,每一品级提高15%。』我搜了一下贴吧记录,有些吧友说,这句话是指失心人救治属性会影响绳索抓捕加成……感觉挺奇怪的,绑人怎么会是救治失心人呢?我以为这句话中的封号应该是将剑柄和绳索分割开来的……真实情况是怎样呢? 求大佬解惑呀!
【内外比例疑惑】修习界面的内外比例影响什么呀? 在看灰机WIKI时看到了一段令我比较疑惑的描述,原文为: 『由于伤害计算公式中的功法内/外伤伤害比例%项,实际上内外1:1的摧破相比纯内/外摧破,在单方面的伤害只有1/4,这意味着除了魔音功法以外,调整成尽量偏向纯内或纯外的情况更有利于一次性打出更多伤害。』 因为同样摘录于灰机WIKI的催破伤害公式如下: 『摧破功法的最终一击内伤/外伤伤害 = 摧破基础伤害×(1+破绽增伤系数%)×(1+穿透强度%×衰减倍率%)×命中要害倍率%×功法内/外伤伤害比例%×最终一击威力成数%×精纯减伤%×招架减伤%×伤害增减系数%』 以及穿透强度公式如下: 『穿透强度% = 攻击方当前的攻击属性/防守方对应的防御属性×100%』 『攻击方当前的攻击属性 =人物面板属性值×(摧破功法面板%+武器加成%×破刃系数%)×(1+Σ效果同源增益%)×(1+Σ特殊功法效果%)』 『防守方对应的防御属性 =[ 人物面板属性值×(防具加成%×破甲系数%)+(护体绝技加值)]×(100%+Σ效果加成%)×1+(Σ效果同源增益%)×Σ特殊功法效果%×功法(或武器)内/外伤伤害比例%』 此处就是最让我纳闷的地方,为什么内外伤伤害比例出现在了防守方这个地方? 用的描述是功法或武器,我可以认为是普通攻击应用武器内外伤比例,催破功法只应用功法内外伤比例吗? 求大佬解惑!!
大漠插件的FindColorEx用在按键精灵里好像有点怪…… 函数简介: 查找指定区域内的所有颜色,颜色格式"RRGGBB-DRDGDB",注意,和按键的颜色格式相反 函数原型: string FindColorEx(x1, y1, x2, y2, color, sim, dir) 参数定义: x1 整形数:区域的左上X坐标 y1 整形数:区域的左上Y坐标 x2 整形数:区域的右下X坐标 y2 整形数:区域的右下Y坐标 color 字符串:颜色 格式为"RRGGBB-DRDGDB" 比如"aabbcc-000000|123456-202020".也可以支持反色模式. 前面加@即可. 比如"@123456-000000|aabbcc-202020". 具体可以看下放注释.注意,这里只支持RGB颜色. sim 双精度浮点数:相似度,取值范围0.1-1.0 dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左,从下到上 5: 从上到下,从左到右 6: 从上到下,从右到左 7: 从下到上,从左到右 8: 从下到上,从右到左 返回值: 字符串: 返回所有颜色信息的坐标值,然后通过GetResultCount等接口来解析 (由于内存限制,返回的颜色数量最多为1800个左右) 示例: s = dm.FindColorEx(0,0,2000,2000,"123456-000000|abcdef-202020",1.0,0) count = dm.GetResultCount(s) index = 0 Do While index < count dm_ret = dm.GetResultPos(s,index,intX,intY) MessageBox intX&","&intY index = index + 1 Loop 我用示例里的代码(当然具体坐标和颜色是自己算好的)发现返回的intX和intY全都是-1,但是count却能对应得上符合颜色要求的像素数量(用PS和MATLAB取色验证过了),就很奇怪……是按键精灵的问题吗?
【超形上学部】人形分拣机托马斯 自从击败了袋鼠JOJO之后,托马斯也觉醒了STAND POWER! 就算是最高难度分拣机也能百发百中!(虽然实际上大约每90轮即4500次分拣会出现1次miss) 依然使用的是大漠dll搭配按键精灵!满分猎豹的报酬有75钱,30敏捷经验,以及高达15的欧文好感度! 分享几个关键的思路~ 1.首先由于脚本取色的最高频率和显示屏的刷新频率相关,以我60fps为例,最高的图色获取频率不会超过60hz,而一般的图像对比甚至只能达到16hz。在猎豹难度下,分拣件的移动速度约为311pixel/s;跑道中比较清晰可见部分(即网状格子之外)到托马斯操作台位置的像素只有260pixels,整个过程不到0.836s。因此,需要尽量以极端的方式从图色信息中提取特征!比如舍弃图像/图案对比,转而寻找合适的像素点获取分拣件的信息(种类,位置) 2.对于不擅长编写图色dll的狱友来说(比如我),在调用dll的过程中会存在这样一个尴尬的问题——即使是在多线程中分开调用,重复调用图色dll的时间消耗依然是线性的。也就是说,如果我选用1个像素点进行频率约40hz的信息提取,同时选用两个像素点频率就降低到20hz,3个像素点13hz……因此需要避免同时使用多个像素点进行判断,尽量在1个循环中只使用1次图色提取而更多依赖于自己的算法来弥补信息特征的生成。同时,在线程中尽可能多地插入空转时间,从而使线程之间(通常是左跑道和右跑道两个图色线程)能够互相匀出调用dll的空闲! 3.建议的几个取色点:左右跑道距离屏幕上方192pixel,距离屏幕左侧分别592,620,659,687pixel的位置,是我的结论!左右跑道各2个像素点就能很好的区分信件/箱子,再加上指示灯上的像素点,就能非常稳定地获取分拣机的种类和位置信息拉~ 4.按键灵敏度需要根据个人设备的情况进行调整!以我来说 KeyDown和KeyPress各需要3次,而KeyUp只需要1次,就能比较好地避免按键不反馈的情况~当然了,随着次数上升,稳定上升的同时处理时间也会变长,最终可能会影响到左右两跑道非常接近的2件分拣件的处理,一般建议处理时间不超过70ms为好!
【超形上学部】在D3以95.8%-98.6%的成功率击败乔瑟夫·乔斯达 托马斯的伤害集为[16,17,18]或[18,19,20]在攻克了熨衣难题之后,我们超形上学部的优秀员工托马斯便投身研究自己的第一位令人尊敬的强大对手——袋鼠·乔瑟夫·乔斯达 虽然原则上而言,鳄鱼珍妮酱才是我们第一位面对的敌人,不过鉴于我们绅士的托马斯不想对女士出手(正常流程胜率太低了…),因此就由大名鼎鼎的jo家人作为我们的首发对手! 从收益角度来讲,D3晚的拳击赛获胜能够稳定拿到300奖金,30声望以及150的力量/敏捷/智力经验,这对于前期打发育提速是非常重要的!同时,这也能让我们在最早的D10获取擂台霸主这一重要的+2魅力技能! 但是袋鼠·乔瑟夫·乔斯达不愧是接连击败卡兹迪奥乃至吉良吉影的强大角色,自带30%的增伤,20%的减伤,3次攻击附加1次必爆以及暴击附带眩晕的被动,让托马斯陷入了良久苦战——以至于在相当长的时间里,即使有来自叙事层的协助,托马斯也不得不数次往返于同一时间线以期待诸多奇迹发生在同一个夜晚。 但是一切都将在现在画下句点!经过托马斯的不懈研究,终于将D3晚对战JOJO的胜率提高了到了最低90%最高96%!当然了,正面迎战久经沙场的JOJO毕竟不是上策。就算手段多少有些肮脏,历史终究是由胜利者书写的…… 为了在D3晚提高对JOJO的胜率,以下是一些可行的方案: · D1中午锻炼至少点出强壮+8生命、反击和重击1.75爆伤最好也能点出来 · D1-D3收集材料,D2看时尚男孩,从而制作出绿头巾,堆叠闪避率 · D2-D3尽可能溜进屋顶工作间,收集精致叶卷 · D1-D3收集魅力经验,尽可能在D3晚战斗前点出魅力的分散注意专长 · 最晚D2向大脚帮订购拖鞋,放弃理发店的任务,从而提高对袋鼠的胜率 · 当然,如果有动物有帆布鞋,尽力拿到帆布鞋是更好的选择(可以考虑对黑豹进行汽水/薄荷卷攻势+真朋友) · D2晚将玛姬的好感堆到50,选择皮带/首领球帽寄送(目前的结论是首领球帽更适合这场战斗,皮带更泛用) · D3早上开黑爪帮2楼大厅右边柜子拿烈酒/D3晚上直接偷取动物的烈酒,饮用+8最大生命值,+4攻击 · D3中午给袋鼠下药降低其属性 · D3下午购买酸奶,晚上喝掉解除醉酒扣智力Debuff · D3晚尽可能偷取镇静剂、兴奋剂以进一步提升属性 · D3晚使用蘑菇,焦糖棒,汽水,精致叶卷,(镇静剂兴奋剂),并上厕所提升属性 一般来说,D3晚的属性: · 力量基础3+蘑菇1(+皮带2+兴奋剂2)=4-8 · 敏捷基础5+汽水1+通畅1(+精致叶卷1)=7-8 · 智力基础4+焦糖棒1(+镇静剂2)=5-7 · 魅力基础5+刷牙1+口香糖1+绿头巾1=8 · 攻击力基础[6,7,8]+烈酒4+力量加成 · 闪避率基础10% · 暴击率基础10%+敏捷加成*2%+智力加成*2%(+强化集中10%)=34%-50% 而这些数据要转化为战斗力评估,还需要对战斗数据的生成机制进行分析! 简单地观察战斗数据之后,托马斯得出了一些初步的结论: · 增伤和减伤之间全部是加算处理,包括球帽,拳台龙卷风技能,人物自带的减伤等 · 计算完攻击浮动,暴击,增减伤后的浮点数,进行向下取整,得到战斗时最终造成的伤害数字 因此,在使用皮带的情形下,托马斯的伤害集为[16,17,18]或[18,19,20](取决于是否使用兴奋剂),乘上JOJO 的0.8负伤系数得到—— · 皮带:非暴击[12,13,14]或[14,15,16];暴击[22,23,25]或[25,26,28] 同样,对于使用首领球帽的情形,托马斯的伤害集为[14,15,16]或[16,17,18],乘上JOJO的负伤系数0.9(首领球帽增加0.1)得到—— · 球帽:非暴击[12,13,14]或[14,15,16];暴击[22,23,25]或[25,26,28] 可以观察到,皮带和球帽形成的最终伤害数字是完全一致的,因此球帽额外对集中专长形成的10%暴击率加成就有了更大的优势 接下来的工作,托马斯就交给了MATLAB进行处理(虽然C++和Py可能更适合循环运算吧?),将战斗过程事无巨细地模拟进循环体之后,以100000次为模拟单位,得到了初步的胜率!在绿头巾,帆布鞋以及敏捷和智力的加持下,JOJO对托马斯的基础命中率可以被拉到64%之低! (JOJO的基础命中率有105%,托马斯自带10%闪避,帆布鞋提供5%,敏捷和智力共提供26%-30%,命中和闪避之间加算处理) 这也是战胜JOJO的秘诀!能够充分规避其的3次攻击1暴击的计数机制以及随之而来的眩晕,从而极大地拉长了托马斯的存活时间以击败JOJO。 另外,如果D3晚上能够偷到镇静剂(82%概率两次就是96.84%),那么闪避率还能再上升4%!同样,如果能够偷到兴奋剂(同上)的话,基础攻击增加2,耐力值增加10,加起来胜率还能继续上升3%,最终来到98%!可喜可贺,可喜可贺! MATLAB源码我贴在下一楼,写得比较又臭又长,大家见谅呀~仅供参考!
【超形上学部】托马斯今天也在熨衣服 众所周知,绝大部分第一人称游戏的主角实际上都是超形上学部员工~ 他们常常可以超越游戏内维度的阻碍,获取一般无法触及的知识、经验,将神迹般的操作仿佛吃饭喝水一般一次次复现~ 当然了,我们的托马斯也毫无疑问是超形上学部中优秀的一员!今天要用来自叙事层的力量来熨衣服! 从结论来说,目前熨衣服可以达到约90%以上的0误差率~还有一轮熨衣服中3次有1次出现了00'01的误差,没有截屏下来,不过一般来说也足够了罢! 使用的工具是按键精灵和大漠插件! 大漠插件实际上算是功能比按键精灵自带的图色处理api更强的dll,如果各位吧友自己能造轮子的话也可以自己写图色判定~ 基本的思路是用Plugin.GetSysInfo.GetTime()记录某一时刻的系统运行计数毫秒数,然后推算需要按下鼠标的时间 但是存在一个细节问题—— 直接通过按键精灵/大漠插件的api:leftclick组合Plugin.GetSysInfo.GetTime()来实现按下并记录初始时间的话会存在不可忽视的误差,具体原因还不明朗~ 因此,思路替换为通过图色检测游戏内的秒表(最开始有3秒计时的)的特定瞬间来替代按下按下的瞬间作为起点! 几个通过实验总结下来的经验论: 1.秒表上数字其实并不是以00'01为单位跳动的,虽然我没有搞明白具体有哪些帧,不过我截取了09和32作为参照2.经过一些简要的实验和计算,选择09作为计时起点,同时得到该计时起点等价于经过了180毫秒(如果换算下来的话其实是00'10.8,这里说明表的计时有微妙的初始数) 3.然而第一秒内的09和系统毫秒数存在一定的波动,因此需要检测09-检测32-检测09的过程来选取到第二秒内的09作为起点! 以上就是基本的思路啦,我自己写的代码比较丑陋就不贴了!
1 下一页