用前端技术打造五子棋小游戏,GitHub代码分享!
创作时间:
作者:
@小白创作中心
用前端技术打造五子棋小游戏,GitHub代码分享!
引用
CSDN
等
9
来源
1.
https://blog.csdn.net/xcc212/article/details/141946452
2.
https://blog.csdn.net/m0_49315169/article/details/118197223
3.
https://blog.csdn.net/qq_19309473/article/details/139392473
4.
https://github.com/HullQin/gobang
5.
https://github.com/wangdongdongc/Gomoku
6.
https://juejin.cn/post/7314937895039057958
7.
https://my.oschina.net/emacs_8577418/blog/16688833
8.
https://developer.aliyun.com/article/1261989
9.
https://jasonleaster.github.io/GoBang/
五子棋是一种广受欢迎的策略棋类游戏,起源于中国,具有悠久的历史。它不仅考验玩家的逻辑思维能力,还兼具趣味性和挑战性。在当今数字化时代,将五子棋游戏搬上网页,用前端技术实现,不仅能让我们重温经典,还能体验到现代技术带来的便利。
技术实现要点
HTML结构
我们使用canvas
元素来创建棋盘,通过JavaScript绘制网格。canvas
提供了强大的绘图API,非常适合绘制棋盘和棋子。
<canvas id="chessBoard" width="450" height="450"></canvas>
CSS样式
通过CSS设置棋盘的边框和背景色,使其更具视觉吸引力。
canvas {
border: 2px solid #654321;
background: #f0d9b5;
}
JavaScript逻辑
这是整个游戏的核心部分,包括棋盘初始化、落子处理、胜负判断等功能。
- 初始化棋盘
我们创建一个二维数组来记录棋盘状态,使用drawBoard
函数绘制棋盘网格。
const boardSize = 15;
let board = Array(boardSize).fill().map(() => Array(boardSize).fill(0));
function drawBoard() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
for (let i = 0; i < boardSize; i++) {
ctx.beginPath();
ctx.moveTo(offset, i * gridSize + offset);
ctx.lineTo(canvas.width - offset, i * gridSize + offset);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(i * gridSize + offset, offset);
ctx.lineTo(i * gridSize + offset, canvas.height - offset);
ctx.stroke();
}
}
- 处理落子
通过监听canvas
的点击事件,获取落子位置并更新棋盘状态。
canvas.addEventListener('click', (e) => {
const rect = canvas.getBoundingClientRect();
const x = Math.round((e.clientX - rect.left - offset) / gridSize);
const y = Math.round((e.clientY - rect.top - offset) / gridSize);
if (x >= 0 && x < boardSize && y >= 0 && y < boardSize && board[y][x] === 0) {
board[y][x] = currentPlayer;
drawPiece(x, y, currentPlayer);
if (checkWin(x, y)) {
info.textContent = `${currentPlayer === 1 ? '黑棋' : '白棋'} 获胜!`;
gameOver = true;
} else {
currentPlayer = currentPlayer === 1 ? 2 : 1;
info.textContent = `当前回合:${currentPlayer === 1 ? '黑棋' : '白棋'}`;
}
}
});
- 胜负判断
这是游戏逻辑中最复杂的一部分。我们需要检查当前落子位置的四个方向(水平、垂直、两个对角线)是否有连续的五子。
function checkWin(x, y) {
const directions = [
[1, 0], // 水平
[0, 1], // 垂直
[1, 1], // 右下
[1, -1] // 右上
];
for (let [dx, dy] of directions) {
let count = 1;
let i = x + dx, j = y + dy;
while (i >= 0 && i < boardSize && j >= 0 && j < boardSize && board[j][i] === currentPlayer) {
count++;
i += dx;
j += dy;
}
i = x - dx;
j = y - dy;
while (i >= 0 && i < boardSize && j >= 0 && j < boardSize && board[j][i] === currentPlayer) {
count++;
i -= dx;
j -= dy;
}
if (count >= 5) return true;
}
return false;
}
- 重新开始功能
提供一个按钮,允许玩家重新开始游戏。
function resetGame() {
board = Array(boardSize).fill().map(() => Array(boardSize).fill(0));
currentPlayer = 1;
gameOver = false;
info.textContent = '当前回合:黑棋';
drawBoard();
}
运行效果展示
GitHub代码仓库
为了方便大家学习和实践,我将完整的代码上传到了GitHub仓库。你可以直接下载代码并在本地运行。
总结与扩展
通过这个简单的五子棋游戏,我们不仅重温了经典,还学习了如何用前端技术实现一个完整的交互式应用。如果你对这个游戏感兴趣,可以尝试以下扩展功能:
- AI对手:实现一个简单的AI算法,让玩家可以与电脑对战。
- 联机对战:利用WebSocket技术,实现双人在线对战功能。
- 棋谱记录:记录每一步棋的位置,方便复盘和分析。
希望这篇文章能激发你对前端开发的兴趣,也期待你能在这个基础上创造出更多有趣的作品!
热门推荐
普朗克卫星揭秘宇宙新奥秘:暗能量比例下调,宇宙组成再添谜团
海口30个地名入选海南省首批地名文化遗产保护名录
友情虽远,心却相连:如何写出打动人心的"天各一方"文案?
肠癌来临,上厕所会出现4个异常
胃肠癌的6个征兆要当心,这些高危人群尤其要重视早筛!
济宁广电宽带虚假宣传?这份维权指南请收好!
牛筋棒成新晋网红防身神器!一文详解其功能与使用场景
军队统建房来了!32个城市转业军人有福了
蛇年春晚赛博又接地气:背后离不开这些AI高科技
《三体》中的虫洞技术揭秘:时间旅行真的可行吗?
科学家造出首个虫洞!你信吗?
虫洞:从理论构想到未来科技
新测量结果揭示:宇宙膨胀速度或超乎想象
企业网网络架构“拓扑还原”技术探索
交换机:在网络架构中的基本功能和作用
现代生活中路由器的重要性及选择使用指南解析
Qt动态库跨平台配置:你踩过哪些坑?
Qt动态库编译:MSVC vs MINGW,你选谁?
糖皮质激素软膏的作用
炮哥教你在家做出Q弹软烂的牛板筋
牛板筋:健身达人的新宠?
东林大佛旅游热🔥南京出发超全指南!
《道德经》中的抱朴守拙智慧:从古代哲学到现代应用
研究发现超1/5试验性干细胞存在致癌突变
肿瘤干细胞治疗,肿瘤干细胞治疗机制是什么
针对"极度缺乏有效疗法"的癌症脑膜转移,哈佛团队开发出新型"双干细胞疗法"!
癌细胞在肿瘤发生、进展和转移中的可塑性
园林赏梅最佳处,园主们早就安排好啦
水被无限压缩后会变成液态金属吗?
美联储重磅!降息将近?疯狂八月,黄金新高,日元过山车震荡!深层逻辑是什么?