@yyyu-star/arcade-kit 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/README.md +11 -3
- package/dist/qr.d.ts +15 -0
- package/dist/qr.d.ts.map +1 -0
- package/dist/qr.js +264 -0
- package/dist/qr.js.map +1 -0
- package/dist/share.d.ts +33 -14
- package/dist/share.d.ts.map +1 -1
- package/dist/share.js +99 -22
- package/dist/share.js.map +1 -1
- package/package.json +2 -1
- package/src/qr.ts +259 -0
- package/src/share.ts +104 -24
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# 更新日志
|
|
2
2
|
|
|
3
|
+
## 0.15.0
|
|
4
|
+
|
|
5
|
+
分享卡加强(主线派,所有者要"晒战绩、一键分享、发朋友圈")。
|
|
6
|
+
- **右下角二维码**:朋友圈里的图不能点,扫码是唯一入口。内容是运行时的 `location.origin` 加上 `opts.url` 的路径、查询和 `#`(`shareLink`),代码里不写域名。
|
|
7
|
+
纯白框、近黑的格、每格整数像素、留白 ≥ 4 格,下面写"扫码来玩";名场面和日期往左让。链接太长(> 213 字节)不画码。
|
|
8
|
+
- **二维码编码器 `src/qr.ts`**:自己写的最小子集(字节模式、纠错 M、版本 1–10),不引运行时依赖(kit 至今零运行时依赖,引一个就进每个游戏的 lockfile 和审阅范围)。
|
|
9
|
+
- **微信内置浏览器**:检测到 `MicroMessenger` 不试系统分享,直接出预览:图用 `data:` URL,提示"长按图片 → 发送给朋友,或保存后发朋友圈",不给"保存图片"。
|
|
10
|
+
- **系统分享的 `text` 末尾带上链接**(有的 App 只取 text);系统分享的 `url`、"复制链接"也换成 `shareLink` 算出的那一个。
|
|
11
|
+
- `drawShareCard(card, canvas?, link?)`、`shareCardBlob(card, link?)` 多一个可选参数,不给就和以前一样不画码。
|
|
12
|
+
- 测试:`qr.test`(新):版本 1–10 的边界长度都用 jsQR(Apache-2.0,devDependency)解回原文,格式信息、版本信息对规范表的已知向量;`share.test` 加链接、文字、码的留白、微信 UA 几条。
|
|
13
|
+
反证:格式信息错 1 位、纠错码生成元错、版本信息 BCH 错、链接用游戏给的域名、微信里给保存、文字不带链接,都让测试失败(格式信息错 1 位解码器会纠正,所以另加了已知向量)。
|
|
14
|
+
浏览器里实画三张演示卡,JPEG 质量 0.6、缩到 360 宽后都解得出链接。
|
|
15
|
+
|
|
3
16
|
## 0.14.0
|
|
4
17
|
|
|
5
18
|
第三轮安全审计 kit 的三条(主线派)。
|
package/README.md
CHANGED
|
@@ -351,7 +351,7 @@ protected override onEmote(from: number, id: number, to?: number): void {
|
|
|
351
351
|
|
|
352
352
|
### 分享卡
|
|
353
353
|
|
|
354
|
-
游戏只交数据,画法统一(主题色渐变底、图标、游戏名、一个大数字、最多 3
|
|
354
|
+
游戏只交数据,画法统一(主题色渐变底、图标、游戏名、一个大数字、最多 3 条小数据、一句名场面、昵称和称号、北京时间日期、右下角扫码来玩的二维码):
|
|
355
355
|
|
|
356
356
|
```ts
|
|
357
357
|
import { shareCard } from 'arcade-kit/share';
|
|
@@ -365,7 +365,7 @@ const r = await shareCard(
|
|
|
365
365
|
art: { image: atlasImg, crop: { x: 128, y: 0, w: 128, h: 128 }, fit: 'contain' },
|
|
366
366
|
player: { name: '小明', badge: '炸弹狂人' },
|
|
367
367
|
},
|
|
368
|
-
{ url:
|
|
368
|
+
{ url: './?room=123456' /* 只取路径,域名用运行时的 origin;好友房结算带房间码 */, log: (l) => smokeLog.push(l) },
|
|
369
369
|
); // 'shared' | 'preview' | 'cancelled'
|
|
370
370
|
```
|
|
371
371
|
|
|
@@ -375,7 +375,14 @@ const r = await shareCard(
|
|
|
375
375
|
预览层 z-index 默认 11000(0.12.4 起),按钮的 `data-key` 是 `share:save`、`share:copy`、`share:close`,冒烟点这些;`log` 给 `分享 系统`、`分享 预览`、`分享 保存`、`分享 复制`。
|
|
376
376
|
- **结算页一出现就先画好**(0.12.3,iOS 必须):iOS 只许在点击的那一下里调系统分享,点了再画就过期了、只能出预览。结算页出来时 `const p = prepareShare(card, opts)`,
|
|
377
377
|
"分享"按钮的点击里直接 `void p.share()`(前面别 await):画好了就同步调 `navigator.share`,没画好等画完再试、调不起来出预览。`shareCard` 是"点了才画"的简写。
|
|
378
|
-
-
|
|
378
|
+
- **二维码**(0.15.0):朋友圈里的图不能点,扫码是唯一入口。码的内容是 `shareLink(opts.url, location.origin)`:运行时的 origin 加上 `url` 的路径、查询和 `#` 后面,
|
|
379
|
+
游戏给相对路径还是绝对地址都行,kit 和游戏都不写域名(单独部署的游戏扫出来就是它自己的 `workers.dev`)。系统分享、"复制链接"也用这个链接,系统分享的 `text` 末尾自动带上它(有的 App 只取 text)。
|
|
380
|
+
码画在右下角的纯白框里(`#111` 的格、每格整数像素、四周留白 ≥ 4 格、下面写"扫码来玩"),名场面和日期往左让;JPEG 压缩、缩到三分之一宽的截图实测照样解得出。
|
|
381
|
+
编码器是 `src/qr.ts`,自己写的最小子集(字节模式、纠错 M、版本 1–10,最长 213 字节,约 9 KB 源码),不引运行时依赖:kit 一个运行时依赖都没有,引一个就进每个游戏的 lockfile 和审阅范围。
|
|
382
|
+
链接太长编不了码就不画码,卡照常出。测试用 jsQR(Apache-2.0,只是 devDependency,不进包)把码解回原文,再对格式信息、版本信息做规范表的已知向量核对。
|
|
383
|
+
- **微信内置浏览器**(0.15.0,UA 带 `MicroMessenger`):没有 `navigator.share`,下载链接也常常不生效。检测到微信就不试系统分享,直接出预览:图用 `data:` URL(`blob:` 的图在微信里长按经常存不下来),
|
|
384
|
+
提示"长按图片 → 发送给朋友,或保存后发朋友圈",不给"保存图片"按钮("复制链接""关闭"照旧)。判断在 `isWeChat`、`previewMode`(纯函数)。
|
|
385
|
+
- 只要图不分享:`drawShareCard(card, canvas?, link?)` 返回画好的 canvas(给了 `link` 才画码),`shareCardBlob(card, link?)` 返回 PNG。
|
|
379
386
|
- **图上只有游戏给的数据**:别人没摊的牌、手牌这类隐藏信息游戏自己别放进来。
|
|
380
387
|
|
|
381
388
|
### 报位置、收邀请
|
|
@@ -604,6 +611,7 @@ packages/arcade-kit/
|
|
|
604
611
|
│ ├─ fun-logic.ts 牌桌互动的规则:冷却、护盾、连击、回敬、电脑反应、菜单位置(纯函数)
|
|
605
612
|
│ ├─ table-fun.ts 牌桌互动组件 TableFun(DOM:头像菜单、面板、提示)
|
|
606
613
|
│ ├─ share.ts 分享卡(Canvas 画战绩图、系统分享或预览)
|
|
614
|
+
│ ├─ qr.ts 二维码编码器(字节模式、纠错 M、版本 1–10,纯函数,分享卡用)
|
|
607
615
|
│ ├─ social.ts 报位置、收邀请的横条、好友和邀请的接口小函数
|
|
608
616
|
│ ├─ testing.ts 假平台钱包(只给测试和本地开发)
|
|
609
617
|
│ └─ internal.ts 内部地址、身份头(不在 exports 里)
|
package/dist/qr.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 最小的二维码编码器(0.15.0,分享卡右下角的码):只做字节模式、纠错等级 M、版本 1–10(最多 213 字节,链接够用)。
|
|
3
|
+
* 自己写而不引依赖:kit 没有运行时依赖,引一个包就进了每个游戏的 lockfile 和审阅范围;要的子集只有这么点,规范见 ISO/IEC 18004。
|
|
4
|
+
* 纯函数,不碰 DOM;画在哪、画多大由 share.ts 决定。测试用解码库把码解回原文(test/qr.test.ts)。
|
|
5
|
+
*/
|
|
6
|
+
/** size × size 的格子,true 是深色。外面的留白(4 格)不在里面,画的时候自己留 */
|
|
7
|
+
export interface QrMatrix {
|
|
8
|
+
size: number;
|
|
9
|
+
version: number;
|
|
10
|
+
dark: boolean[][];
|
|
11
|
+
}
|
|
12
|
+
export declare const QR_MAX_VERSION: number;
|
|
13
|
+
/** 编码一段文字(UTF-8)。放不下(超过版本 10)返回 null,调用方就不画码 */
|
|
14
|
+
export declare function qrEncode(text: string): QrMatrix | null;
|
|
15
|
+
//# sourceMappingURL=qr.d.ts.map
|
package/dist/qr.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr.d.ts","sourceRoot":"","sources":["../src/qr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sDAAsD;AACtD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;CACnB;AAeD,eAAO,MAAM,cAAc,QAAkB,CAAC;AAU9C,gDAAgD;AAChD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAatD"}
|
package/dist/qr.js
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 最小的二维码编码器(0.15.0,分享卡右下角的码):只做字节模式、纠错等级 M、版本 1–10(最多 213 字节,链接够用)。
|
|
3
|
+
* 自己写而不引依赖:kit 没有运行时依赖,引一个包就进了每个游戏的 lockfile 和审阅范围;要的子集只有这么点,规范见 ISO/IEC 18004。
|
|
4
|
+
* 纯函数,不碰 DOM;画在哪、画多大由 share.ts 决定。测试用解码库把码解回原文(test/qr.test.ts)。
|
|
5
|
+
*/
|
|
6
|
+
/** 纠错 M:每个版本的 [每块纠错码字数, 第一组块数, 第一组每块数据码字数, 第二组块数](第二组每块多 1 个数据码字) */
|
|
7
|
+
const BLOCKS_M = [
|
|
8
|
+
[10, 1, 16, 0],
|
|
9
|
+
[16, 1, 28, 0],
|
|
10
|
+
[26, 1, 44, 0],
|
|
11
|
+
[18, 2, 32, 0],
|
|
12
|
+
[24, 2, 43, 0],
|
|
13
|
+
[16, 4, 27, 0],
|
|
14
|
+
[18, 4, 31, 0],
|
|
15
|
+
[22, 2, 38, 2],
|
|
16
|
+
[22, 3, 36, 2],
|
|
17
|
+
[26, 4, 43, 1],
|
|
18
|
+
];
|
|
19
|
+
export const QR_MAX_VERSION = BLOCKS_M.length;
|
|
20
|
+
/** 校正图形的中心坐标(版本 2 起) */
|
|
21
|
+
const ALIGN = [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50]];
|
|
22
|
+
function dataCodewords(v) {
|
|
23
|
+
const [, b1, d1, b2] = BLOCKS_M[v - 1];
|
|
24
|
+
return b1 * d1 + b2 * (d1 + 1);
|
|
25
|
+
}
|
|
26
|
+
/** 编码一段文字(UTF-8)。放不下(超过版本 10)返回 null,调用方就不画码 */
|
|
27
|
+
export function qrEncode(text) {
|
|
28
|
+
const bytes = new TextEncoder().encode(text);
|
|
29
|
+
let version = 0;
|
|
30
|
+
for (let v = 1; v <= QR_MAX_VERSION; v++) {
|
|
31
|
+
const countBits = v < 10 ? 8 : 16;
|
|
32
|
+
if (4 + countBits + bytes.length * 8 <= dataCodewords(v) * 8) {
|
|
33
|
+
version = v;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (!version)
|
|
38
|
+
return null;
|
|
39
|
+
const data = interleave(version, pack(bytes, version));
|
|
40
|
+
return place(version, data);
|
|
41
|
+
}
|
|
42
|
+
/** 模式指示 0100(字节)+ 长度 + 数据 + 结束符 + 补齐 */
|
|
43
|
+
function pack(bytes, v) {
|
|
44
|
+
const bits = [];
|
|
45
|
+
const put = (val, n) => {
|
|
46
|
+
for (let i = n - 1; i >= 0; i--)
|
|
47
|
+
bits.push((val >>> i) & 1);
|
|
48
|
+
};
|
|
49
|
+
put(4, 4);
|
|
50
|
+
put(bytes.length, v < 10 ? 8 : 16);
|
|
51
|
+
for (const b of bytes)
|
|
52
|
+
put(b, 8);
|
|
53
|
+
const cap = dataCodewords(v) * 8;
|
|
54
|
+
put(0, Math.min(4, cap - bits.length));
|
|
55
|
+
put(0, (8 - (bits.length % 8)) % 8);
|
|
56
|
+
const out = [];
|
|
57
|
+
for (let i = 0; i < bits.length; i += 8)
|
|
58
|
+
out.push(bits.slice(i, i + 8).reduce((a, b) => (a << 1) | b, 0));
|
|
59
|
+
for (let pad = 0xec; out.length < cap / 8; pad ^= 0xec ^ 0x11)
|
|
60
|
+
out.push(pad);
|
|
61
|
+
return out;
|
|
62
|
+
}
|
|
63
|
+
// GF(256),本原多项式 0x11d
|
|
64
|
+
function gfMul(a, b) {
|
|
65
|
+
let r = 0;
|
|
66
|
+
for (let i = 7; i >= 0; i--) {
|
|
67
|
+
r = (r << 1) ^ ((r >>> 7) * 0x11d);
|
|
68
|
+
r ^= ((b >>> i) & 1) * a;
|
|
69
|
+
}
|
|
70
|
+
return r & 0xff;
|
|
71
|
+
}
|
|
72
|
+
/** RS 生成多项式(最高次项系数 1 省略) */
|
|
73
|
+
function rsGenerator(degree) {
|
|
74
|
+
const g = new Array(degree).fill(0);
|
|
75
|
+
g[degree - 1] = 1;
|
|
76
|
+
let root = 1;
|
|
77
|
+
for (let i = 0; i < degree; i++) {
|
|
78
|
+
for (let j = 0; j < degree; j++) {
|
|
79
|
+
g[j] = gfMul(g[j], root) ^ (j + 1 < degree ? g[j + 1] : 0);
|
|
80
|
+
}
|
|
81
|
+
root = gfMul(root, 2);
|
|
82
|
+
}
|
|
83
|
+
return g;
|
|
84
|
+
}
|
|
85
|
+
function rsRemainder(data, gen) {
|
|
86
|
+
const r = new Array(gen.length).fill(0);
|
|
87
|
+
for (const b of data) {
|
|
88
|
+
const f = b ^ r.shift();
|
|
89
|
+
r.push(0);
|
|
90
|
+
gen.forEach((c, i) => (r[i] = r[i] ^ gfMul(c, f)));
|
|
91
|
+
}
|
|
92
|
+
return r;
|
|
93
|
+
}
|
|
94
|
+
/** 分块、算纠错码、交错排列 */
|
|
95
|
+
function interleave(v, data) {
|
|
96
|
+
const [ec, b1, d1, b2] = BLOCKS_M[v - 1];
|
|
97
|
+
const gen = rsGenerator(ec);
|
|
98
|
+
const blocks = [];
|
|
99
|
+
let k = 0;
|
|
100
|
+
for (let i = 0; i < b1 + b2; i++) {
|
|
101
|
+
const len = d1 + (i < b1 ? 0 : 1);
|
|
102
|
+
blocks.push(data.slice(k, k + len));
|
|
103
|
+
k += len;
|
|
104
|
+
}
|
|
105
|
+
const ecs = blocks.map((b) => rsRemainder(b, gen));
|
|
106
|
+
const out = [];
|
|
107
|
+
for (let i = 0; i <= d1; i++)
|
|
108
|
+
for (const b of blocks)
|
|
109
|
+
if (i < b.length)
|
|
110
|
+
out.push(b[i]);
|
|
111
|
+
for (let i = 0; i < ec; i++)
|
|
112
|
+
for (const e of ecs)
|
|
113
|
+
out.push(e[i]);
|
|
114
|
+
return out;
|
|
115
|
+
}
|
|
116
|
+
const MASKS = [
|
|
117
|
+
(x, y) => (x + y) % 2 === 0,
|
|
118
|
+
(_x, y) => y % 2 === 0,
|
|
119
|
+
(x) => x % 3 === 0,
|
|
120
|
+
(x, y) => (x + y) % 3 === 0,
|
|
121
|
+
(x, y) => (Math.floor(x / 3) + Math.floor(y / 2)) % 2 === 0,
|
|
122
|
+
(x, y) => ((x * y) % 2) + ((x * y) % 3) === 0,
|
|
123
|
+
(x, y) => (((x * y) % 2) + ((x * y) % 3)) % 2 === 0,
|
|
124
|
+
(x, y) => (((x + y) % 2) + ((x * y) % 3)) % 2 === 0,
|
|
125
|
+
];
|
|
126
|
+
/** 画功能图形、填数据、挑罚分最低的掩码 */
|
|
127
|
+
function place(version, data) {
|
|
128
|
+
const size = version * 4 + 17;
|
|
129
|
+
const dark = Array.from({ length: size }, () => new Array(size).fill(false));
|
|
130
|
+
const fixed = Array.from({ length: size }, () => new Array(size).fill(false));
|
|
131
|
+
const set = (x, y, on) => {
|
|
132
|
+
dark[y][x] = on;
|
|
133
|
+
fixed[y][x] = true;
|
|
134
|
+
};
|
|
135
|
+
for (let i = 0; i < size; i++) {
|
|
136
|
+
set(6, i, i % 2 === 0);
|
|
137
|
+
set(i, 6, i % 2 === 0);
|
|
138
|
+
}
|
|
139
|
+
for (const [cx, cy] of [[3, 3], [size - 4, 3], [3, size - 4]]) {
|
|
140
|
+
for (let dy = -4; dy <= 4; dy++) {
|
|
141
|
+
for (let dx = -4; dx <= 4; dx++) {
|
|
142
|
+
const x = cx + dx;
|
|
143
|
+
const y = cy + dy;
|
|
144
|
+
const d = Math.max(Math.abs(dx), Math.abs(dy));
|
|
145
|
+
if (x >= 0 && x < size && y >= 0 && y < size)
|
|
146
|
+
set(x, y, d !== 2 && d !== 4);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const al = ALIGN[version - 1];
|
|
151
|
+
al.forEach((ay, i) => al.forEach((ax, j) => {
|
|
152
|
+
const last = al.length - 1;
|
|
153
|
+
if ((i === 0 && j === 0) || (i === 0 && j === last) || (i === last && j === 0))
|
|
154
|
+
return;
|
|
155
|
+
for (let dy = -2; dy <= 2; dy++)
|
|
156
|
+
for (let dx = -2; dx <= 2; dx++)
|
|
157
|
+
set(ax + dx, ay + dy, Math.max(Math.abs(dx), Math.abs(dy)) !== 1);
|
|
158
|
+
}));
|
|
159
|
+
formatBits(set, size, 0); // 先占位,挑好掩码再写真的
|
|
160
|
+
if (version >= 7) {
|
|
161
|
+
let rem = version;
|
|
162
|
+
for (let i = 0; i < 12; i++)
|
|
163
|
+
rem = (rem << 1) ^ ((rem >>> 11) * 0x1f25);
|
|
164
|
+
const bits = (version << 12) | rem;
|
|
165
|
+
for (let i = 0; i < 18; i++) {
|
|
166
|
+
const on = ((bits >>> i) & 1) === 1;
|
|
167
|
+
const a = size - 11 + (i % 3);
|
|
168
|
+
const b = Math.floor(i / 3);
|
|
169
|
+
set(a, b, on);
|
|
170
|
+
set(b, a, on);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// 数据:从右下角起两列一组,蛇形上下走,跳过第 6 列(竖的定时线)
|
|
174
|
+
let i = 0;
|
|
175
|
+
for (let right = size - 1; right >= 1; right -= 2) {
|
|
176
|
+
if (right === 6)
|
|
177
|
+
right = 5;
|
|
178
|
+
for (let vert = 0; vert < size; vert++) {
|
|
179
|
+
for (let j = 0; j < 2; j++) {
|
|
180
|
+
const x = right - j;
|
|
181
|
+
const y = ((right + 1) & 2) === 0 ? size - 1 - vert : vert;
|
|
182
|
+
if (!fixed[y][x] && i < data.length * 8) {
|
|
183
|
+
dark[y][x] = ((data[i >>> 3] >>> (7 - (i & 7))) & 1) === 1;
|
|
184
|
+
i++;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
let best = 0;
|
|
190
|
+
let bestScore = Infinity;
|
|
191
|
+
for (let m = 0; m < MASKS.length; m++) {
|
|
192
|
+
const trial = dark.map((row, y) => row.map((on, x) => (fixed[y][x] ? on : on !== MASKS[m](x, y))));
|
|
193
|
+
formatBits((x, y, on) => (trial[y][x] = on), size, m);
|
|
194
|
+
const s = penalty(trial);
|
|
195
|
+
if (s < bestScore) {
|
|
196
|
+
bestScore = s;
|
|
197
|
+
best = m;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const out = dark.map((row, y) => row.map((on, x) => (fixed[y][x] ? on : on !== MASKS[best](x, y))));
|
|
201
|
+
formatBits((x, y, on) => (out[y][x] = on), size, best);
|
|
202
|
+
return { size, version, dark: out };
|
|
203
|
+
}
|
|
204
|
+
/** 格式信息(纠错 M = 00 + 掩码号,BCH 后异或 0x5412),两份;外加那个固定的深色格 */
|
|
205
|
+
function formatBits(set, size, mask) {
|
|
206
|
+
const data = mask; // M 的两位是 00
|
|
207
|
+
let rem = data;
|
|
208
|
+
for (let i = 0; i < 10; i++)
|
|
209
|
+
rem = (rem << 1) ^ ((rem >>> 9) * 0x537);
|
|
210
|
+
const bits = ((data << 10) | rem) ^ 0x5412;
|
|
211
|
+
const bit = (i) => ((bits >>> i) & 1) === 1;
|
|
212
|
+
for (let i = 0; i <= 5; i++)
|
|
213
|
+
set(8, i, bit(i));
|
|
214
|
+
set(8, 7, bit(6));
|
|
215
|
+
set(8, 8, bit(7));
|
|
216
|
+
set(7, 8, bit(8));
|
|
217
|
+
for (let i = 9; i < 15; i++)
|
|
218
|
+
set(14 - i, 8, bit(i));
|
|
219
|
+
for (let i = 0; i < 8; i++)
|
|
220
|
+
set(size - 1 - i, 8, bit(i));
|
|
221
|
+
for (let i = 8; i < 15; i++)
|
|
222
|
+
set(8, size - 15 + i, bit(i));
|
|
223
|
+
set(8, size - 8, true);
|
|
224
|
+
}
|
|
225
|
+
/** 掩码罚分(规范的四条),越低越好扫 */
|
|
226
|
+
function penalty(m) {
|
|
227
|
+
const size = m.length;
|
|
228
|
+
let score = 0;
|
|
229
|
+
const lines = [];
|
|
230
|
+
for (let y = 0; y < size; y++)
|
|
231
|
+
lines.push(m[y], m.map((row) => row[y]));
|
|
232
|
+
const finderLike = /10111010000|00001011101/g;
|
|
233
|
+
for (const line of lines) {
|
|
234
|
+
let run = 1;
|
|
235
|
+
for (let i = 1; i <= size; i++) {
|
|
236
|
+
if (i < size && line[i] === line[i - 1])
|
|
237
|
+
run++;
|
|
238
|
+
else {
|
|
239
|
+
if (run >= 5)
|
|
240
|
+
score += run - 2;
|
|
241
|
+
run = 1;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// 外面算浅色:两头各补 4 个浅格再找像定位图形的那一串
|
|
245
|
+
const s = `0000${line.map((on) => (on ? 1 : 0)).join('')}0000`;
|
|
246
|
+
score += (s.match(finderLike)?.length ?? 0) * 40;
|
|
247
|
+
}
|
|
248
|
+
let darkCount = 0;
|
|
249
|
+
for (let y = 0; y < size; y++) {
|
|
250
|
+
for (let x = 0; x < size; x++) {
|
|
251
|
+
if (m[y][x])
|
|
252
|
+
darkCount++;
|
|
253
|
+
if (x + 1 < size && y + 1 < size) {
|
|
254
|
+
const c = m[y][x];
|
|
255
|
+
if (m[y][x + 1] === c && m[y + 1][x] === c && m[y + 1][x + 1] === c)
|
|
256
|
+
score += 3;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
const total = size * size;
|
|
261
|
+
score += Math.max(0, Math.ceil(Math.abs(darkCount * 20 - total * 10) / total) - 1) * 10;
|
|
262
|
+
return score;
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=qr.js.map
|
package/dist/qr.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr.js","sourceRoot":"","sources":["../src/qr.ts"],"names":[],"mappings":"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"}
|
package/dist/share.d.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 分享卡(0.12.0,仓库根 docs/social.md 1.1):结算页的"分享"按钮生成一张 1080×1350 的战绩图(Canvas 画,不经服务器,0 行写入),
|
|
3
|
-
* 手机上支持带文件的 navigator.share 就直接调系统分享,不支持的出预览,"保存图片""复制链接"两个按钮。
|
|
4
|
-
*
|
|
5
|
-
* - 游戏只交数据(`ShareCard`),画法统一在这里,几个游戏风格一致;kit 不认识任何游戏,名字、图标、主题色都由游戏给。
|
|
6
|
-
* - 这个文件只在调用时碰 DOM,import 时不碰(房间、测试里 import 没事);排版的算法是纯函数,测试在 test/share.test.ts。
|
|
7
|
-
* - 图上只有游戏给的数据:别人的隐藏信息(没摊的底牌、手牌)游戏自己别放进来。
|
|
8
|
-
*/
|
|
9
1
|
/** 卡的尺寸:竖版 4:5,社交软件里不被裁 */
|
|
10
2
|
export declare const CARD_W = 1080;
|
|
11
3
|
export declare const CARD_H = 1350;
|
|
@@ -80,14 +72,41 @@ export declare function artRect(src: {
|
|
|
80
72
|
w: number;
|
|
81
73
|
h: number;
|
|
82
74
|
}): [number, number, number, number, number, number, number, number];
|
|
83
|
-
/**
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
75
|
+
/**
|
|
76
|
+
* 码里和分享出去的链接(0.15.0):只认运行时的 origin,游戏给的 url 只取路径、查询和 # 后面的部分。
|
|
77
|
+
* 这样 kit 和游戏里都不写域名,单独部署的游戏(workers.dev)扫出来也是它自己
|
|
78
|
+
*/
|
|
79
|
+
export declare function shareLink(url: string, origin: string): string;
|
|
80
|
+
/** 系统分享的文字末尾带上链接(0.15.0):有的 App 只取 text、不取 url */
|
|
81
|
+
export declare function shareText(text: string, link: string): string;
|
|
82
|
+
/** 微信内置浏览器(UA 带 MicroMessenger,含企业微信) */
|
|
83
|
+
export declare function isWeChat(ua: string): boolean;
|
|
84
|
+
/** 预览层怎么出(0.15.0):微信里用 data: URL、提示长按、不给"保存图片";别的浏览器照旧 */
|
|
85
|
+
export declare function previewMode(ua: string): {
|
|
86
|
+
dataUrl: boolean;
|
|
87
|
+
tip: string;
|
|
88
|
+
save: boolean;
|
|
89
|
+
};
|
|
90
|
+
/** 二维码在卡上的框:白底留白 ≥ 4 格(扫码的规范要求),每格整数像素、对齐像素,截图后也清楚 */
|
|
91
|
+
export declare const QR_BOX = 248;
|
|
92
|
+
export declare function qrLayout(size: number, box?: number): {
|
|
93
|
+
cell: number;
|
|
94
|
+
pad: number;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* 画一张卡。canvas 不给就新建一个 1080×1350 的。link 给了(0.15.0,prepareShare 用 shareLink 算好的)就在右下角画二维码,
|
|
98
|
+
* 太长编不了码就不画
|
|
99
|
+
*/
|
|
100
|
+
export declare function drawShareCard(input: ShareCard, canvas?: HTMLCanvasElement, link?: string): Promise<HTMLCanvasElement>;
|
|
101
|
+
/** 画成 PNG;link 见 drawShareCard */
|
|
102
|
+
export declare function shareCardBlob(card: ShareCard, link?: string): Promise<Blob>;
|
|
87
103
|
export interface ShareOptions {
|
|
88
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* 分享出去的链接:游戏地址,好友房结算带房间码。只用它的路径、查询和 # 后面的部分,前面一律换成运行时的 location.origin(0.15.0),
|
|
106
|
+
* 写相对路径(`./?room=123456`)或绝对地址都行;卡上的二维码、系统分享、"复制链接"用的都是换过的这一个
|
|
107
|
+
*/
|
|
89
108
|
url: string;
|
|
90
|
-
/**
|
|
109
|
+
/** 系统分享里的一句话,默认用卡的游戏名和大数字拼;末尾自动带上链接(0.15.0) */
|
|
91
110
|
text?: string;
|
|
92
111
|
/** 存图的文件名,默认 share.png */
|
|
93
112
|
fileName?: string;
|
package/dist/share.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../src/share.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../src/share.ts"],"names":[],"mappings":"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"}
|