当前位置: 首页 > news >正文

五子棋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>

相关文章:

  • Kubernetes(k8s)学习笔记(九)--搭建多租户系统
  • 深入浅出HTML:构建现代网页的基石
  • Vue:现代前端开发的基石引擎
  • ActiveMQ 源码剖析:消息存储与通信协议实现(一)
  • DeepSeek系列论文解读四之DeepSeek Prover V2
  • 应急响应靶场web2:知攻善防实验室
  • 行为树笔记
  • 记录一下spring-cloud-starter-alibaba-nacos-config 2023.0.3.2与springboot版本及配置问题
  • kettle从入门到精通 第九十六课 ETL之kettle Elasticsearch 增删改查彻底掌握
  • excel 批量导出图片并指定命名
  • FPGA 纯逻辑NVME raid0 IP核
  • 常用设计模式在 Spring Boot 项目中的实战案例
  • 当当狸智能天文望远镜 TW2 | 用科技触摸星辰,让探索触手可及
  • 第十一节:图像处理基础-图像阈值处理
  • 16.Excel:打印技巧
  • ROS2: 服务通信
  • Android 数据持久化之数据库存储 Room 框架
  • RDD的处理过程
  • 远程桌面软件推荐
  • baobab查看磁盘空间占用
  • 重庆荣昌出圈背后:把网络流量变成经济发展的增量
  • 协会:坚决支持司法机关依法打击涉象棋行业的违法行为
  • 马上评|让“贾宝玉是长子长孙”争议回归理性讨论
  • 上海推动AI+文旅深度融合,MaaS平台和产业基地落地徐汇
  • 昆明阳宗海风景名胜区19口井违规抽取地热水,整改后用自来水代替温泉
  • 北约年度报告渲染所谓“中国核威胁”,国防部回应