五子棋html

?

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>五子棋游戲</title>
<style>body {display: flex;flex-direction: column;align-items: center;background: #f0d9b5;font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;margin: 0;padding: 20px;}h1 {margin-bottom: 10px;}#board {display: grid;grid-template-columns: repeat(15, 30px);grid-template-rows: repeat(15, 30px);gap: 1px;background-color: #333;border: 2px solid #333;}.cell {width: 30px;height: 30px;background-color: #f0d9b5;border-radius: 3px;cursor: pointer;position: relative;}.cell:hover {background-color: #e0cfa3;}.stone {position: absolute;top: 50%;left: 50%;width: 24px;height: 24px;border-radius: 50%;transform: translate(-50%, -50%);}.black {background-color: black;}.white {background-color: white;border: 1px solid black;}#scoreboard {margin-top: 20px;font-size: 18px;}#resetBtn {margin-top: 15px;padding: 8px 16px;font-size: 16px;cursor: pointer;}
</style>
</head>
<body><h1>五子棋游戲</h1><div id="board"></div><div id="scoreboard">黑方勝利次數: <span id="blackWins">0</span> &nbsp;&nbsp; 白方勝利次數: <span id="whiteWins">0</span></div><button id="resetBtn">重新開始</button><script>const boardSize = 15;const board = document.getElementById('board');const blackWinsSpan = document.getElementById('blackWins');const whiteWinsSpan = document.getElementById('whiteWins');const resetBtn = document.getElementById('resetBtn');let currentPlayer = 'black';let boardState = Array(boardSize).fill(null).map(() => Array(boardSize).fill(null));let blackWins = 0;let whiteWins = 0;let gameOver = false;function createBoard() {board.innerHTML = '';for (let row = 0; row < boardSize; row++) {for (let col = 0; col < boardSize; col++) {const cell = document.createElement('div');cell.classList.add('cell');cell.dataset.row = row;cell.dataset.col = col;cell.addEventListener('click', onCellClick);board.appendChild(cell);}}}function onCellClick(e) {if (gameOver) return;const row = parseInt(e.target.dataset.row);const col = parseInt(e.target.dataset.col);if (boardState[row][col] !== null) return;boardState[row][col] = currentPlayer;const stone = document.createElement('div');stone.classList.add('stone', currentPlayer);e.target.appendChild(stone);if (checkWin(row, col, currentPlayer)) {gameOver = true;if (currentPlayer === 'black') {blackWins++;blackWinsSpan.textContent = blackWins;setTimeout(() => alert('黑方獲勝!'), 0);} else {whiteWins++;whiteWinsSpan.textContent = whiteWins;setTimeout(() => alert('白方獲勝!'), 0);}return;}currentPlayer = currentPlayer === 'black' ? 'white' : 'black';}function checkWin(row, col, player) {return (checkDirection(row, col, player, 1, 0) || // 橫向checkDirection(row, col, player, 0, 1) || // 縱向checkDirection(row, col, player, 1, 1) || // 斜向 \checkDirection(row, col, player, 1, -1)   // 斜向 /);}function checkDirection(row, col, player, deltaRow, deltaCol) {let count = 1;// 向一個方向計數let r = row + deltaRow;let c = col + deltaCol;while (r >= 0 && r < boardSize && c >= 0 && c < boardSize && boardState[r][c] === player) {count++;r += deltaRow;c += deltaCol;}// 向相反方向計數r = row - deltaRow;c = col - deltaCol;while (r >= 0 && r < boardSize && c >= 0 && c < boardSize && boardState[r][c] === player) {count++;r -= deltaRow;c -= deltaCol;}return count >= 5;}resetBtn.addEventListener('click', () => {gameOver = false;boardState = Array(boardSize).fill(null).map(() => Array(boardSize).fill(null));currentPlayer = 'black';createBoard();});createBoard();</script>
</body>
</html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82225.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82225.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82225.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法訓練營第十一天|150. 逆波蘭表達式求值、239. 滑動窗口最大值、347.前 K 個高頻元素

150. 逆波蘭表達式求值 題目 思路與解法 第一思路&#xff1a; 比較簡單 class Solution:def evalRPN(self, tokens: List[str]) -> int:stack []for item in tokens:if item ! and item ! - and item ! * and item ! / :stack.append(item)else:b int(stack.pop())a …

原生 IP(Native IP)

目錄 一、核心特點 二、原生 IP 的常見應用 三、原生 IP vs. 數據中心 IP 四、如何獲取原生 IP&#xff1f; 五、原生 IP 的優缺點 六、實際案例 原生 IP&#xff08;Native IP&#xff09; 是指由互聯網服務提供商&#xff08;ISP&#xff09;直接分配給用戶的 IP 地址&…

k8s的pod掛載共享內存

k8s的pod掛載共享內存&#xff0c;限制不生效問題&#xff1a; 注&#xff1a;/dev/shm 是 Linux 系統中用于共享內存的特殊路徑。通過將 emptyDir 的 medium 設置為 Memory&#xff0c;可以確保 /dev/shm 正確地掛載到一個基于內存的文件系統&#xff0c;從而實現高效的共享內…

DOCX轉PDF怎么操作最簡單?快速將DOCX轉換為專業PDF文檔

在日常辦公或學習中&#xff0c;我們經常需要將 Word 文檔&#xff08;.docx格式&#xff09;轉換為 PDF 文件。這不僅有助于保持文檔格式的一致性&#xff0c;還能確保接收者無需特定軟件即可查看文件內容。本文將詳細介紹幾種常見的方法來實現從 DOCX 到 PDF 的轉換&#xff…

VUE+ElementUI 使用el-input類型type=“number” 時,取消右邊的上下箭頭

項目場景&#xff1a; 提示&#xff1a;這里簡述項目相關背景&#xff1a; 在項目中有時候需要輸入框的type“number”&#xff0c;這個時候&#xff0c;輸入框的右邊就會出現兩個按鈕&#xff0c;這兩個按鈕可以遞增/遞減&#xff0c;但是這樣輸入框看上去就不太美觀&#x…

深入淺出理解常見的分布式ID解決方案

目錄 UUID 自增ID 數據庫多主模式 號段模式 Redis 雪花算法 百度 UIDgenerator 美團Leaf 滴滴TinyID 實戰中的分布式ID生成器&#xff01;保障數據唯一性的核心組件 怎么編寫Lua腳本是關鍵 怎么執行&#xff1f; 總結 分布式ID在構建大規模分布式系統時扮演著至關…

技術視界 | 青龍機器人訓練地形詳解(一):如何創建一個地形

機器人強化學習中的地形訓練是利用強化學習算法讓機器人在不同地形環境中通過試錯學習最優行為策略的過程&#xff0c;通過環境建模、策略學習與優化等環節&#xff0c;使機器人能夠自主適應復雜多變的地形&#xff0c;提高其移動效率、穩定性和自主性&#xff0c;減少人為干預…

【SGL】Scatter-Gather List內存傳輸技術

文章目錄 1. What is SGL&#xff1f;2. sgl內存傳輸的原理2.1 核心思想2.2 sgl數據結構2.3 摘鏈和掛鏈 3. 零拷貝技術3.1 問題背景3.2 零拷貝的核心思想及實現方式 4. sgl在存儲行業的應用 1. What is SGL&#xff1f; sgl&#xff08;Scatter-Gather List&#xff09;內存傳…

10.idea中創建springboot項目_jdk17

10.idea中創建springboot項目_jdk17 一、前期準備 安裝與配置&#xff1a; 確保已安裝 IntelliJ IDEA配置好 JDK17 二、創建 Maven 項目 新建項目&#xff1a; 點擊 File → New → Project&#xff0c;選擇左側的 Maven。填寫項目名稱&#xff08;如 demo&#xff09;、存…

如何使用極狐GitLab 軟件包倉庫功能托管 ruby?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 軟件包庫中的 Ruby gems (BASIC ALL) WARNING:Ruby gems 軟件包庫正在開發中&#xff0c;由于功能有限&#xff0c;尚未準備好…

LeetCode 熱題 100 131. 分割回文串

LeetCode 熱題 100 | 131. 分割回文串 大家好&#xff0c;今天我們來解決一道經典的回溯算法問題——分割回文串。這道題在 LeetCode 上被標記為中等難度&#xff0c;要求將一個字符串 s 分割成若干個子串&#xff0c;使得每個子串都是回文串&#xff0c;并返回所有可能的分割…

〖 Linux 〗操作系統進程管理精講(2)

文章目錄 1、環境變量基本概念常見環境變量查看環境變量方法測試 PATH測試 HOME和環境變量相關的命令環境變量的組織方式<p align"center">main 函數的三個參數通過代碼獲得環境變量通過系統調用獲取環境變量環境變量通常是具有全局屬性的 2、程序地址空間2.1 …

vite:npm 安裝 pdfjs-dist , PDF.js View 示例

pdfjs-dist 是 Mozilla 的 PDF.js 庫的預構建版本&#xff0c;能讓你在項目里展示 PDF 文件。下面為你介紹如何用 npm 安裝 pdfjs-dist 并應用 pdf.js 和 pdf.worker.js。 為了方便&#xff0c;我將使用 vite 搭建一個原生 js 項目。 1.創建項目 npm create vitelatest pdf-v…

精品,架構師總結,MySQL 5.7 查詢入門詳解

文章目錄 MySQL 5.7 查詢入門詳解一、數據庫與表基礎操作1.1 連接數據庫1.2 創建數據庫1.3 使用數據庫1.4 創建數據表1.5 表結構查看 二、SELECT基礎查詢2.1 全列查詢2.2 指定列查詢2.3 別名使用2.4 去重查詢2.5 表達式計算 三、WHERE條件查詢3.1 比較運算符3.2 邏輯運算符3.3 …

P48-56 應用游戲標簽

這一段課主要是把每種道具的游戲Tag進行了整理與應用 AuraAbilitySystemComponentBase.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "AbilitySystemComponent.h"…

【AWS+Wordpress】將本地 WordPress 網站部署到AWS

前言 自學筆記&#xff0c;解決問題為主&#xff0c;親測有效&#xff0c;歡迎補充。 本地開發機&#xff1a;macOS&#xff08;Sequoia 15.0.1&#xff09; 服務器&#xff1a;AWS EC2&#xff08;Amazon Linux 2023&#xff09; 目標&#xff1a;從本地遷移 WordPress 到云…

從零開始:用PyTorch構建CIFAR-10圖像分類模型達到接近1的準確率

為了增強代碼可讀性&#xff0c;代碼均使用Chatgpt給每一行代碼都加入了注釋&#xff0c;方便大家在本文代碼的基礎上進行改進優化。 本文是搭建了一個稍微優化了一下的模型&#xff0c;訓練200個epoch&#xff0c;準確率達到了99.74%&#xff0c;簡單完成了一下CIFAR-10數據集…

C++復習類與對象基礎

類的成員函數為什么需要在類外定義 1.1 代碼組織與可讀性? ?類內定義?&#xff1a;適合 ?短小簡單的函數?&#xff08;如 getter/setter&#xff09;&#xff0c;能直觀體現類的接口設計。 ?類外定義?&#xff1a;當函數體較復雜時&#xff0c;將實現移到類外&#xf…

【計算機網絡】Cookie、Session、Token之間有什么區別?

大家在日常使用瀏覽器時可能會遇到&#xff1a;是否清理Cookie&#xff1f;這個問題。 那么什么是Cookie呢&#xff1f;與此相關的還有Session、Token這些。這兩個又是什么呢&#xff1f; 本文將對這三個進行講解區分&#xff0c;如果對小伙伴有幫助的話&#xff0c;也請點贊、…

Python 3.x 內置裝飾器 (4) - @dataclass

dataclass 是Python 3.7 引入的一個裝飾器&#xff0c;用來簡化創建數據類&#xff08;主要存儲數據的類&#xff09;的過程。它會自動為類生成一些常用的方法&#xff0c;比如&#xff1a; __init__: 對象的初始化 __repr__: 定義類的官方字符串表示。 __eq__: 定義兩個對象…