/** * @author jiutou * @updateTime 2022/12/02 * @tip 10-2 十六子棋 * @description * 10-2 十六子棋 一.挑战模式 1. 初始默认值:4×4 棋盘摆满棋子 2. 参数范围: ①棋盘 3×3~4×4 ②棋子数量,[2,n],n 表示满盘状态下棋子数量。 3. 过程记录: 无 二.练习模式 棋盘固定为 4×4(练习题用指定的胜点或败点集即可,具体见下面必胜策略部分) 一级:W2或 L2 二级:W3或 L3 三级:W4或 L4 四级:W5或 L5 五级:W6或 L6 【必胜策略:判断当前状态是否属于胜点集,如果是则随机操作,否则选择一种操作方式,使得操作后的状态属于胜点集。(三阶和四阶必胜策略方式一致,下面以三阶为例进行必胜策略描述) 以下是将游戏的所有状态按胜负点分类的过程。 ①以 3×3 的 0,1 矩阵来刻画游戏状态,0 对应该位置没有棋子,1 对应有棋子,则游戏状态集 S 一共有 2^9=512 个元素; ②全为 0 的矩阵是游戏的终点状态,也是游戏的最终败点,因为抢占该状态者负,将这个状态记为 L1; ③显然,只有 1 个 1,其余 8 个位置均为 0 的状态为最后一个胜点,且易知这样的胜点一共有 9 个,将这 9 个元素组成的集合记为 W1; ④更新差集ΔS=S-L1-W1后,对ΔS 中的每一个元素进行规则遍历,即对ΔS 中每一个游戏状态逐一实行所有可能的操作,若某个状态 ai(i 可能不唯一)在实行规则遍历的过程中, 存在某一种操作使得实行该操作后所得到的新状态 ai’属于 W1,则这个状态ai属于败点集,将这个状态存入 L2; ⑤更新差集ΔS=ΔS-L2后,继续对ΔS 中的每一个元素进行规则遍历,如果某个状态ai(i有可能不唯一)实行任意一合法操作之后,所得到的状态都属于 L2,则该状态也属于必胜集,将其存入 W2; ⑥重复④和⑤,直至ΔS 为空。】 * */ import { GameAutoWay } from '../common/pojo'; export declare class GameData10_2 { typeSet?: number | undefined; p1: number; p2: number; desk: number[][]; player: number; constructor(player: number, desk?: number[][]); } export declare class GameAction10_2 { move: number[][]; constructor(move?: number[][]); } export declare class GameConfig10_2 { deskSize: number; chessNum: number; desk: number[][]; constructor(deskSize: number, chessNum: number, desk?: number[][]); } export default class example10_2 { getRiddleByLev(level: number, config: any): GameData10_2; getRiddle(config: GameConfig10_2): GameData10_2; checkRiddle(deskData: GameData10_2): number; doAction(deskData: GameData10_2, dataAction: GameAction10_2): [flagResult: number, dataResult: GameData10_2]; checkAction(deskData: GameData10_2, dataAction: GameAction10_2): number; checkDesk(deskData: GameData10_2): number; getActionAuto(deskData: GameData10_2): GameAutoWay; getActionAutoD3(deskData: GameData10_2): GameAutoWay; getActionAutoD4(deskData: GameData10_2): GameAutoWay; getAllDesk(): Map; getAllAction(desk: number[][]): GameAction10_2[]; deskTostring(desk: number[]): string; deskArrTostring(desk: number[][]): string; deskToArr(desk: number[]): number[][]; isW1(desk: number[][]): number[]; isL1(desk: number[][]): boolean; writer(filename: string, lw: Map>): void; }