创建您的第一个记忆卡片游戏

news2024/11/25 12:44:53

    大家好!今天,我们将一起探索如何用HTML、CSS和JavaScript创建一个有趣的记忆卡片游戏。我们的游戏规则很简单:用户需要找到一对一样的卡片。如果你是编程新手,不用担心,我会逐步引导你完成这个项目。

正文:

   大家好!今天,我们将一起探索如何用HTML、CSS和JavaScript创建一个有趣的记忆卡片游戏。我们的游戏规则很简单:用户需要找到一对一样的卡片。如果你是编程新手,不用担心,我会逐步引导你完成这个项目。

游戏逻辑深入分析

    在我们的游戏中,我们需要生成一组卡片,卡片背面相同,正面则显示不同的图片。用户点击两张卡片,如果图片相同则卡片保持翻开状态,如果不同则卡片重新翻回背面。

HTML结构

   在HTML结构中,我们定义了一个容器div,它将包含所有的游戏卡片。游戏中的卡片将通过JavaScript在页面加载时动态生成。

<div id="parent" class="par">
    <!-- 动态生成的卡片将在这里插入 -->
</div>

CSS样式

     CSS用于设置我们游戏界面的样式。我们定义了两个主要的样式类:.kid为卡片的样式,.par为包含所有卡片的父容器样式。

.kid{
    width: 150px;
    height: 150px;
    background-color: #7FFFD4;
    border: 1px solid black;
    margin: 10px;
    float: left;
}
.par{
    width: 65%;
    padding: 10px;
    border: 1px solid black;
    float: left;
}

.kid类中,float: left;使卡片水平排列。而.par类则定义了容器宽度以及内外边距。

JavaScript 细节

现在,我们来看看JavaScript部分,这是使游戏可玩的魔法所在。

  1. window.onload:当页面加载完毕后,这部分代码会被执行。这里是我们初始化游戏设置的地方。

  2. is数组:它的作用是跟踪每张图片的使用次数,确保每个图片只被使用两次。

  3. getImgIndex(is)函数:此函数负责获取一个随机且未分配超过两次的图片索引。

  4. look(id, index)函数:该函数在用户点击卡片时被触发。它会显示卡片对应的图片,且如果用户连续点击两张相同的图片,那么这些图片将保持显示状态。如果不同,则会在短延时后翻回背面。

完整代码清单

    在经过上面的分析后,我现在提供了修改后可工作的完整代码。您可以复制以下代码,保存为一个HTML文件,并用浏览器打开来尝试我们的记忆游戏。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.kid{
				width: 150px;
				height: 150px;
				background-color: #7FFFD4;
				border: 1px solid black;
				margin: 10px;
				float: left;
			}
			.par{
				width: 65%;
				padding: 10px;
				border: 1px solid black;
				float: left;
			}
		</style>
		<script>
			//初始化,随机分配图片
			window.onload = function(){
				//规则:五个背景图,每张图出现两次,随机分配到10个div中
				var ele = document.getElementById("parent");
				
				//图片数组
				var imgs = [1,2,3,4,5,6]; 
				
				var is = [0,0,0,0,0,0,0];
				
				for(var i = 0; i < 12; i++){
					//随机图片index
					var index = getImgIndex(is);
					console.info(index);
					ele.innerHTML += "<div id='k"+i+"' class='kid' "
						+"onclick='look(this.id,"+index+");' "
						+"</div>";//onmouseout='clearStyle(this.id);'>
				}
			}
			
			function getImgIndex(is){
				var index = parseInt(Math.random()*6)+1;
				if(is[index] < 2){
					is[index]++;
				} else {
					//递归
					index = getImgIndex(is);
				}
				return index;
			}
			//记录前面点击图片的索引index
			var imgIndex = 0;
			//记录前面点击的图片的div的id
			var imgDivId = "";
			
			function look(id,index){
				console.log("id = ",id,"  index = ",index)
				var ele = document.getElementById(id);
				ele.style="background-image: url(../../img/"+index+".jpg);";
				
				setTimeout(function(){
					if(imgIndex == 0){//第一次点击图片
						imgDivId = id;
						imgIndex = index;
					} else if(imgDivId == id){//重复点击同一张图片
						clearStyle(id);
					} else {
						if(imgIndex != index){//两张图片不同
							clearStyle(imgDivId);
							clearStyle(id);
						} else {//两张图片相同,清除onclick事件,防止再次点击
							document.getElementById(id).removeAttribute("onclick");
							document.getElementById(imgDivId).removeAttribute("onclick");
						}
						imgIndex = 0;
						imgDivId = "";
					}
				},200);
			}
			function clearStyle(id){
				var ele = document.getElementById(id);
				ele.style="";
			}
		</script>
	</head>
	<body>
		<div id="parent" class="par">
			<!-- <div id="k1" class="kid" onmouseover="look(this.id);" onmouseout="clearStyle(this.id);">
				
			</div> -->
		</div>
	</body>
</html>

请注意,将"url('../../img/"+index+".jpg')"替换为您实际的图片路径。

这是我的路径:

结语

    恭喜你,你已经完成了一个简单的记忆游戏!这个项目适合任何想入门Web开发的新手。通过实际编写代码并看到结果,你会更快地学习和理解网页开发的核心概念。随时为这个游戏添加更多功能,比如计时器、分数板或者更多级别的复杂性。祝你编程愉快!

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

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

相关文章

EyouCMSv1.5.1漏洞复现

赞赞网络科技 EyouCMS&#xff08;易优CMS&#xff09;是中国赞赞网络科技公司的一套基于ThinkPHP的开源内容管理系统&#xff08;CMS&#xff09;。 Eyoucms v1.5.1 及以前版本存在任意用户后台登陆与文件包含漏洞&#xff0c;该漏洞使攻击者可以通过调用api&#xff0c;在前台…

LIUNX进程程序替换

1.什么是程序替换 a.一个程序&#xff0c;只能执行自己的代码 b.如果想要一个程序执行&#xff0c;别的程序的代码呢&#xff1f; 我们就可以创建一个子进程&#xff0c;将这个子进程替换为我们想要执行的程序。 2.样例代码-----execl&#xff08;接口&#xff09; 返回值&…

如何信任机器学习模型的预测结果?

在本篇中&#xff0c;我将通过一个例子演示在 MATLAB 如何使用 LIME 进行复杂机器学习模型预测结果的解释。 我使用数据集 carbig&#xff08;MATLAB 自带的数据集&#xff09;训练一个回归模型&#xff0c;用于预测汽车的燃油效率。数据集 carbig 是 70 年代到 80 年代生产的…

Python 简易图形界面库easygui 对话框大全(续)

目录 EasyGUI库 主要特点 使用场景 对话框样式 10. 文件打开框 fileopenbox 11. 文件保存框 filesavebox 12. 目录打开框 diropenbox 13. 索引对话框 indexbox 14. 例外报告框 exceptionbox 15. 代码文本框 codebox 16. 密码输入框 passwordbox 17. 多重文本框 mul…

Spring的Bean你了解吗

Bean的配置 Spring容器支持XML(常用)和Properties两种格式的配置文件 Spring中XML配置文件的根元素是,中包含了多个子元素&#xff0c;每个子元素定义了一个Bean,并描述了该Bean如何装配到Spring容器中 元素包含了多个属性以及子元素&#xff0c;常用属性及子元素如下所示 i…

变分贝叶斯近似

马尔可夫链蒙特卡洛方法&#xff08;MCMC&#xff09;是一个非常有用和重要的工具&#xff0c;但在用于估计大型数据集的复杂后验分布或模型时可能会遇到困难。变分近似&#xff08;variational approximations&#xff09;或变分推断&#xff08;variational inference&#x…

搅拌站erp系统|从单站到集团公司,不同规模搅拌站如何选择ERP?

搅拌站在采购ERP时经常感到困惑&#xff1a;市场上ERP这么多&#xff0c;功能看上去也大同小异&#xff0c;到底应该怎么选择&#xff1f; 其实&#xff0c;不同规模的搅拌站&#xff0c;所处的发展阶段不同&#xff0c;工作流程不同&#xff0c;在选择ERP过程中需要考量的维度…

VIOOVI干货分享:生产标准工时的计算与观测次数确认

在制造业中&#xff0c;生产标准工时是一个关键指标&#xff0c;它可以帮助企业确定生产效率、评估员工绩效以及优化生产流程。本文将介绍生产标准工时的计算方法&#xff0c;并探讨如何确认观测次数&#xff0c;以充分利用ECRS工时分析软件。 一、生产标准工时的计算 生产标准…

Vue - 实现文件导出文件保存下载

1 文件导出&#xff1a;使用XLSX插件 需求背景&#xff1a;纯前端导出&#xff0c;如 在前端页面勾选部分表格数据&#xff0c;点击"导出"按钮导出Excel文件。 实现思路&#xff1a; 1.通过XLSX插件的 XLSX.utils.book_new()方法&#xff0c;创建excel工作蒲对象wb…

计量经济学|学习笔记以及学习感悟

初级计量经济学着重于介绍基本的统计工具和经济模型&#xff0c;以帮助理解经济数据和经济现象之间的关系。它包括回归分析、假设检验和预测方法等内容。中级计量经济学则深入研究这些方法的理论基础和实际应用&#xff0c;包括更复杂的模型和技术&#xff0c;如面板数据分析、…

【C语言】数据结构——排序二(快排)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;数组打印与交换1. 交换排序1.1 基本思想&#xff1a;1.2 冒泡与快排的异同 2. 冒泡排序2.1 基本思想2.2 …

【模型】模型量化技术:动态范围、全整数和Float16量化

目录 一 动态范围量化 二 全整数量化 三 float16量化 通常&#xff0c;表示神经网络的数据类型是32位浮点数&#xff08;float32&#xff09;&#xff0c;这种数据类型可以提供高精度的计算&#xff0c;但是在计算资源和存储空间有限的设备上运行神经网络时&#xff0c;会带…

小型内衣洗衣机什么牌子好?口碑好的小型洗衣机

想必大家都知道&#xff0c;我们的内衣裤、袜子这些衣物对卫生方面的要求是比较的高&#xff0c;毕竟是贴身的衣物&#xff0c;因此是要分开清洗的&#xff0c;而不能够跟我们其他的大件衣服一起放入到大型洗衣机里进行混洗&#xff0c;很多就选择了分开单独的手洗&#xff0c;…

【Python排序算法系列】—— 冒泡排序

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 冒泡排序 过程演示&#xff1a; 冒泡排序实现代码&#xff1a; 分析冒泡排序&#xff1a; P…

车载毫米波雷达及芯片新趋势研究2--“CMOS+AiP+SoC”与4D毫米波雷达推动产业越过大规模发展临界点

2.1 MMIC芯片工艺发展至CMOS时代&#xff0c;芯片集成度更高、体积与成本下降  MMIC芯片工艺经GaAs、SiGe已发展至CMOS时代&#xff0c;CMOS MMIC具有更低成本、更高集成度的优势。 工艺的主要变化发生在MMIC芯片的射频材料部分&#xff0c;目前SiGe仍为主流工艺。 SiGe虽在…

c# label 自定义行间距

label 添加 Paint 事件。用"\n" 段落换行 private void label2_Paint(object sender, PaintEventArgs e){int LineDistance 8;//行间距System.Windows.Forms.Label label sender as System.Windows.Forms.Label;System.Drawing.Font drawFont label.Font;label.Au…

Tips:电池电源电压转换为220V

今天在进行操作的时候&#xff0c;看到一个新的东西&#xff0c;就是如何普通的电瓶电压转化为220V交流电。 当在室外或者工作地距离电源比较远的情况下&#xff0c;一般是选取拉线的方式进行采电&#xff0c;但是当距离电源过远&#xff0c;使用拉线的方式就不可用了。如何在…

【Vue2+3入门到实战】(9)Vue基础之组件的三大组成部分(结构/样式/逻辑) 详细示例

目录 一、学习目标1.组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09; 二、scoped解决样式冲突**1.默认情况**&#xff1a;2.代码演示3.scoped原理4.总结 三、data必须是一个函数1、data为什么要写成函数2.代码演示3.总结 一、学习目标 1.组件的三大组成部分&#x…

ksuser.dll文件缺失怎么办?软件或游戏无法启动,一键自动修复

很多小伙伴反馈&#xff0c;自己的电脑中了病毒&#xff0c;被杀毒软件清理后&#xff0c;在打开游戏或软件的时候&#xff0c;经常会报错“提示无法找到ksuser.dll文件&#xff0c;建议重新安装软件或游戏”。自己根据提示重装后&#xff0c;还是报错&#xff0c;不知道应该怎…

php学习05-常量

常量可以理解为值不变的量。常量值被定义后&#xff0c;在脚本的其他任何地方都不能改变。一个常量由英文字母、下划线和数字组成&#xff0c;但数字不能作为首字母出现。 在PHP中使用define()函数来定义常量&#xff0c;该函数的语法格式如下&#xff1a; define(string cons…