【前段】开发五子棋小游戏全流程

使用前端技术开发五子棋小游戏

在这篇博文中,我们将详细介绍如何使用HTML、CSS和JavaScript开发一个简单的五子棋小游戏。我们将展示如何初始化棋盘、处理用户交互以及实现胜负判定。特别是,我们将着重介绍胜负判定的逻辑实现。
完整代码我放在了这里:github
在这里插入图片描述

项目结构

项目主要由两个文件组成:

  1. HTML文件:用于定义页面结构。
  2. JavaScript文件:负责游戏的逻辑和交互。

HTML结构

首先,我们创建一个简单的HTML文件,它定义了棋盘和基本样式。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>五子棋小游戏</title><style>/* 添加简单的样式 */#board {display: grid;grid-template-columns: repeat(15, 40px);grid-template-rows: repeat(15, 40px);border: 1px solid #000;}.cell {width: 40px;height: 40px;border: 1px solid #ccc;display: flex;align-items: center;justify-content: center;}</style>
</head>
<body><h1>五子棋小游戏</h1><div id="board"></div><script src="game.js"></script>
</body>
</html>

棋盘初始化

game.js 文件中,我们首先初始化棋盘和相关变量,然后生成棋盘界面并为每个单元格添加点击事件监听器。

const board = document.getElementById('board');
const size = 15;
let currentPlayer = 'black';// 初始化棋盘数组
const boardArray = Array(size).fill(null).map(() => Array(size).fill(null));// 初始化棋盘
for (let i = 0; i < size * size; i++) {const cell = document.createElement('div');cell.classList.add('cell');cell.dataset.index = i;board.appendChild(cell);
}// 监听点击事件
board.addEventListener('click', (event) => {const cell = event.target;if (cell.classList.contains('cell') && !cell.innerHTML) {const index = +cell.dataset.index;const x = index % size;const y = Math.floor(index / size);const disc = document.createElement('div');disc.style.width = '30px';disc.style.height = '30px';disc.style.borderRadius = '50%';disc.style.backgroundColor = currentPlayer;cell.appendChild(disc);// 更新棋盘状态boardArray[y][x] = currentPlayer;// 检查胜负if (checkWinner(boardArray, currentPlayer)) {alert(`${currentPlayer} wins!`);} else {// 切换玩家currentPlayer = currentPlayer === 'black' ? 'white' : 'black';}}
});

胜负判定

胜负判定逻辑是这个游戏的核心部分。我们需要检测棋盘上是否有五个连续的棋子。我们将从四个方向(水平、垂直、左上到右下、右上到左下)进行检查。

function checkWinner(boardArray, player) {const directions = [[1, 0], // 水平[0, 1], // 垂直[1, 1], // 左上到右下[1, -1] // 右上到左下];for (let y = 0; y < size; y++) {for (let x = 0; x < size; x++) {if (boardArray[y][x] === player) {for (let [dx, dy] of directions) {let count = 1;for (let step = 1; step < 5; step++) {const nx = x + dx * step;const ny = y + dy * step;if (nx >= 0 && nx < size &&ny >= 0 && ny < size &&boardArray[ny][nx] === player) {count++;} else {break;}}if (count === 5) {return true;}}}}}return false;
}

胜负判定逻辑解释

  1. 定义四个方向:我们定义了四个方向的增量 (dx, dy),分别对应水平、垂直、左上到右下和右上到左下。

  2. 遍历棋盘:在每个格子上,如果该格子是当前玩家的棋子,我们检查四个方向上是否有连续五个棋子。

  3. 检测五个连续的棋子:在每个方向上,我们使用一个 for 循环从1到4逐步增加步数 (step),计算新的坐标 (nx, ny),如果新坐标上的棋子和当前玩家相同,则增加计数器 count

  4. 返回胜利结果:如果在任何方向上计数器 count 达到5,则当前玩家胜利,函数返回 true,否则返回 false

总结

通过这篇博客,我们介绍了如何使用HTML、CSS和JavaScript开发一个简单的五子棋小游戏,重点介绍了棋盘初始化和点击事件处理,以及胜负判定的逻辑实现。希望这篇文章能帮助你更好地理解前端开发和算法的基础知识。享受编程的乐趣吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1425105.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AI应用案例:吸烟打电话行为识别推理

使用百度PaddlePaddle&#xff08;现更名为PaddlePaddle-GPU或PaddlePaddle-CPU&#xff09;框架来构建精准的人员抽烟、打电话动作识别模型&#xff0c;并将其应用于加油站监控场景&#xff0c;你可以遵循以下步骤&#xff1a; 数据准备&#xff1a; 收集抽烟和打电话行为的图…

【Linux网络编程】传输层中的TCP和UDP(UDP篇)

【Linux网络编程】传输层中的TCP和UDP&#xff08;UDP篇&#xff09; 目录 【Linux网络编程】传输层中的TCP和UDP&#xff08;UDP篇&#xff09;传输层再谈端口端口号范围划分认识知名端口号netstatiostatpidofxargs UDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲数据UDP使…

基于springboot实现大学生就业需求分析系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现大学生就业需求分析系统演示 摘要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲…

linux系统查看服务器硬件信息

1、查看服务器型号、序列号 # dmidecode|grep "System Information" -A9 | egrep "Manufacturer|Product|Serial" 2、查看主板型号 # dmidecode |grep -A16 "System Information$" 或 dmidecode -t1 3、查看BIOS信息 # dmidecode -t bios 4、…

绘唐2跟绘唐3有什么区别

绘唐2跟绘唐3有什么区别 这款产品的最大亮点在于其高度精准的语音克隆能力&#xff0c;利用先进的模型&#xff0c;能够捕捉到用户独特的音调、音高和调制方式&#xff0c;使用户能够以前所未有的方式复制和利用自己的声音。仅需10秒钟的录制时间&#xff0c;即可实现声音的克…

c语言中数字字符串和数字互转

#include <getopt.h> #include <stdio.h> #include <stdlib.h>#define MAX_PATH 256 char filename[MAX_PATH 5]; int main(int argc, char** argv) {//数字字符串转数字const char* kk "689";int zhi atoi(kk) 8;//数字字符串转doubledoub…

zip压缩unzip解压缩、gzip和gunzip解压缩、tar压缩和解压缩

一、tar压缩和解压缩 tar [选项] 打包文件名 源文件或目录 选项含义-c创建新的归档文件-x从归档文件中提取文件-v显示详细信息-f指定归档文件的名称-z通过gzip进行压缩或解压缩-j通过bzip2进行压缩或解压缩-J通过xz进行压缩或解压缩-p保留原始文件的权限和属性–excludePATTE…

VUE H5字体在安卓手机偏上解决

安卓手机展示样式,数字偏上,展示效果如图: 项目内添加新字体,引用新字体 vue 项目需要引入字体的话, 可以移步到这篇文章(无需下载依赖包)Vue3中引入外部自定义字体 项目文件assets内创建font文件夹, 粘贴你想用的字体, 创建对应的css文件; scss代码: font-face {/* 自定义的…

CV每日论文--2024.5.15

1、Can Better Text Semantics in Prompt Tuning Improve VLM Generalization? 中文标题&#xff1a;更好的文本语义在提示微调中能否提高视觉语言模型的泛化能力? 简介&#xff1a;这篇论文介绍了一种新的可学习提示调整方法,该方法超越了仅对视觉语言模型进行微调的传统方…

mysql主从热备+keepalived+ipvsadm 部署 mysql高可用主备+负载均衡模式

1、工作原理 ipvsadm工具工作原理&#xff1a; ipvsadm是一个用于管理IPVS&#xff08;IP Virtual Server&#xff09;的命令行工具。IPVS是linux内核中的一种负载均衡技术&#xff0c;它允许将网络流量分发到多个后端服务器&#xff0c;以提高系统的可用性、性能和扩展性。而…

Android面试题之Kotlin的几种常见的类

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 初始化的顺序 主构造函数里声明的属性 类级别的属性赋值 init初始化块里的属性赋值和函数调用 次构造函数里的属性赋值和函数调用 延迟初始…

统计学第2天

参数估计 基本概念 估计量与估计值 估计量&#xff1a;用于估计总体参数的随机变量 如&#xff1a;样本均值&#xff0c;样本比例&#xff0c;样本方差等 例如&#xff1a;样本均值就是总体均值的一个估计量 估计值&#xff1a;估计参数时计算出来的统计量的具体值 如&…

VMware Fusion 13.5.2 for Mac 发布,产品订阅模式首个重大变更

VMware Fusion 13.5.2 for Mac 发布&#xff0c;产品订阅模式首个重大变更 适用于基于 Intel 处理器和搭载 Apple 芯片的 Mac 的桌面虚拟化软件 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-fusion-13/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留…

美港通正规炒股市场沪指收跌0.82% 证券板块调整

5月15日电 15日,A股三大指数集体下挫。上证指数跌0.82%,报3119.9点;深证成指跌0.88%,报9583.54点;创业板指跌0.9%,报1838.89点。沪深京三市成交额7651亿元,其中沪深两市7611亿元,较上日缩量635亿元。沪深两市超3800只个股下跌。 美港通证券以其专业的服务和较低的管理费用在市…

Java入门基础学习笔记25——死循环和循环嵌套

死循环&#xff1a; 可以一直执行下去的一种循环&#xff0c;如果没有干预不会停下来。 死循环的写法&#xff1a; 例&#xff1a; package cn.ensource.loop;public class EndLessLoopDemo5 {public static void main(String[] args) {// 目标&#xff1b;掌握死循环的写法w…

数据分析案例-印度美食数据可视化分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

Word文件加密方法分享,为文档上锁很简单!

“我在使用电脑时&#xff0c;需要将一份Word文档加密&#xff0c;但是不知道应该怎么去操作&#xff0c;大家可以给我分享一些简单的文件加密方法吗&#xff1f;” 随着数字化办公的普及&#xff0c;Word文档的安全性越来越受到人们的关注。为了确保重要文档的机密性和安全性&…

不懂技术可以当项目经理吗?看完这篇你就知道了

项目经理作为项目的核心负责人&#xff0c;主要负责项目的规划、组织、协调和控制。 如果你不懂技术&#xff0c;但具备出色的项目管理技能&#xff0c;你仍然可以成功地管理项目。你可以通过与技术团队建立紧密的合作关系&#xff0c;明确项目需求&#xff0c;并依赖技术团队…

基于SpringBoot设计模式之创建型设计模式·生成器模式

文章目录 介绍开始架构图样例一定义生成器定义具体生成器&#xff08;HTML格式、markdown格式&#xff09;实体类HTML格式生成器MarkDown格式生成器 测试样例 总结优点缺点 介绍 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。   如…

2024 年第四届长三角高校数学建模竞赛C题

赛道 C&#xff1a;汽后配件需求预测问题 在汽后行业的供应链管理中&#xff0c;精准的需求预测是后续管理及决策的基础。各个汽后配件即为一个库存单位&#xff08;SKU&#xff0c;Stock Keeping Unit&#xff09;&#xff0c;如果可以准确预知未来对于各个配件的市场需求&am…