|
|
好的!五子棋是一个非常有趣的游戏,我们可以使用HTML、CSS和JavaScript来创建一个简单的五子棋游戏。让我们一步一步地来做这个项目吧。
### 第一步:准备HTML结构
首先,我们需要创建一个HTML文件,作为我们网页的基础结构。五子棋需要一个棋盘,我们可以使用表格(table)元素来表示棋盘。
以下是你的HTML代码,文件名可以命名为`index.html`:
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>五子棋游戏</title>
- <style>
- table {
- border-collapse: collapse;
- margin: 20px auto;
- }
- td {
- width: 30px;
- height: 30px;
- text-align: center;
- font-size: 24px;
- border: 1px solid black;
- cursor: pointer;
- }
- .black {
- color: black;
- }
- .white {
- color: white;
- }
- body {
- text-align: center;
- font-family: Arial, sans-serif;
- }
- </style>
- </head>
- <body>
- <h1>五子棋游戏</h1>
- <table id="chessboard"></table>
- <script src="gomoku.js"></script>
- </body>
- </html>
复制代码
### 第二步:编写JavaScript代码
接下来,我们编写JavaScript代码来实现五子棋的逻辑。创建一个名为`gomoku.js`的文件,并将以下代码粘贴进去:
- document.addEventListener('DOMContentLoaded', () => {
- const boardSize = 15;
- const table = document.getElementById('chessboard');
- let board = Array(boardSize).fill().map(() => Array(boardSize).fill(null));
- let currentPlayer = 'black';
- let gameOver = false;
- // 创建棋盘
- for (let i = 0; i < boardSize; i++) {
- const row = document.createElement('tr');
- for (let j = 0; j < boardSize; j++) {
- const cell = document.createElement('td');
- cell.dataset.row = i;
- cell.dataset.col = j;
- cell.addEventListener('click', handleCellClick);
- row.appendChild(cell);
- }
- table.appendChild(row);
- }
- function handleCellClick(event) {
- if (gameOver) return;
- const row = event.target.dataset.row;
- const col = event.target.dataset.col;
- if (!board[row][col]) {
- board[row][col] = currentPlayer;
- event.target.classList.add(currentPlayer);
- if (checkWin(row, col, currentPlayer)) {
- alert(`${currentPlayer === 'black' ? '黑棋' : '白棋'}胜利!`);
- gameOver = true;
- } else {
- 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, dr, dc) {
- let count = 1;
- for (let i = 1; i < 5; i++) {
- const r = parseInt(row) + dr * i;
- const c = parseInt(col) + dc * i;
- if (r < 0 || r >= boardSize || c < 0 || c >= boardSize || board[r][c] !== player) break;
- count++;
- }
- for (let i = 1; i < 5; i++) {
- const r = parseInt(row) - dr * i;
- const c = parseInt(col) - dc * i;
- if (r < 0 || r >= boardSize || c < 0 || c >= boardSize || board[r][c] !== player) break;
- count++;
- }
- return count >= 5;
- }
- });
复制代码
### 解释一下代码
- 首先,我们在文档加载完成后初始化一个15x15的棋盘表格,每个单元格允许点击。
- 我们用一个二维数组`board`来记录每个位置的状态(黑棋、白棋或空)。
- 当前玩家通过变量`currentPlayer`记录,初始为黑棋。
- 每次单元格被点击时,根据当前玩家在相应位置放置棋子,并检测是否有玩家胜利。若有,则显示胜利消息并结束游戏,否则轮到另一方玩家。
- `checkWin()`函数检查当前玩家在所有可能方向上(水平、垂直、对角线)是否连成五子。
- `checkDirection()`函数以任意给定方向(由dr和dc定义)检查玩家连续的棋子数量,如果达到5则返回胜利。
这样,你就完成了一个基本的五子棋游戏。你可以保存这些代码,并在浏览器中打开HTML文件来运行你的游戏。希望你玩得开心!如果有任何问题,请随时告诉我。 |
|