前端js实现井字游戏和版本号对比js逻辑【适用于vue和react】

// 实现 compareVersion 方法,用于比较两个版本号(version1、version2) * 如果version1 > version2,返回1; * 如果version1 < version2,返回-1; * 其他情况,返回0。 * 版本号规则x.y.z,xyz均为大于等于0的整数,至少有x位 * * 目标: * js * compareVersion('0.1', '1.1.1'); // 返回-1 * compareVersion('13.37', '1.2 '); // 返回1 * compareVersion('1.1', '1.1.0'); // 返回0 * compareVersion('1.1', '1.1.1'); // 返回-1 * */

javascript 复制代码
const compareVersions = (version1, version2) => {
    const v1Parts = version1.split('.').map(Number);
    const v2Parts = version2.split('.').map(Number);
    const maxLength = Math.max(v1Parts.length, v2Parts.length);
    for (let i = 0; i < maxLength; i++) {
        const v1 = v1Parts[i] ?? 0;
        const v2 = v2Parts[i] ?? 0;
        if (v1 > v2) {
            return 1; // version1 大于 version2
        } else if (v1 < v2) {
            return -1; // version1 小于 version2
        }
    }
    return 0; // 两个版本号相等
}
const version1 = "1.1";
const version2 = "1.1.1";
const result = compareVersions(version1, version2);
if (result === 1) {
    console.log(`compareVersions函数返回值→${result}:${version1} 大于 ${version2}`);
} else if (result === -1) {
    console.log(`compareVersions函数返回值→${result}:${version1} 小于 ${version2}`);
} else {
    console.log(`compareVersions函数返回值→${result}:${version1} 等于 ${version2}`);
}

/* 井字棋游戏。输入一个二维数组代表棋盘,

其中 * 『1』代表当前玩家的棋子,

『0』代表没有棋子,

『-1』代表对方玩家的棋子。 *

若一方棋子在横、竖、斜方向连成排则为获胜,返回当前玩家是否胜出。

  • 示例:入参为 \[1,0,1,1,-1,-1,1,-1,0] 时,返回 true * */
    // 默认初始棋盘
    //如下initBoard代表初始化棋盘,分别对应井字棋盘九宫格的每个格子
    const initBoard = \[0, 0, 0,
    0, 0, 0,
    0, 0, 0,
    ];
    const gameCheck = (board, currentPlayer = 1) => {
    const rows = board.length;//行
    const cols = board0.length;//列
    // 检查行
    for (let i = 0; i < rows; i++) {
    if (boardi0 !== 0 && boardi.every(cell => cell === currentPlayer)) {
    return true;//如果所有行都是为当前人下的那么就返回成功
    }
    }
    // 检查列
    for (let j = 0; j < cols; j++) {
    let column = \[\];
    for (let i = 0; i < rows; i++) {
    column.push(boardij);
    }
    if (column0 !== 0 && column.every(cell => cell === currentPlayer)) {
    return true;
    }
    }
    // 检查对角线
    // leftRight从左往右向下对角线
    const leftRight = board\[00, board11, board22]
    // rightLeft从右往左向下对角线
    const rightLeft = board\[02, board11, board20]
    if (leftRight.every((cell) => cell === currentPlayer) || rightLeft.every((cell) => cell === currentPlayer)) {
    return true
    }
    return false
    }
    const board = \[1, 0, 1,
    1, -1, -1,

    1, -1, 0

    ];
    const playerWins = gameCheck(board);
    console.log(当前玩家是否胜出: ${playerWins});
相关推荐
花开盛夏^.^7 小时前
电脑打开多个浏览器Web窗口占用较大的运行内存的原因
前端·浏览器
馒头不想说话8 小时前
实体店老板的24小时AI运营员工,写、剪、发全自动,省下一整个团队工资
前端
椒哥10 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
风骏时光牛马10 小时前
生成一个AI稳定性治理及疑难问题分析标题,只需要一个标题,不需要其他的任何文本。
前端
莫西干式秃头11 小时前
用 AI + threejs 写了个浏览器里的 3D 动作游戏《武来》:砍怪、放技能、开 SU7
前端·人工智能·three.js
kyriewen11 小时前
我测了 6 种防请求竞态的写法:只有 1 种真能打
前端·javascript·程序员
孟健11 小时前
用 WorkBuddy 做个人名片网页,挂上开源设计技能后效果完全不同了
前端·人工智能·ai编程
IT_陈寒11 小时前
SpringBoot自动配置的坑,这次终于爬出来了
前端·人工智能·后端
LuHang12 小时前
从天地图切换到高德地图:一次真实的底图迁移实战
前端·vue.js·cesium
用户3600555790012 小时前
Kestrel_VLLM - 27 · 寄存器常驻与融合发射:两次「少发一次」
前端