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

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

   大家好!今天,我们将一起探索如何用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开发的新手。通过实际编写代码并看到结果,你会更快地学习和理解网页开发的核心概念。随时为这个游戏添加更多功能,比如计时器、分数板或者更多级别的复杂性。祝你编程愉快!

相关文章
【python】使用matplotlib绘图使刻度线向内
成功使用代码实现matplotlib绘制的图刻度线朝内
【python】使用matplotlib绘图使刻度线向内
|
数据采集 机器学习/深度学习 编解码
MMdetection框架速成系列 第02部分:整体算法流程+模型搭建流程+detection训练与测试核心组件+训练部分与测试部分的核心算法
众所周知,目标检测算法比较复杂,细节比较多,难以复现,而我们推出的 MMDetection 开源框架则希望解决上述问题。目前 MMdetection 已经复现了大部分主流和前沿模型,例如 Faster R-CNN 系列、Mask R-CNN 系列、YOLO 系列和比较新的 DETR 等等,模型库非常丰富,star 接近 13k,在学术研究和工业落地中应用非常广泛。
2745 0
|
3月前
|
人工智能 运维 Cloud Native
云原生AI营销实践:2025年5家服务商的架构选择与部署策略
本文分析链创AI、蓝色光标等五家主流AI营销服务商的云原生架构实践,涵盖混合云、多云、SaaS、数据湖与微服务等部署模式,对比其伸缩性、安全与运维复杂度,总结数据标准化、弹性伸缩、成本优化等五大最佳实践,为AI营销系统建设提供参考。
|
6月前
|
C# 图形学 开发者
【Unity3D实例-功能-切换武器】切换武器(二)功能实现
本文为Unity3D切换武器功能的最终实现教程,介绍如何配置动画并编写武器架代码,实现角色多武器切换功能。内容包含动画设置、Unity准备、代码编写与测试等步骤,适合游戏开发者学习参考。
222 5
|
存储 监控 芯片
格式化后的SD卡照片还能恢复吗?
SD卡是日常生活中常见的存储介质,广泛应用于数码设备。如果不慎格式化了SD卡,特别是包含重要照片的卡,不必过于焦虑。快速格式化的照片恢复可能性较大,因为数据并未真正清除。要恢复丢失照片,首先检查是否有备份,有的话直接从备份还原。若无备份,可以使用数据恢复软件尝试恢复,但效果因情况而异。专业数据恢复服务也是选择,但成本较高。在恢复过程中,避免继续使用SD卡,尽早采取措施,选择合适的恢复工具,以提高恢复成功率。
stm32f407探索者开发板(十九)——外部中断实验-EXIT
stm32f407探索者开发板(十九)——外部中断实验-EXIT
1423 0
|
JSON 前端开发 JavaScript
前端Ajax、Axios和Fetch的用法和区别笔记
前端Ajax、Axios和Fetch的用法和区别笔记
473 2
|
网络协议 Linux Python
Linux探测工具BCC(网络)
Linux探测工具BCC(网络)
325 0
|
存储 安全 算法
静态路由与动态路由的区别及应用场景
【8月更文挑战第25天】
1687 0
|
存储 Ubuntu 安全
在Ubuntu 18.04上安装和配置Nextcloud的方法
在Ubuntu 18.04上安装和配置Nextcloud的方法
746 0

热门文章

最新文章