將製作ejcees(中國象棋打譜程式)

分享和讨论Javascript相关的话题
回复
头像
ejsoon
圈圈精英
圈圈精英
帖子: 4900
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 173 次
被圈友点赞: 202 次
联系:

Re: 將製作ejcees(中國象棋打譜程式)

帖子 ejsoon »

跟上fast一步一步調:

代码: 全选

// ... 之前的代碼

// 這裡新增預校驗邏輯
// 正則解釋:
// ^[RNBAKCPrnbakcp+\-=1-9]{2} : 前兩個字符必須是 棋子代號、正負號或數字
// [+\-=]                     : 第三個字符必須是 + - 或 =
// [1-9]                      : 第四個字符必須是 1-9 的數字
const moveFormatRect = /^[RNBAKCPrnbakcp+\-=1-9]{2}[+\-=][1-9]/;

if (moveFormatRect.test(moveEn)) {
    // 只有校驗通過,才嘗試轉換坐標
    dc = deriveCoordsFromMove(currentFen, moveEn, isRed);
} else {
    // 校驗不通過,直接設為 null,確保進入後面的註解處理邏輯
    dc = null;
}

if (!dc) {
    // 如果 dc 為空(校驗失敗或轉換失敗),則視為評論
    if (!currentCommentNode.c) currentCommentNode.c = "";
    currentCommentNode.c += (currentCommentNode.c ? " " : "") + token;
    continue;
}

// ... 後續正常處理 dc 的代碼
在if(!dc)內,判斷本行是否為最後一行,或下一行是否為!/^\d+\.且含有圈圈數字的行

代码: 全选

if (!dc) {
    // 檢查:1. 是否為最後一行; 2. 或者下一行不以數字點開頭且包含圈圈數字
    let isLastLine = (i === lines.length - 1);
    let nextLineIsBranch = false;
    
    if (!isLastLine) {
        let nextLine = lines[i + 1];
        // 判斷下一行:不匹配 ^\d+\. 且 包含圈圈數字
        nextLineIsBranch = !/^\d+\./.test(nextLine) && /[①-⑳]/.test(nextLine);
    }

    if (isLastLine || nextLineIsBranch) {
        // 如果滿足條件,這裡可以執行特定邏輯,例如中斷解析或特殊標記
        // 目前默認行為仍是轉為評論
    }

    // 原有的轉評論邏輯
    if (!currentCommentNode.c) currentCommentNode.c = "";
    currentCommentNode.c += (currentCommentNode.c ? " " : "") + token;
    continue; 
}

代码: 全选

正則優化: /[①-⑳]/ 是 /[①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳]/ 的簡寫,更加簡潔。
https://ejsoon.vip/
弈趣極光:享受思維樂趣
头像
ejsoon
圈圈精英
圈圈精英
帖子: 4900
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 173 次
被圈友点赞: 202 次
联系:

Re: 將製作ejcees(中國象棋打譜程式)

帖子 ejsoon »

路fast調(二):

代码: 全选

function importExportedText(text, importedFen = null) {

代码: 全选

if (!dc) {
    const isLastLine = (i === lines.length - 1);
    const nextLineIsBranch = !isLastLine && !/^\d+\./.test(lines[i + 1]) && /[①-⑳]/.test(lines[i + 1]);

    if (isLastLine || nextLineIsBranch) {
        const cleanInitial = INITIAL_FEN.replace(/ - - 0 1$/, '');
        const currentFenClean = importedFen ? importedFen.replace(/ - - 0 1$/, '') : "";

        // 如果當前 FEN 不是初始 FEN,則嘗試用初始 FEN 重啟導入
        if (currentFenClean !== cleanInitial && currentFenClean !== INITIAL_FEN) {
            importExportedText(text, INITIAL_FEN);
            return; 
        } else {
            // 如果已經是初始 FEN 導入卻仍然失敗,則回退狀態並退出
            undo();
            return;
        }
    }

    // 否則,按原邏輯轉為評論
    if (!currentCommentNode.c) currentCommentNode.c = "";
    currentCommentNode.c += (currentCommentNode.c ? " " : "") + token;
    continue;
}

代码: 全选

// 在 let importedFen = null; 之後添加
if (importedFen) {
    // 如果是第二次調用,直接使用傳入的 INITIAL_FEN
    movesStr = text.replace(new RegExp(`position fen | moves |${fenRegex.source}`, 'g'), '').trim();
} else {
    // 原有的 FEN 提取邏輯...
    const fenMatch = text.match(fenRegex);
    if (fenMatch) { 
        importedFen = fenMatch[0];
        // ... 其餘代碼
    }
}
https://ejsoon.vip/
弈趣極光:享受思維樂趣
头像
ejsoon
圈圈精英
圈圈精英
帖子: 4900
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 173 次
被圈友点赞: 202 次
联系:

Re: 將製作ejcees(中國象棋打譜程式)

帖子 ejsoon »

ejcees20260330impsthbug9997765:

實現隨意導入東萍格式棋譜,而不必先按「新建」。導入可以有分支和評論。

修復兩個undo按鈕不亮的地方,一個是點擊step後,一個是走完棋後。

https://ejsoon.vip/wp-content/uploads/2 ... 97765.html
附件
ejcees20260330impsthbug9997765.7z
(42.84 KiB) 已下载 3 次
https://ejsoon.vip/
弈趣極光:享受思維樂趣
头像
ejsoon
圈圈精英
圈圈精英
帖子: 4900
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 173 次
被圈友点赞: 202 次
联系:

Re: 將製作ejcees(中國象棋打譜程式)

帖子 ejsoon »

新增一個函式,其功能為,搜尋行動方所有可能的合規走法,剔除下一步會被對方吃到將帥以及將帥照面的情況。

其用途有三個,一是判斷勝負,當一方當行動結束時作被將死或被困斃的判斷;二是當編輯結束時,如果行動方能立即獲勝,或者行動方無子可走,則彈出提示;三是在導出文本狀態時,當第三個按鈕engin-txt處於active狀態時,再次按engin-txt,則加上\n+seachmoves a1b2 c3b4。「a1b2 c3b4」指所有可能走法。再次點擊則切換回來

只需給出所要修改的地方,所有的代碼和注釋都應使用英文。

https://ejsoon.vip/wp-content/uploads/2 ... rchIt.html
附件
geminiSearchIt.7z
(71.02 KiB) 已下载 2 次
https://ejsoon.vip/
弈趣極光:享受思維樂趣
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 3 访客