@haihire/baccarat-score-board-road 1.0.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/LICENSE +21 -0
- package/README.md +194 -0
- package/dist/cjs/BigEyeRoad.js +399 -0
- package/dist/cjs/BigEyeRoad.js.map +1 -0
- package/dist/cjs/BigRoad.js +222 -0
- package/dist/cjs/BigRoad.js.map +1 -0
- package/dist/cjs/CockroachRoad.js +512 -0
- package/dist/cjs/CockroachRoad.js.map +1 -0
- package/dist/cjs/Expects.js +23 -0
- package/dist/cjs/Expects.js.map +1 -0
- package/dist/cjs/ScoreBoard.js +139 -0
- package/dist/cjs/ScoreBoard.js.map +1 -0
- package/dist/cjs/SmallRoad.js +505 -0
- package/dist/cjs/SmallRoad.js.map +1 -0
- package/dist/cjs/index.js +19 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/types.js +11 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/BigEyeRoad.js +395 -0
- package/dist/esm/BigEyeRoad.js.map +1 -0
- package/dist/esm/BigRoad.js +218 -0
- package/dist/esm/BigRoad.js.map +1 -0
- package/dist/esm/CockroachRoad.js +508 -0
- package/dist/esm/CockroachRoad.js.map +1 -0
- package/dist/esm/Expects.js +20 -0
- package/dist/esm/Expects.js.map +1 -0
- package/dist/esm/ScoreBoard.js +135 -0
- package/dist/esm/ScoreBoard.js.map +1 -0
- package/dist/esm/SmallRoad.js +501 -0
- package/dist/esm/SmallRoad.js.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/types.js +10 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/types/BigEyeRoad.d.ts +24 -0
- package/dist/types/BigEyeRoad.d.ts.map +1 -0
- package/dist/types/BigRoad.d.ts +17 -0
- package/dist/types/BigRoad.d.ts.map +1 -0
- package/dist/types/CockroachRoad.d.ts +26 -0
- package/dist/types/CockroachRoad.d.ts.map +1 -0
- package/dist/types/Expects.d.ts +20 -0
- package/dist/types/Expects.d.ts.map +1 -0
- package/dist/types/ScoreBoard.d.ts +69 -0
- package/dist/types/ScoreBoard.d.ts.map +1 -0
- package/dist/types/SmallRoad.d.ts +25 -0
- package/dist/types/SmallRoad.d.ts.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types.d.ts +112 -0
- package/dist/types/types.d.ts.map +1 -0
- package/package.json +65 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 haihire
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# @haihire/baccarat-score-board-road
|
|
2
|
+
|
|
3
|
+
A baccarat scoreboard roadmap generator. Feed it a shoe's result log and it
|
|
4
|
+
builds the **Big Road** plus the three Chinese-style **derived roads** (Big Eye,
|
|
5
|
+
Small, Cockroach), with optional **next-hand prediction**.
|
|
6
|
+
|
|
7
|
+
[]()
|
|
8
|
+
[]()
|
|
9
|
+
[]()
|
|
10
|
+
[]()
|
|
11
|
+
[]()
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { ScoreBoard } from "@haihire/baccarat-score-board-road";
|
|
15
|
+
|
|
16
|
+
const board = new ScoreBoard(log);
|
|
17
|
+
const { bigRoad, bigEyeRoad, smallRoad, cockroachRoad } = board.getAllRoads();
|
|
18
|
+
const next = board.predict(); // { player: {...}, banker: {...} }
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Why this package
|
|
22
|
+
|
|
23
|
+
- **Fully typed** — proper unions and interfaces (`Winner`, `Mark`, `BigRoadCell`, …), not `any`. Real autocomplete and compile-time checks.
|
|
24
|
+
- **ESM + CommonJS** — dual build with an `exports` map, so it works in modern bundlers (tree-shakable) and legacy Node alike.
|
|
25
|
+
- **Zero runtime dependencies** — nothing pulled into your bundle.
|
|
26
|
+
- **One-line API** — the `ScoreBoard` facade hides the Big-Road→derived-road wiring. No manual `gubun`/`.old`/`col * 2` bookkeeping (the low-level classes are still exported if you want them).
|
|
27
|
+
- **Built-in prediction** — "ask the road" (問路) for both a hypothetical Player and Banker next hand.
|
|
28
|
+
- **MIT licensed** — free for commercial use.
|
|
29
|
+
- **Battle-tested** — the road algorithm runs in a live baccarat product, and the test suite verifies it against **real production shoes** (including the lossless-placement invariant: every Player/Banker/Tie result is preserved).
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Install
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm install @haihire/baccarat-score-board-road
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Usage (recommended: `ScoreBoard`)
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
import { ScoreBoard, RoundInput } from "@haihire/baccarat-score-board-road";
|
|
43
|
+
|
|
44
|
+
const log: RoundInput[] = [
|
|
45
|
+
{ sWinner: "Player", sPair: "", sPlayer_Score: 8, sBanker_Score: 5 },
|
|
46
|
+
{ sWinner: "Banker", sPair: "Banker_Pair", sPlayer_Score: 4, sBanker_Score: 7 },
|
|
47
|
+
// ...one entry per round of the shoe
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
const board = new ScoreBoard(log, {
|
|
51
|
+
col: 13, // Big Road width (derived roads use col * 2). Default 13
|
|
52
|
+
cut: true, // drop the oldest columns past `col`. Default true
|
|
53
|
+
color: false, // Tie starts a new column (score-color mode). Default false
|
|
54
|
+
trimLeadingTie: true, // drop leading ties. Default true
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Everything in one pass (Big Road is computed only once):
|
|
58
|
+
const { bigRoad, bigEyeRoad, smallRoad, cockroachRoad } = board.getAllRoads();
|
|
59
|
+
|
|
60
|
+
// Or individually:
|
|
61
|
+
const big = board.getBigRoad(); // { old, new, gubunIndex, over }
|
|
62
|
+
const bigEye = board.getBigEyeRoad(); // MarkCell[][]
|
|
63
|
+
|
|
64
|
+
// Render the Big Road:
|
|
65
|
+
for (let col = 0; col < bigRoad.new.length; col++) {
|
|
66
|
+
for (let row = 0; row < bigRoad.new[col].length; row++) {
|
|
67
|
+
const cell = bigRoad.new[col][row];
|
|
68
|
+
if (cell.Win) draw(cell.Win, cell.Pair, cell.WinScore, cell.TieCount);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Prediction (next hand)
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
const next = board.predict();
|
|
77
|
+
// {
|
|
78
|
+
// player: { bigEye: "Player"|"Banker"|"", small: ..., cockroach: ... },
|
|
79
|
+
// banker: { bigEye: ..., small: ..., cockroach: ... },
|
|
80
|
+
// }
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
`predict()` reproduces the "ask the road" technique: it appends a hypothetical
|
|
84
|
+
next round (once as a Player win, once as a Banker win), rebuilds the Big Road,
|
|
85
|
+
and reports the mark each derived road would draw.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Input format
|
|
90
|
+
|
|
91
|
+
Each element of the log is one round. Only `sWinner`, `sPair`, and the two
|
|
92
|
+
scores are read — extra fields (raw card data, etc.) are ignored, so DB records
|
|
93
|
+
can be passed straight in.
|
|
94
|
+
|
|
95
|
+
```ts
|
|
96
|
+
interface RoundInput {
|
|
97
|
+
sWinner: "Player" | "Banker" | "Tie"; // required
|
|
98
|
+
sPair?: "" | "Player_Pair" | "Banker_Pair" | "Player_Pair,Banker_Pair";
|
|
99
|
+
sPlayer_Score?: number | string; // used in color mode
|
|
100
|
+
sBanker_Score?: number | string;
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Output types
|
|
105
|
+
|
|
106
|
+
### Big Road → `BigRoadResult`
|
|
107
|
+
```ts
|
|
108
|
+
interface BigRoadResult {
|
|
109
|
+
old: BigRoadCell[][]; // untrimmed 6×200 source grid (input for derived roads)
|
|
110
|
+
new: BigRoadCell[][]; // trimmed/padded render grid
|
|
111
|
+
gubunIndex: ColumnBreak[]; // column breaks ("dragon tail")
|
|
112
|
+
over: boolean; // whether any column was cut off
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
interface BigRoadCell {
|
|
116
|
+
TieCount: number;
|
|
117
|
+
Win: "Player" | "Banker" | "Tie" | "";
|
|
118
|
+
Pair?: 0 | 1 | 2 | 3; // 0 none, 1 player, 2 banker, 3 both
|
|
119
|
+
WinScore?: number;
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Derived roads → `MarkCell[][]`
|
|
124
|
+
```ts
|
|
125
|
+
interface MarkCell {
|
|
126
|
+
Mark: "Player" | "Banker" | ""; // Player = blue, Banker = red, "" = empty
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
For the Chinese-style roads only the **color** is meaningful; it does not map
|
|
130
|
+
directly to an actual P/B win.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Low-level API
|
|
135
|
+
|
|
136
|
+
If you need direct control, the road classes are exported. Note the wiring the
|
|
137
|
+
facade normally handles for you:
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
import { BigRoad, BigEyeRoad, SmallRoad, CockroachRoad } from "@haihire/baccarat-score-board-road";
|
|
141
|
+
|
|
142
|
+
const Row = 6;
|
|
143
|
+
const g1 = new BigRoad({ array: log, row: Row, col: 13, cut: true, color: false }).getBigRoad();
|
|
144
|
+
|
|
145
|
+
const g2 = new BigEyeRoad({
|
|
146
|
+
gubun: g1.gubunIndex, // ★ the gubunIndex, under the key 'gubun'
|
|
147
|
+
row: Row,
|
|
148
|
+
col: 13 * 2, // ★ derived roads use col * 2
|
|
149
|
+
cut: true,
|
|
150
|
+
}).getBigEyeRoad(g1.old); // ★ pass g1.old (untrimmed), NOT g1.new
|
|
151
|
+
|
|
152
|
+
const g3 = new SmallRoad({ gubun: g1.gubunIndex, row: Row, col: 13 * 2, cut: true }).getSmallRoad(g1.old);
|
|
153
|
+
const g4 = new CockroachRoad({ gubun: g1.gubunIndex, row: Row, col: 13 * 2, cut: true }).getCockroachRoad(g1.old);
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Gotchas the facade removes for you:
|
|
157
|
+
1. Derived roads consume **`g1.old`** (untrimmed), not `g1.new`.
|
|
158
|
+
2. The constructor key is **`gubun`** (its value is `g1.gubunIndex`).
|
|
159
|
+
3. Derived-road `col` is conventionally **`col * 2`**.
|
|
160
|
+
4. `color` changes how the Big Road handles a Tie (new column vs. count).
|
|
161
|
+
|
|
162
|
+
For lower-level prediction, the derived roads accept `(bigRoad, inGame, who)` and
|
|
163
|
+
record the last mark on the exported `Expects` object.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Build / publish (maintainers)
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
npm install # install devDependencies (typescript, rimraf)
|
|
171
|
+
npm run build # src → dist/cjs (CommonJS) + dist/esm (ESM) + dist/types (.d.ts)
|
|
172
|
+
npm run typecheck # type-check only, no emit
|
|
173
|
+
npm publish # prepublishOnly runs build; publishes with --access public
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Build layout:
|
|
177
|
+
- `dist/cjs/` — CommonJS (`require`), tagged via `dist/cjs/package.json`
|
|
178
|
+
- `dist/esm/` — ES modules (`import`), tagged via `dist/esm/package.json`
|
|
179
|
+
- `dist/types/` — shared TypeScript declarations
|
|
180
|
+
|
|
181
|
+
### Tests
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
npm test # run the Vitest suite once
|
|
185
|
+
npm run test:watch
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Coverage includes placement rules, the `ScoreBoard` facade, and real shoes
|
|
189
|
+
exported from production (`test/fixtures/shoes.json`): a lossless-placement
|
|
190
|
+
invariant, a valid-mark invariant, and a regression snapshot.
|
|
191
|
+
|
|
192
|
+
## License
|
|
193
|
+
|
|
194
|
+
MIT © haihire
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BigEyeRoad = void 0;
|
|
4
|
+
const Expects_js_1 = require("./Expects.js");
|
|
5
|
+
/* eslint-disable no-loop-func */
|
|
6
|
+
class BigEyeRoad {
|
|
7
|
+
constructor(info) {
|
|
8
|
+
this.row = info.row;
|
|
9
|
+
this.col = info.col;
|
|
10
|
+
this.bigEyeRoad = [];
|
|
11
|
+
this.visited = [];
|
|
12
|
+
this.Before = [];
|
|
13
|
+
this.columnBreaks = info.gubun;
|
|
14
|
+
this.cut = info.cut;
|
|
15
|
+
}
|
|
16
|
+
getBigEyeRoad(bigRoad, inGame = false, Who = "") {
|
|
17
|
+
if (bigRoad.length === 0) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
this.bigEyeRoad = [];
|
|
21
|
+
let copyBigRoad = [];
|
|
22
|
+
let rows = [];
|
|
23
|
+
//i === row / j === col
|
|
24
|
+
for (let j = 0; j < bigRoad[0].length; j++) {
|
|
25
|
+
for (let i = 0; i < this.row; i++) {
|
|
26
|
+
if (this.visited.some((el) => el.i === i && el.j === j)) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (bigRoad[i][j].Win !== "") {
|
|
30
|
+
copyBigRoad.push(bigRoad[i][j].Win);
|
|
31
|
+
}
|
|
32
|
+
if (i === 5 && j === 0) {
|
|
33
|
+
let offset = 1;
|
|
34
|
+
while (bigRoad[i][j + offset] &&
|
|
35
|
+
bigRoad[i][j + offset].Win !== "" &&
|
|
36
|
+
bigRoad[i][j].Win === bigRoad[i][j + offset].Win &&
|
|
37
|
+
!this.columnBreaks.some((el) => el.rowIndex === i && el.colIndex === j + offset)) {
|
|
38
|
+
copyBigRoad.push(bigRoad[i][j + offset].Win);
|
|
39
|
+
this.visited.push({ i: i, j: j + offset });
|
|
40
|
+
offset += 1;
|
|
41
|
+
}
|
|
42
|
+
if (this.columnBreaks.some((el) => el.rowIndex === i && el.colIndex === j + offset)) {
|
|
43
|
+
copyBigRoad.push(bigRoad[i][j + offset].Win);
|
|
44
|
+
this.visited.push({ i: i, j: j + offset });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if ((i === 0 && j === 1) ||
|
|
48
|
+
(bigRoad[1][1].Win === "" && bigRoad[0][2].Win === "") ||
|
|
49
|
+
bigRoad[i][j].Win === "") {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (!copyBigRoad.some((el) => el !== copyBigRoad[0])) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
this.evaluatePosition(bigRoad, i, j, copyBigRoad, rows);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
this.bigEyeRoad = this.getCopy(rows);
|
|
59
|
+
if (inGame) {
|
|
60
|
+
if (Who === "Player") {
|
|
61
|
+
Expects_js_1.Expects.expectPGun2s = rows[rows.length - 1]
|
|
62
|
+
? rows[rows.length - 1].Mark
|
|
63
|
+
: "";
|
|
64
|
+
}
|
|
65
|
+
else if (Who === "Banker") {
|
|
66
|
+
Expects_js_1.Expects.expectBGun2s = rows[rows.length - 1]
|
|
67
|
+
? rows[rows.length - 1].Mark
|
|
68
|
+
: "";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return this.bigEyeRoad;
|
|
72
|
+
}
|
|
73
|
+
evaluatePosition(bigRoad, i, j, copyBigRoad, rows, re = false) {
|
|
74
|
+
if (this.checkBox(copyBigRoad) && bigRoad[i][j].Win !== "" && i !== 0) {
|
|
75
|
+
//박스완성
|
|
76
|
+
// cc.log('Banker-checkBox');
|
|
77
|
+
rows.push({ Mark: "Banker" });
|
|
78
|
+
}
|
|
79
|
+
else if (this.checkWillBox(copyBigRoad) &&
|
|
80
|
+
bigRoad[i][j].Win !== "" &&
|
|
81
|
+
i !== 0) {
|
|
82
|
+
// 박스 따라가는중
|
|
83
|
+
// cc.log('Banker-checkWillBox');
|
|
84
|
+
rows.push({ Mark: "Banker" });
|
|
85
|
+
}
|
|
86
|
+
else if (this.checkPlump(copyBigRoad) &&
|
|
87
|
+
bigRoad[i][j].Win !== "" &&
|
|
88
|
+
i === 0) {
|
|
89
|
+
//퐁당퐁당
|
|
90
|
+
// cc.log('Banker-checkPlump');
|
|
91
|
+
rows.push({ Mark: "Banker" });
|
|
92
|
+
}
|
|
93
|
+
else if (this.checkBoxComp(copyBigRoad) &&
|
|
94
|
+
bigRoad[i][j].Win !== "" &&
|
|
95
|
+
i === 0) {
|
|
96
|
+
// 박스 완성 후
|
|
97
|
+
// cc.log('Banker-checkBoxComp');
|
|
98
|
+
rows.push({ Mark: "Banker" });
|
|
99
|
+
}
|
|
100
|
+
else if (this.checkWillLine(copyBigRoad) && bigRoad[i][j].Win !== "") {
|
|
101
|
+
// 줄
|
|
102
|
+
// cc.log('Banker-checkWillLine');
|
|
103
|
+
rows.push({ Mark: "Banker" });
|
|
104
|
+
}
|
|
105
|
+
else if (bigRoad[i][j].Win !== "") {
|
|
106
|
+
// cc.log('Player-6번');
|
|
107
|
+
rows.push({ Mark: "Player" });
|
|
108
|
+
}
|
|
109
|
+
if (!re)
|
|
110
|
+
this.ChangeJul(bigRoad, i, j, copyBigRoad, rows);
|
|
111
|
+
}
|
|
112
|
+
ChangeJul(bigRoad, i, j, copyBigRoad, rows) {
|
|
113
|
+
let offset = 1;
|
|
114
|
+
while (bigRoad[i][j + offset] &&
|
|
115
|
+
bigRoad[i][j + offset].Win !== "" &&
|
|
116
|
+
bigRoad[i][j].Win === bigRoad[i][j + offset].Win &&
|
|
117
|
+
this.columnBreaks.some((el) => el.rowIndex === i && el.colIndex === j + offset)) {
|
|
118
|
+
// cc.log('특별1',this.columnBreaks);
|
|
119
|
+
copyBigRoad.push(bigRoad[i][j + offset].Win);
|
|
120
|
+
this.evaluatePosition(bigRoad, i, j + offset, copyBigRoad, rows, true);
|
|
121
|
+
this.visited.push({ i: i, j: j + offset });
|
|
122
|
+
offset += 1;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
checkBoxComp(rows) {
|
|
126
|
+
const reRows = [...rows].reverse();
|
|
127
|
+
const reverseArray = [];
|
|
128
|
+
const LastArray = [];
|
|
129
|
+
for (let i = 0; i < reRows.length; i++) {
|
|
130
|
+
if (i === 0) {
|
|
131
|
+
reverseArray.push(reRows[i]);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
if (reverseArray.includes(reRows[i])) {
|
|
135
|
+
reverseArray.push(reRows[i]);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
if (LastArray.length === 3) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
LastArray.push([...reverseArray]);
|
|
142
|
+
reverseArray.length = 0;
|
|
143
|
+
reverseArray.push(reRows[i]);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (LastArray.length <= 1) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
if (LastArray.length === 2) {
|
|
151
|
+
LastArray.push([...reverseArray]);
|
|
152
|
+
}
|
|
153
|
+
//최근 전적이 하나이며 전 전적과 전전 전적이 같다면 true mark 빨강
|
|
154
|
+
if (LastArray[0].length === 1 &&
|
|
155
|
+
LastArray[1].length === LastArray[2].length) {
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
checkPlump(rows) {
|
|
163
|
+
const reRows = [...rows].reverse();
|
|
164
|
+
const reverseArray = [];
|
|
165
|
+
const LastArray = [];
|
|
166
|
+
for (let i = 0; i < reRows.length; i++) {
|
|
167
|
+
if (i === 0) {
|
|
168
|
+
reverseArray.push(reRows[i]);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
if (reverseArray.includes(reRows[i])) {
|
|
172
|
+
reverseArray.push(reRows[i]);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
if (LastArray.length === 3) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
LastArray.push([...reverseArray]);
|
|
179
|
+
reverseArray.length = 0;
|
|
180
|
+
reverseArray.push(reRows[i]);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (LastArray.length < 2) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
if (LastArray.length === 2) {
|
|
188
|
+
LastArray.push([...reverseArray]);
|
|
189
|
+
}
|
|
190
|
+
//최근 전적 === 전 전적 === 전전 전적 갯수가 모두 1이면 true mark 빨강
|
|
191
|
+
if (LastArray[0].length === 1 &&
|
|
192
|
+
LastArray[1].length === 1 &&
|
|
193
|
+
LastArray[2].length === 1) {
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
checkWillLine(rows) {
|
|
201
|
+
const reRows = [...rows].reverse();
|
|
202
|
+
const reverseArray = [];
|
|
203
|
+
const LastArray = [];
|
|
204
|
+
for (let i = 0; i < reRows.length; i++) {
|
|
205
|
+
if (i === 0) {
|
|
206
|
+
reverseArray.push(reRows[i]);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
if (reverseArray.includes(reRows[i])) {
|
|
210
|
+
reverseArray.push(reRows[i]);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
if (LastArray.length === 2) {
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
LastArray.push([...reverseArray]);
|
|
217
|
+
reverseArray.length = 0;
|
|
218
|
+
reverseArray.push(reRows[i]);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
if (LastArray.length === 1) {
|
|
223
|
+
LastArray.push([...reverseArray]);
|
|
224
|
+
}
|
|
225
|
+
//최근 전적 갯수가 전 전적 갯수보다 2이상 많다면 true mark 빨강
|
|
226
|
+
if (LastArray[0].length - LastArray[1].length >= 2) {
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
checkWillBox(rows) {
|
|
234
|
+
//박스가 되가는중
|
|
235
|
+
const reRows = [...rows].reverse();
|
|
236
|
+
const reverseArray = [];
|
|
237
|
+
const LastArray = [];
|
|
238
|
+
for (let i = 0; i < reRows.length; i++) {
|
|
239
|
+
if (i === 0) {
|
|
240
|
+
reverseArray.push(reRows[i]);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
if (reverseArray.includes(reRows[i])) {
|
|
244
|
+
reverseArray.push(reRows[i]);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
if (LastArray.length === 2) {
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
LastArray.push([...reverseArray]);
|
|
251
|
+
reverseArray.length = 0;
|
|
252
|
+
reverseArray.push(reRows[i]);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (LastArray.length === 1) {
|
|
257
|
+
LastArray.push([...reverseArray]);
|
|
258
|
+
}
|
|
259
|
+
if (this.Before.length !== 0 &&
|
|
260
|
+
!this.arraysEqual(this.Before, LastArray[1])) {
|
|
261
|
+
this.Before = LastArray[1];
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
//최근 전적이 전 전적갯수보다 적다면 true mark 빨강
|
|
265
|
+
if (LastArray[0].length < LastArray[1].length) {
|
|
266
|
+
this.Before = LastArray[1];
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
arraysEqual(arr1, arr2) {
|
|
274
|
+
if (arr1.length !== arr2.length) {
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
for (let i = 0; i < arr1.length; i++) {
|
|
278
|
+
if (arr1[i] !== arr2[i]) {
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
checkBox(rows) {
|
|
285
|
+
//박스 완성
|
|
286
|
+
const reRows = [...rows].reverse();
|
|
287
|
+
const reverseArray = [];
|
|
288
|
+
const LastArray = [];
|
|
289
|
+
for (let i = 0; i < reRows.length; i++) {
|
|
290
|
+
if (i === 0) {
|
|
291
|
+
reverseArray.push(reRows[i]);
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
if (reverseArray.includes(reRows[i])) {
|
|
295
|
+
reverseArray.push(reRows[i]);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
if (LastArray.length === 2) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
LastArray.push([...reverseArray]);
|
|
302
|
+
reverseArray.length = 0;
|
|
303
|
+
reverseArray.push(reRows[i]);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (LastArray.length === 1) {
|
|
308
|
+
LastArray.push([...reverseArray]);
|
|
309
|
+
}
|
|
310
|
+
//최근 전적과 전 전적갯수가 같다면 true mark 빨강
|
|
311
|
+
if (LastArray[0].length === LastArray[1].length) {
|
|
312
|
+
return true;
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
getCopy(data) {
|
|
319
|
+
let copyLoad = [];
|
|
320
|
+
for (let i = 0; i < 6; i++) {
|
|
321
|
+
let rows = [];
|
|
322
|
+
for (let j = 0; j < 200; j++) {
|
|
323
|
+
rows.push({ Mark: "" });
|
|
324
|
+
}
|
|
325
|
+
copyLoad.push(rows);
|
|
326
|
+
}
|
|
327
|
+
let rowIndex = 0;
|
|
328
|
+
let colIndex = 0;
|
|
329
|
+
let tempColIndex = 0;
|
|
330
|
+
for (let i = 0; i < data.length; i++) {
|
|
331
|
+
if (data[i].Mark === copyLoad[rowIndex][colIndex].Mark) {
|
|
332
|
+
rowIndex += 1;
|
|
333
|
+
if (rowIndex >= 6 ||
|
|
334
|
+
copyLoad[rowIndex][colIndex].Mark !== "" ||
|
|
335
|
+
tempColIndex !== 0) {
|
|
336
|
+
rowIndex -= 1;
|
|
337
|
+
colIndex += 1;
|
|
338
|
+
if (tempColIndex === 0) {
|
|
339
|
+
tempColIndex = colIndex;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
copyLoad[rowIndex][colIndex].Mark = data[i].Mark;
|
|
343
|
+
}
|
|
344
|
+
else if (data[i].Mark !== copyLoad[rowIndex][colIndex].Mark) {
|
|
345
|
+
colIndex += 1;
|
|
346
|
+
rowIndex = 0;
|
|
347
|
+
if (tempColIndex !== 0) {
|
|
348
|
+
colIndex = tempColIndex;
|
|
349
|
+
tempColIndex = 0;
|
|
350
|
+
}
|
|
351
|
+
if (i === 0) {
|
|
352
|
+
rowIndex = 0;
|
|
353
|
+
colIndex = 0;
|
|
354
|
+
}
|
|
355
|
+
copyLoad[rowIndex][colIndex].Mark = data[i].Mark;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return this.updateRows(copyLoad);
|
|
359
|
+
}
|
|
360
|
+
updateArr(tArr) {
|
|
361
|
+
let arr = [...tArr.reverse()];
|
|
362
|
+
for (let i = 0; i < arr.length; i++) {
|
|
363
|
+
if (arr[i].Mark !== "") {
|
|
364
|
+
arr = arr.slice(i);
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
if (arr.length === 200) {
|
|
369
|
+
return [];
|
|
370
|
+
}
|
|
371
|
+
return arr.reverse();
|
|
372
|
+
}
|
|
373
|
+
updateRows(data) {
|
|
374
|
+
let t0 = this.updateArr(data[0]);
|
|
375
|
+
let t1 = this.updateArr(data[1]);
|
|
376
|
+
let t2 = this.updateArr(data[2]);
|
|
377
|
+
let t3 = this.updateArr(data[3]);
|
|
378
|
+
let t4 = this.updateArr(data[4]);
|
|
379
|
+
let t5 = this.updateArr(data[5]);
|
|
380
|
+
const arrays = [t0, t1, t2, t3, t4, t5];
|
|
381
|
+
const maxLength = Math.max(...arrays.map((array) => array.length));
|
|
382
|
+
const reMax = Math.max(maxLength, this.col);
|
|
383
|
+
const modifiedArrays = arrays.map((array) => {
|
|
384
|
+
const newArray = [...array];
|
|
385
|
+
while (newArray.length < reMax) {
|
|
386
|
+
newArray.push({ Mark: "" });
|
|
387
|
+
}
|
|
388
|
+
if (this.cut) {
|
|
389
|
+
while (newArray.length > this.col) {
|
|
390
|
+
newArray.shift();
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
return newArray;
|
|
394
|
+
});
|
|
395
|
+
return modifiedArrays;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
exports.BigEyeRoad = BigEyeRoad;
|
|
399
|
+
//# sourceMappingURL=BigEyeRoad.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BigEyeRoad.js","sourceRoot":"","sources":["../../src/BigEyeRoad.ts"],"names":[],"mappings":"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"}
|