小白也能看得懂的基于HTML+CSS+JS實現的五子棋小游戲

五子棋是一種起源于中國的傳統棋類游戲,具有悠久的歷史。

基本規則

  1. 棋盤

    • 五子棋通常在一個 15x15 的棋盤上進行,但也可以在更大的棋盤上進行。
    • 棋盤上的每個交叉點稱為一個“點”。
  2. 棋子

    • 五子棋使用黑白兩色的棋子。
    • 兩名玩家分別持有一種顏色的棋子。
  3. 游戲目標

    • 游戲的目標是先在棋盤上形成連續五個同色棋子的一方獲勝。
    • 這些棋子可以是水平、垂直或對角線排列的。
  4. 下棋規則

    • 游戲開始時,棋盤是空的。
    • 黑方先行,然后雙方輪流在棋盤的空點上放置一枚棋子。
    • 棋子一旦放下,就不能移動或移除。

HTML源碼

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>五子棋</title><link rel="stylesheet" href="style.css">
</head><body><h1>基于HTML+CSS+JS實現的五子棋小游戲</h1><div id="status"></div><div id="board"></div><div> <button id="reset">重置游戲</button> <button id="toggle-move-number">顯示/隱藏手數</button></div><script src="script.js"></script>
</body></html>

CSS源碼

body {display: flex;flex-direction: column;align-items: center;font-family: Arial, sans-serif;background-color: #f0f0f0;margin: 0;padding: 20px;
}h1 {color: #333;
}#board {display: grid;grid-template-columns: repeat(15, 40px);grid-template-rows: repeat(15, 40px);gap: 1px;margin: 20px 0;
}.cell {width: 40px;height: 40px;background-color: #fff;border: 1px solid #ccc;display: flex;justify-content: center;align-items: center;font-size: 24px;cursor: pointer;position: relative;
}.cell.black {background-color: black;border-radius: 50%;color: white; /* 黑色棋子的序號顯示為白色 */
}.cell.black.current::after {content: '';display: block;width: 30px;height: 30px;border: 2px solid white;border-radius: 50%;position: absolute;top: 4px;left: 4px;box-sizing: border-box;
}.cell.white {background-color: white;border: 1px solid black;border-radius: 50%;color: black; /* 白色棋子的序號顯示為黑色 */
}.cell.white.current::after {content: '';display: block;width: 30px;height: 30px;border: 2px solid black;border-radius: 50%;position: absolute;top: 4px;left: 4px;box-sizing: border-box;
}#status {margin: 10px 0;font-size: 18px;
}button {padding: 10px 20px;font-size: 16px;cursor: pointer;background-color: #4caf50;color: white;border: none;border-radius: 5px;
}button:hover {background-color: #45a049;
}

JS源碼

const board = document.getElementById('board');
const status = document.getElementById('status');
const resetButton = document.getElementById('reset');
const toggleMoveNumberButton = document.getElementById('toggle-move-number');
const size = 15;
let cells = [];
let currentPlayer = 'black';
let gameOver = false;
let moveCount = 0;
let showMoveNumber = true; // 控制是否顯示當前是第幾手function createBoard() {board.innerHTML = '';cells = [];moveCount = 0;for (let i = 0; i < size; i++) {cells[i] = [];for (let j = 0; j < size; j++) {const cell = document.createElement('div');cell.classList.add('cell');cell.dataset.row = i;cell.dataset.col = j;cell.addEventListener('click', handleCellClick);board.appendChild(cell);cells[i][j] = cell;}}updateStatus();
}function handleCellClick(event) {if (gameOver) return;const cell = event.target;const row = parseInt(cell.dataset.row);const col = parseInt(cell.dataset.col);if (cell.classList.contains('black') || cell.classList.contains('white')) {return;}moveCount++;cell.classList.add(currentPlayer);cell.classList.add('current');cell.dataset.moveNumber = moveCount; // 存儲手數在 data-move-number 屬性中if (showMoveNumber) {cell.textContent = moveCount;}if (checkWin(row, col)) {status.textContent = `玩家 ${currentPlayer === 'black' ? '?' : '?'} 贏了!`;gameOver = true;} else {currentPlayer = currentPlayer === 'black' ? 'white' : 'black';updateStatus();updateCurrentMarker();}
}function checkWin(row, col) {return checkDirection(row, col, 1, 0) || // HorizontalcheckDirection(row, col, 0, 1) || // VerticalcheckDirection(row, col, 1, 1) || // Diagonal /checkDirection(row, col, 1, -1);  // Diagonal \
}function checkDirection(row, col, deltaRow, deltaCol) {let count = 0;let r = row;let c = col;while (r >= 0 && r < size && c >= 0 && c < size && cells[r][c].classList.contains(currentPlayer)) {count++;r += deltaRow;c += deltaCol;}r = row - deltaRow;c = col - deltaCol;while (r >= 0 && r < size && c >= 0 && c < size && cells[r][c].classList.contains(currentPlayer)) {count++;r -= deltaRow;c -= deltaCol;}return count >= 5;
}function updateStatus() {status.textContent = `當前玩家: ${currentPlayer === 'black' ? '?' : '?'}`;
}function updateCurrentMarker() {document.querySelectorAll('.cell').forEach(cell => cell.classList.remove('current'));
}function toggleMoveNumber() {showMoveNumber = !showMoveNumber;document.querySelectorAll('.cell').forEach(cell => {if (cell.classList.contains('black') || cell.classList.contains('white')) {cell.textContent = showMoveNumber ? cell.dataset.moveNumber : '';}});
}resetButton.addEventListener('click', () => {currentPlayer = 'black';gameOver = false;createBoard();
});toggleMoveNumberButton.addEventListener('click', toggleMoveNumber);createBoard();

預覽效果

在這里插入圖片描述

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

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

相關文章

【競技寶】歐冠:多特搶開局失敗,皇馬展示頂級防守反擊

本賽季歐冠決賽結束,皇馬在上半場被壓制的情況下,2比0擊敗多特蒙德奪得隊史第15座歐冠冠軍獎杯。比賽中多特蒙德已經展現出了不俗的狀態,可是面對老辣的皇馬他們還是敗下陣來,皇馬用頂級的防守反擊給多特上了一課。通過這場比賽,相信球迷們也清楚當今足壇硬實力不可或缺。 在許…

《Effective C++》《資源管理——14、在資源管理類中小心copying行為》

文章目錄 1、Terms14:Think carefully about copying behavior in resource-managing classes方法一&#xff1a;禁止復制方法二&#xff1a;對底層資源使出“引用計數法”方法三&#xff1a;復制底部資源方法四&#xff1a;轉移底部資源的擁有權 2、總結3、參考 1、Terms14:Th…

7-18 對象關系映射(orm_name)---PTA實驗C++

一、題目描述 一開始看到對象關系映射&#xff0c;其實我是拒絕的。這三個詞湊一塊&#xff0c;能是給C初學者的題嗎&#xff1f; 再仔細讀需求&#xff0c;才發現在課設項目已經用過這功能。Object Relational Mapping&#xff08;ORM&#xff09;就是面向對象&#xff08;O…

計算機基礎之:LSM樹

使用過hbase、cassandra之類nosql數據庫的小伙伴對LSM樹結構應該有所耳聞&#xff0c;那么這種數據結構有哪些優劣勢呢&#xff0c;本文做下簡單介紹。 LSM&#xff08;全稱&#xff1a;Log-Structured Merge Tree&#xff09;是一種廣泛應用于現代數據庫和存儲系統的數據結構…

《平淵》· 柒 —— 大道至簡?真傳一句話,假傳萬卷書!

《平淵》 柒 "真傳一句話, 假傳萬卷書" 對于 "大道至簡"&#xff0c;不少專家可能會說出一大堆亂七八糟的名詞, 比如這樣&#xff1a; 所謂 "大道" 即支撐天地運轉的 "系統自動力"&#xff0c;更具體地來說&#xff0c;即是天地人以…

快手游戲《無盡夢回》官宣開測:熱血動作肉鴿來襲

易采游戲網最新消息&#xff1a;5月30日11:00&#xff0c;快手自研的夢境主題動作冒險手游《無盡夢回》正式宣布開啟測試。此次測試名為“肉鴿進化實驗”&#xff0c;旨在測試多角色技能交會的玩法。游戲將開放32人同局競技&#xff0c;讓玩家在激烈的戰斗中角逐出唯一的勝利者…

HTML如何讓文字底部線條不緊貼在文字下面(既在內容下方又超出內容區域)

hello&#xff0c;大家好&#xff0c;星途星途今天給大家帶來的內容是如何讓文字底部線條不緊貼在文字下面。 話不多說&#xff0c;先上效果圖 簡單來說就是padding和margin的區別。 在網頁設計中&#xff0c;有時我們想要給某個元素添加一個裝飾性的線條&#xff0c;比如底部…

過濾器、監聽器、攔截器的區別

過濾器、監聽器、攔截器的區別 過濾器&#xff08;filter&#xff09;、監聽器&#xff08;Listener&#xff09;是JavaWeb的三大組件。而攔截器&#xff08;Interceptor&#xff09;是Spring框架中的。 我們主要是要分清除過濾器和攔截器的區別&#xff1a; 實現原理&#…

overleaf 寫參考文獻引用

目錄 1、 新建.bib 文件 2、導入引用 3、在文檔中引用參考文獻 4、生成參考文獻列表 1、 新建.bib 文件 在Overleaf項目中&#xff0c;你可以選擇導入現有的 .bib 文件或在項目中創建一個新的 .bib 文件來管理你的參考文獻。 導入.bib 文件&#xff1a; 在項目文件樹中點擊…

11. RBAC權限管理從零到一實現(二)

前端頁面已提交至git https://github.com/SJshenjian/cloud-web默認用戶名密碼admin 1

MySql 數據類型選擇與優化

選擇優化的數據類型 更小的通常更好 一般情況下盡量使用可以正確存儲數據的最小類型。更小的數據類型通常更快&#xff0c;因為它們占用更少的磁盤&#xff0c;內存和CPU緩存&#xff0c;并且處理時需要的CPU周期也更少。但也要確保沒有低估需要存儲值的范圍。 簡單就好 簡單的…

【自然語言處理】【Scaling Law】Observational Scaling Laws:跨不同模型構建Scaling Law

相關博客 【自然語言處理】【Scaling Law】Observational Scaling Laws&#xff1a;跨不同模型構建Scaling Law 【自然語言處理】【Scaling Law】語言模型物理學 第3.3部分&#xff1a;知識容量Scaling Laws 【自然語言處理】Transformer中的一種線性特征 【自然語言處理】【大…

jmeter性能優化之tomcat配置與基礎調優

一、 修改tomcat初始和最大堆內存 進入到/usr/local/tomcat7-8083/bin目錄下&#xff0c;編輯catalina.sh文件&#xff0c;&#xff0c;默認堆內存是600m&#xff0c;初始堆內存和最大堆內存保持一致&#xff0c; 可以更改到本機內存的70%&#xff0c;對于Linux系統&#xff0…

conda創建虛擬環境并激活

1 conda activate base 2 conda creat -n aaa python** 3 conda activate aaa 4 interpreter里面去選擇剛搞好的編譯器 ...../conda.exe

【SpringBoot】四種讀取 Spring Boot 項目中 jar 包中的 resources 目錄下的文件

本文摘要&#xff1a;四種讀取 Spring Boot 項目中 jar 包中的 resources 目錄下的文件 &#x1f60e; 作者介紹&#xff1a;我是程序員洲洲&#xff0c;一個熱愛寫作的非著名程序員。CSDN全棧優質領域創作者、華為云博客社區云享專家、阿里云博客社區專家博主。公粽號&#xf…

【操作系統】Windows平臺捕獲崩潰現場底層原理,附代碼親測MiniDumpWriteDump

MiniDumpWriteDump 是一個Windows API函數&#xff0c;它屬于DbgHelp.dll庫&#xff0c;用于生成程序崩潰時的內存轉儲文件&#xff08;MiniDump&#xff09;。這個函數是Windows平臺下用于捕獲程序崩潰時的內存狀態的常用方法之一。以下是MiniDumpWriteDump函數的原理和工作流…

【C++】ios::sync_with_stdio(false) 與 cin.tie(nullptr) 加速 IO

一、前言 之前寫題遇到大數據量&#xff08;cin、cout 數據量級達到 1e5、1e6 &#xff09;&#xff0c;因為考慮 IO 性能報錯 TLE&#xff0c;故選擇 scanf、printf 替代 cin、cout&#xff0c;以解決問題。一直以來沒有深入研究其中原因&#xff0c;只知關鍵詞——同步&…

設計模式(十三)行為型模式---命令模式

文章目錄 命令模式簡介結構UML圖具體實現UML圖代碼實現 命令模式簡介 命令模式&#xff08;command pattern&#xff09;也叫動作模式或者事務模式。它是將請求&#xff08;命令&#xff09;封裝成對象&#xff0c;使得可以用不同的請求對客戶端進行參數化&#xff0c;具體的請…

MD中 面料的物理屬性參數

該圖片是Marvelous Designer軟件中"Fabric Physical Properties"(面料物理屬性)面板的截圖,用于調整面料在彎曲、折疊時的硬度(Buckling Stiffness)。 目標部分解釋了調整Buckling Stiffness的作用:通過調整該百分比值來決定面料角落處的硬度。進入80%的Buckling St…

筆記-anaconda配置Python環境

查看環境 conda env list 創建python name環境,python版本為3.9&#xff1a; conda create -n name python3.9 激活&#xff1a; conda activate name 去掉激活&#xff1a; conda deactivate name 進入pandas目錄&#xff1a; cd D:\學習\pyton\antpy代碼\ant-learn-…