HTML+CSS+JS井字棋(来自动下棋)

井字棋 自动下棋 玩家先下,计算机后下

源码在图片后面 点赞❤️收藏⭐️关注😍

效果图

f000b8afd29e4e218757a89d5857c675.jpg

 源代码

<!DOCTYPE html>

<html lang="en">

 

<head>

    <meta charset="UTF-8">

    <title>Tic Tac Toe Game</title>

    <style>

        body {

            font-family: Arial, sans-serif;

            display: flex;

            justify-content: center;

            align-items: center;

            height: 100vh;

            margin: 0;

            background-color: #f9f9f9;

        }

 

        #game-board {

            display: grid;

            grid-template-columns: repeat(3, 100px);

            grid-auto-rows: 100px;

            gap: 2px;

            margin-bottom: 20px;

            border: 4px solid #ff0000;

            border-radius: 10px;

        }

 

        .cell {

            display: flex;

            justify-content: center;

            align-items: center;

            background-color: #ffffff;

            color: #ff0000;

            font-size: 2em;

            cursor: pointer;

        }

 

        #reset-button {

            padding: 10px 20px;

            background-color: #ff0000;

            color: #ffffff;

            border: none;

            border-radius: 5px;

            cursor: pointer;

        }

    </style>

</head>

 

<body>

    <div id="game-board"></div>

    <button id="reset-button">重新开局</button>

 

    <script>

        const board = document.getElementById('game-board');

        const cells = [];

        let currentPlayer = 'X';

        let gameOver = false;

 

        // Initialize game board

        for (let i = 0; i < 9; i++) {

            const cell = document.createElement('div');

            cell.classList.add('cell');

            cell.dataset.index = i;

            cell.addEventListener('click', handleCellClick);

            board.appendChild(cell);

            cells.push(cell);

        }

 

        // Reset game

        document.getElementById('reset-button').addEventListener('click', resetGame);

 

        function handleCellClick() {

            if (!gameOver && this.innerText === '') {

                this.innerText = currentPlayer;

                checkWin();

                if (!gameOver) {

                    setTimeout(computerMove, 500);

                }

            }

        }

 

        function computerMove() {

            const emptyCells = cells.filter(cell => cell.innerText === '');

            const randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];

            randomCell.innerText = 'O';

            checkWin();

        }

 

        function checkWin() {

            const winningCombos = [

                [0, 1, 2],

                [3, 4, 5],

                [6, 7, 8],

                [0, 3, 6],

                [1, 4, 7],

                [2, 5, 8],

                [0, 4, 8],

                [2, 4, 6]

            ];

 

            for (const combo of winningCombos) {

                const [a, b, c] = combo;

                if (cells[a].innerText && cells[a].innerText === cells[b].innerText && cells[a].innerText === cells[c].innerText) {

                    gameOver = true;

                    setTimeout(() => {

                        if (currentPlayer === 'X') {

                            alert('Player wins!');

                        } else {

                            alert('Computer wins!');

                        }

                    }, 200);

                    break;

                }

            }

 

            if (!cells.some(cell => cell.innerText === '')) {

                gameOver = true;

                setTimeout(() => {

                    alert('It\'s a draw!');

                }, 200);

            }

 

            currentPlayer = currentPlayer === 'X' ? 'O' : 'X';

        }

 

        function resetGame() {

            cells.forEach(cell => {

                cell.innerText = '';

            });

            currentPlayer = 'X';

            gameOver = false;

        }

    </script>

</body>

 

</html>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/801599.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开始Linux之路

人生得一知己足矣&#xff0c;斯世当以同怀视之。——鲁迅 Linux操作系统简单操作指令 1、ls指令2、pwd命令3、cd指令4、mkdir指令(重要)5、whoami命令6、创建一个普通用户7、重新认识指令8、which指令9、alias命令10、touch指令11、rmdir指令 及 rm指令(重要)12、man指令(重要…

技术周总结 2024.07.08~07.14(算法,Python,Java,Scala,PHP)

文章目录 一、07.13 周六1.0&#xff09;算法题&#xff1a;字符串中的单词反转1.1&#xff09; 问题01:可靠性计算中的MTTR MTTF MTBF 分别指什么&#xff1f;他们之间有什么联系&#xff1f;MTTR (Mean Time to Repair)MTTF (Mean Time to Failure)MTBF (Mean Time Between F…

韦东山嵌入式linux系列-驱动进化之路:总线设备驱动模型-课后作业

在内核源码中搜索 platform_device_register 可以得到很多驱动&#xff0c;选择 一个作为例子&#xff1a; ① 确定它的名字 ② 根据它的名字找到对应的 platform_driver ③ 进入 platform_device_register/platform_driver_register 内部&#xff0c;分析 dev 和 drv 的匹配过…

某林操作系统——网络系统

什么是零拷贝&#xff1f; DMA技术&#xff1a;使用一个DMA控制器将数据从硬盘传输到内存&#xff0c;除了一开始调用DMA控制器发起传输&#xff0c;数据搬运全称不需要CPU参与。 发送一段数据到网上如下所示 4次状态切换4次拷贝。 为了加快速度就要减少上下文切换&#xff…

网络安全防御【防火墙安全策略用户认证综合实验】

目录 一、实验拓扑图 二、实验要求 三、实验思路 四、实验步骤 1、打开ensp防火墙的web服务&#xff08;带内管理的工作模式&#xff09; 2、在FW1的web网页中网络相关配置 3、交换机LSW6&#xff08;总公司&#xff09;的相关配置&#xff1a; 4、路由器相关接口配置&a…

【深度学习入门篇 ⑦】PyTorch池化层

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【查询密钥是否存在(ArkTS)】

查询密钥是否存在(ArkTS) HUKS提供了接口供应用查询指定密钥是否存在。 开发步骤 指定密钥别名keyAlias&#xff0c;密钥别名最大长度为64字节。初始化密钥属性集。用于查询时指定密钥的属性TAG&#xff0c;比如查询的密钥范围(全量/单个)&#xff0c;当查询单个时&#xff…

工时计算软件比较:哪些功能是必需的?

国内外主流的10款工时计算软件对比&#xff1a;PingCode、Worktile、蓝凌OA、用友软件、金蝶软件、智能人事、Time Doctor、Toggl Track、Clockify、Harvest。 在选择合适的工时计算软件时&#xff0c;很多企业面临的一个主要痛点是如何找到既能满足功能需求又具有成本效益的解…

虚拟机及其Debian(kali)安装

本机电脑为Windows10系统专业版&#xff0c;在此基础上安装VMware和系统&#xff08;Kali&#xff09; 步骤如下 一、安装 VMware Workstation Pro v16.2.4 安装步骤可参照网上博客&#xff0c;该步骤较简单&#xff0c;此处不做讲解。文件中共计两个&#xff0c;其中一个是激活…

YOLOv8白皮书-第Y8周:yolov8.yaml文件解读

本文为365天深度学习训练营中的学习记录博客 原作者&#xff1a;K同学啊|接辅导、项目定制 请根据YOLOv8n、YOLOv8s模型的结构输出&#xff0c;手写出YOLOv8l的模型输出 文件位置&#xff1a;./ultralytics/cfg/models/v8/yolov8.yaml 一、参数配置 # Parameters nc: 80 # n…

android APP在蓝牙模拟键盘扫描条码设备开机时闪退

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

下载安装VSCode并添加插件作为仓颉编程入门编辑器

VSCode下载地址&#xff1a;下载 Visual Studio Code - Mac、Linux、Windows 插件下载&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 仓颉社区中下载解压 cangjie.vsix 插件 打开VSCode 按 Ctrl Shift X 弹出下图 按照上图步骤依次点击选中我们下…

【Unity2D 2022:UI】制作主菜单

一、创建主菜单游戏场景 1. 在Scenes文件夹中新建一个游戏场景Main Menu 2. 为场景添加背景 &#xff08;1&#xff09;创建画布Canvas &#xff08;2&#xff09;在Canvas中创建新的空游戏物体Main Menu &#xff08;3&#xff09;在Main Menu中新建一个图像游戏物体Backgrou…

c++基础(1)

c语言是结构化和模块化的语言&#xff0c;用于处理规模较小的程序。当问题需要高度抽象和建模时&#xff0c;c语言不适合。c是基于c语言产生的&#xff0c;既可以进行c语言过程化程序设计&#xff0c;又可以以抽象数据类型为特点的基于对象的程序设计&#xff0c;还可以进行面向…

pico+unity手柄和摄像机控制初级设置

1、摄像头配置 摄像头模式、floor是追踪原点类型&#xff08;将根据设备检测到地面的高度来计算追踪原点&#xff09;&#xff0c; Device 模式时&#xff0c;为通常理解的 Eye 模式&#xff0c;不会将根据设备检测到地面的高度来计算追踪原点 选择floor时&#xff0c;修改相…

达梦数据库的系统视图v$recover_status

达梦数据库的系统视图v$recover_status 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$RECOVER_STATUS 是一个系统视图&#xff0c;用于显示数据库的恢复状态信息。这个视图对于数据库管理员来说非常重要&#xff0c;尤其是在数据库发生故障需要进行恢复操…

Claude 3.5 Sonnet模型发布,对比ChatGPT4o孰强孰弱

Anthropic 这家生而为打击 OpenAI 安全问题的公司&#xff0c;正式发布了Claude 3.5 Sonnet模型&#xff01; 用官网的话就是&#xff1a; 今天&#xff0c;我们推出了 Claude 3.5 Sonnet&#xff0c;这是我们即将推出的 Claude 3.5 型号系列中的第一个版本。Claude 3.5 Sonne…

批量提取PDF指定区域内容到 Excel , 根据PDF文件第一行文字来自动重命名v1.3-附思路和代码实现

本次文章更新内容&#xff0c;图片以及扫描的PDF也可以支持批量提取指定区域内容了&#xff0c;主要是通过截图指定区域&#xff0c;然后使用OCR来识别该区域的文字来实现的&#xff0c;所以精度可能会有点不够&#xff0c;但是如果是数字的话&#xff0c;问题不大&#xff1b;…

在线工具--将Json结构映射为另外一种Json结构

具体请前往&#xff1a;在线工具-将json结构映射为另外一个json结构

Home Assistant在windows环境安装

Home Assistant是什么&#xff1f; Home Assistant 是一个开源的智能家居平台&#xff0c;旨在通过集成各种智能设备和服务&#xff0c;提供一个统一的、可自定义的家庭自动化解决方案。它可以允许用户监控、控制和自动化家中的各种设备&#xff0c;包括灯光、温度、安全系统、…