{"version":3,"file":"Gobang.js","sources":["../../build/src/utils.js","../../build/src/Gobang.js"],"sourcesContent":["import { Color, text, Stack, Text, layoutConfig, LayoutSpec, gravity, pullable, stack, image, log } from \"doric\";\nexport const icon_refresh = 'data:image/png;base64,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';\nexport const colors = [\n    \"#70a1ff\",\n    \"#7bed9f\",\n    \"#ff6b81\",\n    \"#a4b0be\",\n    \"#f0932b\",\n    \"#eb4d4b\",\n    \"#6ab04c\",\n    \"#e056fd\",\n    \"#686de0\",\n    \"#30336b\",\n].map(e => Color.parse(e));\nexport function label(str) {\n    return text({\n        text: str,\n        textSize: 16,\n    });\n}\nexport function box(idx = 0) {\n    return (new Stack).also(it => {\n        it.width = it.height = 20;\n        it.backgroundColor = colors[idx || 0];\n    });\n}\nexport function boxStr(str, idx = 0) {\n    return (new Text).also(it => {\n        it.width = it.height = 20;\n        it.text = str;\n        it.textColor = Color.WHITE;\n        it.backgroundColor = colors[idx || 0];\n    });\n}\nexport function title(str) {\n    return text({\n        text: str,\n        layoutConfig: layoutConfig().configWidth(LayoutSpec.MOST),\n        textSize: 30,\n        textColor: Color.WHITE,\n        backgroundColor: colors[1],\n        textAlignment: gravity().center(),\n        height: 50,\n    });\n}\nexport function rotatedArrow() {\n    let refreshImage;\n    return pullable(stack([\n        image({\n            layoutConfig: layoutConfig().just().configMargin({ top: 50, bottom: 10, }),\n            width: 30,\n            height: 30,\n            imageBase64: icon_refresh,\n        }).also(v => refreshImage = v),\n    ]), {\n        startAnimation: () => {\n            log('startAnimation');\n        },\n        stopAnimation: () => {\n            log('stopAnimation');\n        },\n        setPullingDistance: (distance) => {\n            refreshImage.rotation = distance / 30;\n        },\n    });\n}\n//# sourceMappingURL=utils.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Stack, hlayout, Color, stack, layoutConfig, LayoutSpec, vlayout, ViewHolder, ViewModel, VMPanel, scroller, modal, text, gravity, Gravity, popover, navbar } from \"doric\";\nimport { colors } from \"./utils\";\nvar State;\n(function (State) {\n    State[State[\"Unspecified\"] = 0] = \"Unspecified\";\n    State[State[\"BLACK\"] = 1] = \"BLACK\";\n    State[State[\"WHITE\"] = 2] = \"WHITE\";\n})(State || (State = {}));\nconst count = 13;\nclass AIComputer {\n    constructor(matrix) {\n        this.wins = [];\n        this.winCount = 0;\n        this.matrix = matrix;\n        for (let y = 0; y < count; y++) {\n            for (let x = 0; x < count - 4; x++) {\n                this.wins.push([]);\n                for (let k = 0; k < 5; k++) {\n                    this.wins[this.winCount].push({\n                        x: x + k,\n                        y,\n                    });\n                }\n                this.winCount++;\n            }\n        }\n        for (let x = 0; x < count; x++) {\n            for (let y = 0; y < count - 4; y++) {\n                this.wins.push([]);\n                for (let k = 0; k < 5; k++) {\n                    this.wins[this.winCount].push({\n                        x,\n                        y: y + k,\n                    });\n                }\n                this.winCount++;\n            }\n        }\n        for (let x = 0; x < count - 4; x++) {\n            for (let y = 0; y < count - 4; y++) {\n                this.wins.push([]);\n                for (let k = 0; k < 5; k++) {\n                    this.wins[this.winCount].push({\n                        x: x + k,\n                        y: y + k,\n                    });\n                }\n                this.winCount++;\n            }\n        }\n        for (let x = 0; x < count - 4; x++) {\n            for (let y = count - 1; y > 3; y--) {\n                this.wins.push([]);\n                for (let k = 0; k < 5; k++) {\n                    this.wins[this.winCount].push({\n                        x: x + k,\n                        y: y - k,\n                    });\n                }\n                this.winCount++;\n            }\n        }\n    }\n    get blackWins() {\n        return this.wins.map((win) => {\n            let idx = 0;\n            for (let e of win) {\n                switch (this.matrix.get(e.x + e.y * count)) {\n                    case State.BLACK:\n                        idx++;\n                        break;\n                    case State.WHITE:\n                        return 0;\n                    default:\n                        break;\n                }\n            }\n            return idx;\n        });\n    }\n    get whiteWins() {\n        return this.wins.map((win) => {\n            let idx = 0;\n            for (let e of win) {\n                switch (this.matrix.get(e.x + e.y * count)) {\n                    case State.WHITE:\n                        idx++;\n                        break;\n                    case State.BLACK:\n                        return 0;\n                    default:\n                        break;\n                }\n            }\n            return idx;\n        });\n    }\n    compute(matrix, role) {\n        const myScore = new Array(matrix.length).fill(0);\n        const rivalScore = new Array(matrix.length).fill(0);\n        const myWins = role === State.BLACK ? this.blackWins : this.whiteWins;\n        const rivalWins = role === State.BLACK ? this.whiteWins : this.blackWins;\n        let max = 0;\n        let retIdx = 0;\n        matrix.forEach((state, idx) => {\n            if (state != State.Unspecified) {\n                return;\n            }\n            this.wins.forEach((e, winIdx) => {\n                if (e.filter(e => (e.x + e.y * count) === idx).length === 0) {\n                    return;\n                }\n                switch (rivalWins[winIdx]) {\n                    case 1:\n                        rivalScore[idx] += 1;\n                        break;\n                    case 2:\n                        rivalScore[idx] += 10;\n                        break;\n                    case 3:\n                        rivalScore[idx] += 100;\n                        break;\n                    case 4:\n                        rivalScore[idx] += 10000;\n                        break;\n                    default:\n                        break;\n                }\n                switch (myWins[winIdx]) {\n                    case 1:\n                        myScore[idx] += 2;\n                        break;\n                    case 2:\n                        myScore[idx] += 20;\n                        break;\n                    case 3:\n                        myScore[idx] += 200;\n                        break;\n                    case 4:\n                        myScore[idx] += 20000;\n                        break;\n                    default:\n                        break;\n                }\n            });\n            if (rivalScore[idx] > max) {\n                max = rivalScore[idx];\n                retIdx = idx;\n            }\n            else if (rivalScore[idx] == max) {\n                if (myScore[idx] > myScore[retIdx]) {\n                    retIdx = idx;\n                }\n            }\n            if (myScore[idx] > max) {\n                max = myScore[idx];\n                retIdx = idx;\n            }\n            else if (myScore[idx] == max) {\n                if (rivalScore[idx] > rivalScore[retIdx]) {\n                    retIdx = idx;\n                }\n            }\n        });\n        return retIdx;\n    }\n}\nconst lineColor = Color.BLACK;\nfunction columLine() {\n    return (new Stack).apply({\n        layoutConfig: layoutConfig().most().configWidth(LayoutSpec.JUST),\n        width: 1,\n        backgroundColor: lineColor,\n    });\n}\nfunction rowLine() {\n    return (new Stack).apply({\n        layoutConfig: layoutConfig().most().configHeight(LayoutSpec.JUST),\n        height: 1,\n        backgroundColor: lineColor,\n    });\n}\nfunction pointer(size) {\n    return (new Stack).apply({\n        layoutConfig: layoutConfig().just(),\n        width: size,\n        height: size,\n    });\n}\nvar GameMode;\n(function (GameMode) {\n    GameMode[GameMode[\"P2P\"] = 0] = \"P2P\";\n    GameMode[GameMode[\"P2C\"] = 1] = \"P2C\";\n    GameMode[GameMode[\"C2P\"] = 2] = \"C2P\";\n})(GameMode || (GameMode = {}));\nclass GoBangVH extends ViewHolder {\n    constructor() {\n        super(...arguments);\n        this.gap = 0;\n        this.targetZone = [];\n    }\n    build(root) {\n        this.root = root;\n    }\n    actualBuild(state) {\n        const boardSize = state.gap * (state.count - 1);\n        const gap = state.gap;\n        const borderWidth = gap;\n        this.gap = state.gap;\n        scroller(vlayout([\n            text({\n                text: \"五子棋\",\n                layoutConfig: layoutConfig().configWidth(LayoutSpec.MOST),\n                textSize: 30,\n                textColor: Color.WHITE,\n                backgroundColor: colors[0],\n                textAlignment: gravity().center(),\n                height: 50,\n            }),\n            stack([\n                stack([\n                    ...(new Array(count - 2)).fill(0).map((_, idx) => {\n                        return columLine().also(v => {\n                            v.left = (idx + 1) * gap;\n                        });\n                    }),\n                    ...(new Array(count - 2)).fill(0).map((_, idx) => {\n                        return rowLine().also(v => {\n                            v.top = (idx + 1) * gap;\n                        });\n                    }),\n                ])\n                    .apply({\n                    layoutConfig: layoutConfig().just()\n                        .configMargin({ top: borderWidth, left: borderWidth }),\n                    width: boardSize,\n                    height: boardSize,\n                    border: {\n                        width: 1,\n                        color: lineColor,\n                    },\n                }),\n                ...this.targetZone = (new Array(count * count)).fill(0).map((_, idx) => {\n                    const row = Math.floor(idx / count);\n                    const colum = idx % count;\n                    return pointer(gap).also(v => {\n                        v.top = (row - 0.5) * gap + borderWidth;\n                        v.left = (colum - 0.5) * gap + borderWidth;\n                    });\n                }),\n            ]).apply({\n                layoutConfig: layoutConfig().just(),\n                width: boardSize + 2 * borderWidth,\n                height: boardSize + 2 * borderWidth,\n                backgroundColor: Color.parse(\"#E6B080\"),\n            }),\n            this.gameMode = text({\n                text: \"游戏模式\",\n                textSize: 20,\n                textColor: Color.WHITE,\n                layoutConfig: layoutConfig().most().configHeight(LayoutSpec.JUST),\n                height: 50,\n                backgroundColor: colors[8],\n            }),\n            hlayout([\n                this.currentRole = text({\n                    text: \"当前:\",\n                    textSize: 20,\n                    textColor: Color.WHITE,\n                    layoutConfig: layoutConfig().just().configWeight(1),\n                    height: 50,\n                    backgroundColor: colors[1],\n                }),\n                this.result = text({\n                    text: \"获胜方:\",\n                    textSize: 20,\n                    textColor: Color.WHITE,\n                    layoutConfig: layoutConfig().just().configWeight(1),\n                    height: 50,\n                    backgroundColor: colors[2],\n                }),\n            ]).apply({\n                layoutConfig: layoutConfig().fit().configWidth(LayoutSpec.MOST),\n            }),\n            this.assistant = text({\n                text: \"提示\",\n                textSize: 20,\n                textColor: Color.WHITE,\n                layoutConfig: layoutConfig().just().configWidth(LayoutSpec.MOST),\n                height: 50,\n                backgroundColor: colors[3],\n            }),\n        ])\n            .apply({\n            layoutConfig: layoutConfig().fit(),\n            backgroundColor: Color.parse('#ecf0f1'),\n        })).in(this.root);\n    }\n}\nclass GoBangVM extends ViewModel {\n    onAttached(state, vh) {\n        if (!this.computer) {\n            this.computer = new AIComputer(state.matrix);\n        }\n        vh.actualBuild(state);\n        vh.targetZone.forEach((e, idx) => {\n            e.onClick = () => {\n                if (state.gameState !== 'idle') {\n                    return;\n                }\n                const zoneState = state.matrix.get(idx);\n                if (zoneState === State.BLACK || zoneState === State.WHITE) {\n                    modal(context).toast('This position had been token.');\n                    return;\n                }\n                if (state.anchor === undefined || state.anchor != idx) {\n                    this.updateState(it => {\n                        it.anchor = idx;\n                    });\n                }\n                else {\n                    this.updateState(it => {\n                        if (it.role === 'black') {\n                            it.matrix.set(idx, State.BLACK);\n                            it.role = 'white';\n                        }\n                        else {\n                            it.matrix.set(idx, State.WHITE);\n                            it.role = 'black';\n                        }\n                        it.anchor = undefined;\n                        if (this.checkResult(idx)) {\n                            modal(context).toast(`恭喜获胜方${it.role === 'white' ? \"黑方\" : \"白方\"}`);\n                            it.gameState = it.role === 'white' ? 'blackWin' : 'whiteWin';\n                        }\n                        else {\n                            if (it.role === 'black' && it.gameMode === GameMode.C2P) {\n                                setTimeout(() => {\n                                    this.computeNextStep(it);\n                                }, 0);\n                            }\n                            else if (it.role === 'white' && it.gameMode === GameMode.P2C) {\n                                setTimeout(() => {\n                                    this.computeNextStep(it);\n                                }, 0);\n                            }\n                        }\n                    });\n                }\n            };\n        });\n        vh.gameMode.onClick = () => {\n            popover(context).show(vlayout([\n                ...[\n                    {\n                        label: \"黑方:人 白方:人\",\n                        mode: GameMode.P2P,\n                    },\n                    {\n                        label: \"黑方:人 白方:机\",\n                        mode: GameMode.P2C,\n                    },\n                    {\n                        label: \"黑方:机 白方:人\",\n                        mode: GameMode.C2P,\n                    },\n                ].map((e) => text({\n                    text: e.label,\n                    textSize: 20,\n                    textColor: Color.WHITE,\n                    layoutConfig: layoutConfig().just(),\n                    height: 50,\n                    width: 300,\n                    backgroundColor: (state.gameMode === e.mode) ? Color.parse('#636e72') : Color.parse('#b2bec3'),\n                    onClick: () => {\n                        this.updateState(s => {\n                            s.gameMode = e.mode;\n                            this.reset(s);\n                        });\n                        popover(context).dismiss();\n                    },\n                }))\n            ])\n                .apply({\n                layoutConfig: layoutConfig().most(),\n                onClick: () => {\n                    popover(context).dismiss();\n                },\n                gravity: Gravity.Center,\n            }));\n        };\n        vh.result.onClick = () => {\n            switch (state.gameState) {\n                case \"idle\":\n                    this.updateState(state => {\n                        this.reset(state);\n                    });\n                    break;\n                case \"blackWin\":\n                case \"whiteWin\":\n                    break;\n            }\n        };\n        vh.currentRole.onClick = () => {\n            switch (state.gameState) {\n                case \"idle\":\n                    break;\n                case \"blackWin\":\n                case \"whiteWin\":\n                    this.updateState(state => {\n                        this.reset(state);\n                    });\n                    break;\n            }\n        };\n        vh.assistant.onClick = () => {\n            const it = this.getState();\n            if (it.gameState !== 'idle') {\n                return;\n            }\n            this.computeNextStep(it);\n            if (it.gameState !== 'idle') {\n                return;\n            }\n            if (it.role === 'black' && it.gameMode === GameMode.C2P) {\n                setTimeout(() => {\n                    this.computeNextStep(it);\n                }, 0);\n            }\n            else if (it.role === 'white' && it.gameMode === GameMode.P2C) {\n                setTimeout(() => {\n                    this.computeNextStep(it);\n                }, 0);\n            }\n        };\n    }\n    computeNextStep(it) {\n        const tempMatrix = new Array(count * count).fill(0).map((_, idx) => {\n            return it.matrix.get(idx) || State.Unspecified;\n        });\n        let idx = 0;\n        do {\n            idx = this.computer.compute(tempMatrix, it.role === 'black' ? State.BLACK : State.WHITE);\n        } while (it.matrix.get(idx) === State.Unspecified);\n        this.updateState(state => {\n            state.matrix.set(idx, state.role === 'black' ? State.BLACK : State.WHITE);\n            state.role = state.role === 'black' ? 'white' : 'black';\n            if (this.checkResult(idx)) {\n                modal(context).toast(`恭喜获胜方${it.role === 'white' ? \"黑方\" : \"白方\"}`);\n                it.gameState = it.role === 'white' ? 'blackWin' : 'whiteWin';\n            }\n        });\n    }\n    reset(it) {\n        it.matrix.clear();\n        it.gameState = 'idle';\n        it.role = \"black\";\n        it.anchor = undefined;\n        this.computer = new AIComputer(it.matrix);\n        if (it.gameMode === GameMode.C2P) {\n            const idx = Math.floor(Math.random() * count) * count + Math.floor(Math.random() * count);\n            it.matrix.set(idx, State.BLACK);\n            it.role = 'white';\n        }\n    }\n    onBind(state, vh) {\n        vh.targetZone.forEach((v, idx) => {\n            const zoneState = state.matrix.get(idx);\n            switch (zoneState) {\n                case State.BLACK:\n                    v.also(it => {\n                        it.backgroundColor = Color.BLACK;\n                        it.corners = state.gap / 2;\n                        it.border = {\n                            color: Color.TRANSPARENT,\n                            width: 0,\n                        };\n                    });\n                    break;\n                case State.WHITE:\n                    v.also(it => {\n                        it.backgroundColor = Color.WHITE;\n                        it.corners = state.gap / 2;\n                        it.border = {\n                            color: Color.TRANSPARENT,\n                            width: 0,\n                        };\n                    });\n                    break;\n                default:\n                    v.also(it => {\n                        it.backgroundColor = Color.TRANSPARENT;\n                        it.corners = 0;\n                        it.border = {\n                            color: Color.TRANSPARENT,\n                            width: 0,\n                        };\n                    });\n                    break;\n            }\n            if (state.anchor === idx) {\n                v.also(it => {\n                    it.backgroundColor = Color.RED.alpha(0.1);\n                    it.corners = 0;\n                    it.border = {\n                        color: Color.RED,\n                        width: 1,\n                    };\n                });\n            }\n        });\n        vh.gameMode.text = `游戏模式:  黑方 ${state.gameMode === GameMode.C2P ? \"机\" : \"人\"} 白方 ${state.gameMode === GameMode.P2C ? \"机\" : \"人\"}`;\n        switch (state.gameState) {\n            case \"idle\":\n                vh.result.text = \"重新开始\";\n                vh.currentRole.text = `当前: ${(state.role === 'black') ? \"黑方\" : \"白方\"}`;\n                break;\n            case \"blackWin\":\n                vh.result.text = \"黑方获胜\";\n                vh.currentRole.text = \"重新开始\";\n                break;\n            case \"whiteWin\":\n                vh.result.text = \"白方获胜\";\n                vh.currentRole.text = \"重新开始\";\n                break;\n        }\n    }\n    checkResult(pos) {\n        const matrix = this.getState().matrix;\n        const state = matrix.get(pos);\n        const y = Math.floor(pos / count);\n        const x = pos % count;\n        const getState = (x, y) => matrix.get(y * count + x);\n        ///Horitonzal\n        {\n            let left = x;\n            while (left >= 1) {\n                if (getState(left - 1, y) === state) {\n                    left -= 1;\n                }\n                else {\n                    break;\n                }\n            }\n            let right = x;\n            while (right <= count - 2) {\n                if (getState(right + 1, y) === state) {\n                    right += 1;\n                }\n                else {\n                    break;\n                }\n            }\n            if (right - left >= 4) {\n                return true;\n            }\n        }\n        ///Vertical\n        {\n            let top = y;\n            while (top >= 1) {\n                if (getState(x, top - 1) === state) {\n                    top -= 1;\n                }\n                else {\n                    break;\n                }\n            }\n            let bottom = y;\n            while (bottom <= count - 2) {\n                if (getState(x, bottom + 1) === state) {\n                    bottom += 1;\n                }\n                else {\n                    break;\n                }\n            }\n            if (bottom - top >= 4) {\n                return true;\n            }\n        }\n        ///LT-RB\n        {\n            let startX = x, startY = y;\n            while (startX >= 1 && startY >= 1) {\n                if (getState(startX - 1, startY - 1) === state) {\n                    startX -= 1;\n                    startY -= 1;\n                }\n                else {\n                    break;\n                }\n            }\n            let endX = x, endY = y;\n            while (endX <= count - 2 && endY <= count - 2) {\n                if (getState(endX + 1, endY + 1) === state) {\n                    endX += 1;\n                    endY += 1;\n                }\n                else {\n                    break;\n                }\n            }\n            if (endX - startX >= 4) {\n                return true;\n            }\n        }\n        ///LB-RT\n        {\n            let startX = x, startY = y;\n            while (startX >= 1 && startY <= count + 2) {\n                if (getState(startX - 1, startY + 1) === state) {\n                    startX -= 1;\n                    startY += 1;\n                }\n                else {\n                    break;\n                }\n            }\n            let endX = x, endY = y;\n            while (endX <= count - 2 && endY >= 1) {\n                if (getState(endX + 1, endY - 1) === state) {\n                    endX += 1;\n                    endY -= 1;\n                }\n                else {\n                    break;\n                }\n            }\n            if (endX - startX >= 4) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\nlet Gobang = class Gobang extends VMPanel {\n    getViewModelClass() {\n        return GoBangVM;\n    }\n    getState() {\n        return {\n            count,\n            gap: this.getRootView().width / 14,\n            role: \"black\",\n            matrix: new Map,\n            gameMode: GameMode.P2C,\n            gameState: \"idle\"\n        };\n    }\n    getViewHolderClass() {\n        return GoBangVH;\n    }\n    onShow() {\n        navbar(context).setTitle(\"五子棋\");\n    }\n};\nGobang = __decorate([\n    Entry\n], Gobang);\n//# sourceMappingURL=Gobang.js.map"],"names":["Color","this","Stack","layoutConfig","LayoutSpec","ViewHolder","scroller","vlayout","text","gravity","stack","hlayout","ViewModel","modal","popover","Gravity","VMPanel","navbar"],"mappings":"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"}