kvarenzn / phisap

[deprecated] [for android] Semi-automatic player for the rhythm game "Phigros"
174 stars 38 forks source link

关于Fanmade的谱面触控事件规划的AssertionError #97

Closed RaTaiHok closed 1 year ago

RaTaiHok commented 1 year ago

log如下: 统计操作帧... ---------------------------------------- 100% 0:00:04 统计完毕,当前谱面共计218730帧 规划触控事件... ---------- ----------------------------- 27% 0:00:01 ┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐ │ D:[Phigros Manage\phisap-main\main.py:624 in process │ │ │ │ 621 │ │ │ │ import algo.algo1 as algo │ │ 622 │ │ │ else: │ │ 623 │ │ │ │ import algo.algo2 as algo │ │ > 624 │ │ │ screen, ans = algo.solve(chart, self.getAlgorithmConfigureDict(), self.conso │ │ 625 │ │ │ if self.saveResult.isChecked(): │ │ 626 │ │ │ │ self.cacheManager.write_cache_of_content(content, dump_data(screen, ans) │ │ 627 │ │ │ box = QMessageBox(self) │ │ │ │ D:[Phigros Manage\phisap-main\algo\algo2.py:272 in solve │ │ │ │ 269 │ allocator = PointerAllocator(screen, flick_start, flick_end, flick_direction) │ │ 270 │ │ │ 271 │ for frame in track(frames, description='规划触控事件...'): │ │ > 272 │ │ allocator.allocate(frame) │ │ 273 │ │ │ 274 │ console.print('规划完毕.') │ │ 275 │ │ │ │ D:[Phigros Manage\phisap-main\algo\algo2.py:195 in allocate │ │ │ │ 192 │ │ │ if pointer: │ │ 193 │ │ │ │ pointer.age = 0 │ │ 194 │ │ │ │ continue │ │ > 195 │ │ │ pointer = self._alloc(note) │ │ 196 │ │ │ self._drag(pointer, note) │ │ 197 │ │ │ │ 198 │ │ self.last_timestamp = frame.timestamp │ │ │ │ D:[Phigros Manage\phisap-main\algo\algo2.py:134 in _alloc │ │ │ │ 131 │ │ │ 132 │ def _alloc(self, note: PlainNote) -> Pointer: │ │ 133 │ │ available_pointers = [p for p in self.pointers if p.note is None or p.age > 0] │ │ > 134 │ │ assert available_pointers │ │ 135 │ │ return min(available_pointers, key=lambda p: distance_of(p.note, note)) # 优先 │ │ 136 │ │ │ 137 │ def _insert(self, timestamp: int, event: VirtualTouchEvent) -> None: │ └──────────────────────────────────────────────────────────────────────────────────────────────────┘ AssertionError

kvarenzn commented 1 year ago

你好,请问是哪张自制谱?请提供必要信息。如果可以的话,请提供谱面文件。顺便,请问这张自制谱是否是愚人节类型的?

RaTaiHok commented 1 year ago

你好,请问是哪张自制谱?请提供必要信息。如果可以的话,请提供谱面文件。顺便,请问这张自制谱是否是愚人节类型的? TC的Duplicity Shade AT17 为多K谱

364hao commented 1 year ago

TC的Duplicity Shade AT17 为多K谱

~我超,TC~

这是谱面预览:https://www.bilibili.com/video/BV1WX4y1h79Y/ 这是谱面文件:https://t.wss.ink/f/bum9et79u2r

364hao commented 1 year ago

另外这是整个谱面的文件(包括音乐背景等):https://t.wss.ink/f/bumbadgeiyr

kvarenzn commented 1 year ago

这是谱面预览:https://www.bilibili.com/video/BV1WX4y1h79Y/ 这是谱面文件:https://t.wss.ink/f/bum9et79u2r

好好好,谢谢

kvarenzn commented 1 year ago

看了一眼谱面预览,个人感觉这玩意难度跟愚人节谱不相上下 可能以后会支持,不过优先级比较低 按我的经验判断应该是算法在规划6蓝条+6粉键时崩溃的(那块需要12个触点,然而最多只有10个),这是目前两个算法的硬伤

RaTaiHok commented 1 year ago

看了一眼谱面预览,个人感觉这玩意难度跟愚人节谱不相上下 可能以后会支持,不过优先级比较低 按我的经验判断应该是算法在规划6蓝条+6粉键时崩溃的(那块需要12个触点,然而最多只有10个),这是目前两个算法的硬伤

草 好的(感谢

364hao commented 1 year ago

按我的经验判断应该是算法在规划6蓝条+6粉键时崩溃的(那块需要12个触点,然而最多只有10个),这是目前两个算法的硬伤

那啥,我有一个想法,就是长条在hold的时候可以把在自己hold时间范围内的,可垂直判断到的flick和drag一并处理掉

kvarenzn commented 1 year ago

那啥,我有一个想法,就是长条在hold的时候可以把在自己hold时间范围内的,可垂直判断到的flick和drag一并处理掉

激进算法的原理跟你说的类似,不过是用flick抵消hold,但是根据报错来看也崩了 其实别的还好,就是这个红键的判定真的很神秘,说实话我到现在还是没有完全理解这玩意是怎么判定的。如果没有红键那么再复杂的谱也可以规划,而且可以保证百分百AP。

RaTaiHok commented 1 year ago

那啥,我有一个想法,就是长条在hold的时候可以把在自己hold时间范围内的,可垂直判断到的flick和drag一并处理掉

激进算法的原理跟你说的类似,不过是用flick抵消hold,但是根据报错来看也崩了 其实别的还好,就是这个红键的判定真的很神秘,说实话我到现在还是没有完全理解这玩意是怎么判定的。如果没有红键那么再复杂的谱也可以规划,而且可以保证百分百AP。

flick的判定没有头判没有尾判,理论可以有一个触控事件一直停留然后又flick直接划过去(bushi)

kvarenzn commented 1 year ago

flick的判定没有头判没有尾判,理论可以有一个触控事件一直停留然后又flick直接划过去(bushi)

你说的这招我之前还真试过,没用,特别容易漏判。而且一直在屏幕上留一个指针很容易造成手机卡顿

364hao commented 1 year ago

~看到QA.md后瞎写的,我的一些问题~

Q:algo2(激进算法)相较于algo1(保守算法)对谱面的哪些情况进行了优化或修改?(比如Flick抵消Hold怎么实现的)

Q:PEC,RPE等其他自制谱格式的支持是如何实现的?

Q:dev的算法是否仍在继续开发,还是说沿用stable的算法从头开始?

kvarenzn commented 1 year ago

看到QA.md后瞎写的,我的一些问题

有点偏题了,你新开一个issue吧

364hao commented 1 year ago

好的

kvarenzn commented 1 year ago

这张谱面在phira下的最佳成绩也就应该是98w左右了,确实没有办法AP,可能是phisap的问题,也有可能是phira的问题(据说该谱面可以在其他模拟器上AP,使用激进算法),这个目前不好说 总的来说,目前没有想到其他的改进策略 不过目前应该是已经可以规划了,所以我将关闭这个issue,将来有灵感了再开,到时再作讨论