初始提交:三玩法 Web 原型与设计文档

- 玩法一 数字一笔:规则库、求解器、26 关、竖屏触摸 Web 原型、测试
- 玩法二 连连气球:连消畅玩版核心、Web 原型、Cocos 球槽组件与导出脚本
- 玩法三 六边一笔:规则库、求解器、10 关 + 转墙实验包、Web 原型、测试
- 产品文档、UI 设计规范、各玩法 GDD / HANDOFF
- 文档移除全部外部参考作引用;删除玩法二 v0 旧稿
This commit is contained in:
cabinw
2026-09-16 14:30:59 +08:00
commit 8026e4628d
169 changed files with 22162 additions and 0 deletions
@@ -0,0 +1,205 @@
{
"viewport": [
390,
844
],
"input": "CDP touch events",
"invalidCancelBacktrack": true,
"undoDeterministic": true,
"breezeUndo": true,
"moves": [
{
"turn": 1,
"score": 10000,
"combo": 3,
"peak": 6,
"flown": 0,
"feverLeft": 0
},
{
"turn": 2,
"score": 19000,
"combo": 3,
"peak": 6,
"flown": 0,
"feverLeft": 5
},
{
"turn": 3,
"score": 31000,
"combo": 2,
"peak": 7,
"flown": 0,
"feverLeft": 4
},
{
"turn": 4,
"score": 43000,
"combo": 2,
"peak": 7,
"flown": 0,
"feverLeft": 3
},
{
"turn": 5,
"score": 62200,
"combo": 3,
"peak": 7,
"flown": 0,
"feverLeft": 2
},
{
"turn": 6,
"score": 77800,
"combo": 2,
"peak": 9,
"flown": 0,
"feverLeft": 1
},
{
"turn": 7,
"score": 84200,
"combo": 2,
"peak": 9,
"flown": 0,
"feverLeft": 0
},
{
"turn": 8,
"score": 93800,
"combo": 3,
"peak": 9,
"flown": 0,
"feverLeft": 0
},
{
"turn": 9,
"score": 100700,
"combo": 2,
"peak": 9,
"flown": 0,
"feverLeft": 0
},
{
"turn": 10,
"score": 108300,
"combo": 2,
"peak": 9,
"flown": 0,
"feverLeft": 0
},
{
"turn": 11,
"score": 120200,
"combo": 3,
"peak": 9,
"flown": 0,
"feverLeft": 5
},
{
"turn": 12,
"score": 142200,
"combo": 1,
"peak": 10,
"flown": 1,
"feverLeft": 4
},
{
"turn": 13,
"score": 184200,
"combo": 4,
"peak": 10,
"flown": 1,
"feverLeft": 3
},
{
"turn": 14,
"score": 198000,
"combo": 2,
"peak": 10,
"flown": 1,
"feverLeft": 2
},
{
"turn": 15,
"score": 217200,
"combo": 3,
"peak": 10,
"flown": 1,
"feverLeft": 1
},
{
"turn": 16,
"score": 221200,
"combo": 1,
"peak": 10,
"flown": 1,
"feverLeft": 0
},
{
"turn": 17,
"score": 236200,
"combo": 3,
"peak": 10,
"flown": 1,
"feverLeft": 0
},
{
"turn": 18,
"score": 242200,
"combo": 3,
"peak": 10,
"flown": 1,
"feverLeft": 0
},
{
"turn": 19,
"score": 249100,
"combo": 2,
"peak": 10,
"flown": 1,
"feverLeft": 0
},
{
"turn": 20,
"score": 253300,
"combo": 2,
"peak": 10,
"flown": 1,
"feverLeft": 5
},
{
"turn": 21,
"score": 267100,
"combo": 2,
"peak": 10,
"flown": 1,
"feverLeft": 4
},
{
"turn": 22,
"score": 275500,
"combo": 2,
"peak": 10,
"flown": 1,
"feverLeft": 3
},
{
"turn": 23,
"score": 305500,
"combo": 3,
"peak": 10,
"flown": 1,
"feverLeft": 2
},
{
"turn": 24,
"score": 317500,
"combo": 2,
"peak": 10,
"flown": 1,
"feverLeft": 1
}
],
"errors": []
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

@@ -0,0 +1,312 @@
{
"layouts": [
{
"width": 320,
"height": 568,
"scrollWidth": 320,
"scrollHeight": 650,
"buttons": [
{
"id": "sound",
"w": 44,
"h": 44,
"bottom": 50
},
{
"id": "help",
"w": 44,
"h": 44,
"bottom": 50
},
{
"id": "records",
"w": 60,
"h": 61,
"bottom": 119.921875
},
{
"id": "undo",
"w": 68.75,
"h": 59.5,
"bottom": 620
},
{
"id": "hint",
"w": 68.75,
"h": 59.5,
"bottom": 620
},
{
"id": "shuffle",
"w": 68.75,
"h": 59.5,
"bottom": 620
},
{
"id": "restart",
"w": 68.75,
"h": 59.5,
"bottom": 620
}
],
"stageHeight": 326.65625
},
{
"width": 360,
"height": 740,
"scrollWidth": 360,
"scrollHeight": 740,
"buttons": [
{
"id": "sound",
"w": 44,
"h": 44,
"bottom": 50
},
{
"id": "help",
"w": 44,
"h": 44,
"bottom": 50
},
{
"id": "records",
"w": 60,
"h": 61,
"bottom": 119.921875
},
{
"id": "undo",
"w": 73.5,
"h": 59.5,
"bottom": 710
},
{
"id": "hint",
"w": 73.5,
"h": 59.5,
"bottom": 710
},
{
"id": "shuffle",
"w": 73.5,
"h": 59.5,
"bottom": 710
},
{
"id": "restart",
"w": 73.5,
"h": 59.5,
"bottom": 710
}
],
"stageHeight": 416.65625
},
{
"width": 390,
"height": 844,
"scrollWidth": 390,
"scrollHeight": 844,
"buttons": [
{
"id": "sound",
"w": 44,
"h": 44,
"bottom": 57
},
{
"id": "help",
"w": 44,
"h": 44,
"bottom": 57
},
{
"id": "records",
"w": 60,
"h": 75,
"bottom": 147.9453125
},
{
"id": "undo",
"w": 81,
"h": 61,
"bottom": 810
},
{
"id": "hint",
"w": 81,
"h": 61,
"bottom": 810
},
{
"id": "shuffle",
"w": 81,
"h": 61,
"bottom": 810
},
{
"id": "restart",
"w": 81,
"h": 61,
"bottom": 810
}
],
"stageHeight": 470.1015625
},
{
"width": 430,
"height": 932,
"scrollWidth": 430,
"scrollHeight": 932,
"buttons": [
{
"id": "sound",
"w": 44,
"h": 44,
"bottom": 57
},
{
"id": "help",
"w": 44,
"h": 44,
"bottom": 57
},
{
"id": "records",
"w": 60,
"h": 75,
"bottom": 147.9453125
},
{
"id": "undo",
"w": 91,
"h": 61,
"bottom": 898
},
{
"id": "hint",
"w": 91,
"h": 61,
"bottom": 898
},
{
"id": "shuffle",
"w": 91,
"h": 61,
"bottom": 898
},
{
"id": "restart",
"w": 91,
"h": 61,
"bottom": 898
}
],
"stageHeight": 558.1015625
},
{
"width": 844,
"height": 390,
"scrollWidth": 844,
"scrollHeight": 650,
"buttons": [
{
"id": "sound",
"w": 44,
"h": 44,
"bottom": 51
},
{
"id": "help",
"w": 44,
"h": 44,
"bottom": 51
},
{
"id": "records",
"w": 60,
"h": 61,
"bottom": 120.921875
},
{
"id": "undo",
"w": 88,
"h": 59.5,
"bottom": 619
},
{
"id": "hint",
"w": 88,
"h": 59.5,
"bottom": 619
},
{
"id": "shuffle",
"w": 88,
"h": 59.5,
"bottom": 619
},
{
"id": "restart",
"w": 88,
"h": 59.5,
"bottom": 619
}
],
"stageHeight": 324.65625
},
{
"width": 1280,
"height": 900,
"scrollWidth": 1280,
"scrollHeight": 900,
"buttons": [
{
"id": "sound",
"w": 44,
"h": 44,
"bottom": 83
},
{
"id": "help",
"w": 44,
"h": 44,
"bottom": 83
},
{
"id": "records",
"w": 60,
"h": 75,
"bottom": 176.5
},
{
"id": "undo",
"w": 88,
"h": 61,
"bottom": 844
},
{
"id": "hint",
"w": 88,
"h": 61,
"bottom": 844
},
{
"id": "shuffle",
"w": 88,
"h": 61,
"bottom": 844
},
{
"id": "restart",
"w": 88,
"h": 61,
"bottom": 844
}
],
"stageHeight": 470
}
],
"reducedMotion": true,
"keyboardModal": true
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

@@ -0,0 +1 @@
{"balls":[{"id":73,"n":8,"r":46.400000000000006,"x":155.1468869644993,"y":361.6,"vx":0,"vy":0},{"id":34,"n":4,"r":33.6,"x":232.1383484022295,"y":374.4,"vx":0,"vy":0},{"id":106,"n":8,"r":46.400000000000006,"x":306.6,"y":346.91101173225013,"vx":0,"vy":0},{"id":119,"n":1,"r":24,"x":31,"y":384,"vx":0,"vy":0},{"id":79,"n":7,"r":43.2,"x":242.29979747458898,"y":285.3798913004701,"vx":0,"vy":0},{"id":127,"n":2,"r":27.2,"x":87.42066087373445,"y":338.81330205261503,"vx":0,"vy":0},{"id":134,"n":2,"r":27.2,"x":325.8,"y":275.0430952965191,"vx":0,"vy":0},{"id":94,"n":2,"r":27.2,"x":34.2,"y":338.04324185934405,"vx":0,"vy":0},{"id":141,"n":5,"r":36.8,"x":316.2,"y":211.18521655052808,"vx":0,"vy":0},{"id":148,"n":8,"r":46.400000000000006,"x":59.06976562543874,"y":270.57975200986914,"vx":0,"vy":0},{"id":152,"n":4,"r":33.6,"x":274.2729088066474,"y":153.89093156184353,"vx":0,"vy":0},{"id":151,"n":9,"r":49.6,"x":154.30680989880818,"y":254.69261229076352,"vx":0,"vy":0},{"id":157,"n":5,"r":36.8,"x":316.2,"y":96.84270530601155,"vx":0,"vy":0},{"id":158,"n":6,"r":40,"x":47,"y":185.95289916855464,"vx":0,"vy":0},{"id":155,"n":4,"r":33.6,"x":203.52445014195436,"y":139.33193488508178,"vx":0,"vy":0},{"id":160,"n":5,"r":36.8,"x":43.8,"y":110.39302971436348,"vx":0,"vy":0},{"id":161,"n":6,"r":40,"x":125.67701639860698,"y":169.1546351531075,"vx":0,"vy":0},{"id":149,"n":5,"r":36.8,"x":226.66064639633422,"y":206.41680839495766,"vx":0,"vy":0},{"id":162,"n":4,"r":33.6,"x":40.6,"y":41.6,"vx":0,"vy":0},{"id":163,"n":1,"r":24,"x":105.05076572430656,"y":107.92440190412071,"vx":0,"vy":0},{"id":164,"n":2,"r":27.2,"x":156.26870064135628,"y":100.18081469709189,"vx":0,"vy":0}],"stats":{"score":265500,"turns":37,"reactions":66,"maxNumber":10,"bestCombo":3,"lastCombo":1,"popped":208,"flown":1},"rng":1760922726,"nextId":165,"queue":[1,2,3],"feverCharge":0,"feverLeft":3,"breezes":3}
Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

@@ -0,0 +1,10 @@
{
"turns": 1,
"score": "10,000",
"errors": [],
"debugExposed": false,
"persistence": true,
"originalRecordRestored": true,
"legacyRecordPreserved": true,
"url": "http://localhost:8003/"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

@@ -0,0 +1,300 @@
{
"generatedAt": "2026-09-15T11:34:17.717Z",
"note": "固定种子算法抽样;随机策略从合法链均匀抽取,提示策略通过真实手势控制器。连消率不是玩家数据。",
"states": 3232,
"maxOverlap": 1.173909676008897,
"strategies": [
{
"strategy": "random",
"sessions": 24,
"gestures": 2400,
"comboGestures": 812,
"comboRate": 0.3383333333333333,
"reactions": 3572,
"flown": 94,
"breezes": 161,
"minPaths": 2,
"commitMs": {
"median": 8.465915999997378,
"p95": 16.694249999998647,
"max": 27.764500000000226
},
"runs": [
{
"seed": 937,
"score": 606600,
"peak": 10,
"flown": 3,
"comboGestures": 26,
"breezes": 5
},
{
"seed": 1874,
"score": 524300,
"peak": 10,
"flown": 3,
"comboGestures": 31,
"breezes": 7
},
{
"seed": 2811,
"score": 584800,
"peak": 10,
"flown": 4,
"comboGestures": 32,
"breezes": 9
},
{
"seed": 3748,
"score": 510100,
"peak": 10,
"flown": 3,
"comboGestures": 30,
"breezes": 5
},
{
"seed": 4685,
"score": 535500,
"peak": 10,
"flown": 4,
"comboGestures": 32,
"breezes": 5
},
{
"seed": 5622,
"score": 687600,
"peak": 10,
"flown": 4,
"comboGestures": 35,
"breezes": 8
},
{
"seed": 6559,
"score": 548700,
"peak": 10,
"flown": 5,
"comboGestures": 28,
"breezes": 9
},
{
"seed": 7496,
"score": 765100,
"peak": 10,
"flown": 4,
"comboGestures": 49,
"breezes": 8
},
{
"seed": 8433,
"score": 605900,
"peak": 10,
"flown": 3,
"comboGestures": 40,
"breezes": 5
},
{
"seed": 9370,
"score": 626500,
"peak": 10,
"flown": 5,
"comboGestures": 34,
"breezes": 2
},
{
"seed": 10307,
"score": 597300,
"peak": 10,
"flown": 3,
"comboGestures": 34,
"breezes": 7
},
{
"seed": 11244,
"score": 606400,
"peak": 10,
"flown": 4,
"comboGestures": 35,
"breezes": 11
},
{
"seed": 12181,
"score": 716600,
"peak": 10,
"flown": 5,
"comboGestures": 41,
"breezes": 5
},
{
"seed": 13118,
"score": 685200,
"peak": 10,
"flown": 4,
"comboGestures": 46,
"breezes": 9
},
{
"seed": 14055,
"score": 634000,
"peak": 10,
"flown": 4,
"comboGestures": 35,
"breezes": 3
},
{
"seed": 14992,
"score": 624700,
"peak": 10,
"flown": 4,
"comboGestures": 37,
"breezes": 7
},
{
"seed": 15929,
"score": 644100,
"peak": 10,
"flown": 5,
"comboGestures": 32,
"breezes": 6
},
{
"seed": 16866,
"score": 571300,
"peak": 10,
"flown": 4,
"comboGestures": 32,
"breezes": 4
},
{
"seed": 17803,
"score": 601300,
"peak": 10,
"flown": 5,
"comboGestures": 36,
"breezes": 9
},
{
"seed": 18740,
"score": 518400,
"peak": 10,
"flown": 4,
"comboGestures": 33,
"breezes": 8
},
{
"seed": 19677,
"score": 532500,
"peak": 10,
"flown": 3,
"comboGestures": 26,
"breezes": 4
},
{
"seed": 20614,
"score": 540900,
"peak": 10,
"flown": 4,
"comboGestures": 29,
"breezes": 4
},
{
"seed": 21551,
"score": 569800,
"peak": 10,
"flown": 3,
"comboGestures": 28,
"breezes": 10
},
{
"seed": 22488,
"score": 550700,
"peak": 10,
"flown": 4,
"comboGestures": 31,
"breezes": 11
}
]
},
{
"strategy": "guided",
"sessions": 8,
"gestures": 800,
"comboGestures": 499,
"comboRate": 0.62375,
"reactions": 1570,
"flown": 49,
"breezes": 46,
"minPaths": 2,
"commitMs": {
"median": 8.500040999999328,
"p95": 15.332957999999053,
"max": 30.179541999998037
},
"runs": [
{
"seed": 937,
"score": 968000,
"peak": 10,
"flown": 6,
"comboGestures": 62,
"breezes": 6
},
{
"seed": 1874,
"score": 837000,
"peak": 10,
"flown": 5,
"comboGestures": 54,
"breezes": 6
},
{
"seed": 2811,
"score": 899000,
"peak": 10,
"flown": 6,
"comboGestures": 56,
"breezes": 7
},
{
"seed": 3748,
"score": 1238900,
"peak": 10,
"flown": 7,
"comboGestures": 71,
"breezes": 3
},
{
"seed": 4685,
"score": 1138000,
"peak": 10,
"flown": 7,
"comboGestures": 63,
"breezes": 4
},
{
"seed": 5622,
"score": 952800,
"peak": 10,
"flown": 5,
"comboGestures": 62,
"breezes": 9
},
{
"seed": 6559,
"score": 909300,
"peak": 10,
"flown": 5,
"comboGestures": 61,
"breezes": 6
},
{
"seed": 7496,
"score": 1297900,
"peak": 10,
"flown": 8,
"comboGestures": 70,
"breezes": 5
}
]
}
]
}