JS实现简单拼图游戏

news2024/11/23 13:15:01

JS实现简单拼图游戏

点击“打乱”按钮开始游戏;按下鼠标左键拖动一块到另一块上松开鼠标左键互换。游戏资源为一张图片

 我这里名称为 2.jpg,将其与下面的网页文件放在同一目录中即可。

网页文件源码如下:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title></title>
 </head>
 <style type="text/css">
  div{
   width: 200px;
   height: 200px;
   
  }
  .tu{
   background-image:url(2.jpg); /* 游戏图片 */
   }
  //利用background-position给每个div添加不同的图片;即9个div组成一幅完成的图片;
  #z-1{
   background-position: 0px 0px;
  }
  #z-2{
   background-position:-200px 0px;
  }
  #z-3{
   background-position:-400px 0px;
  }
  #z-4{
   background-position:0 -200px;
  }
  #z-5{
   background-position: -200px -200px;
  }
  #z-6{
   background-position: -400px -200px;
  }
  #z-7{
   background-position: 0px -400px;
  }
  #z-8{
   background-position: -200px -400px;
  }
  #z-9{
   background-position: -400px -400px;
  }
 </style>
 <script>
 //完成两个图片拖拽后的互换;
  function over(e){
   e.preventDefault();//阻止默认
  }
  //抓起
  function drag(e){
   var id=e.target.id;
   // console.log(e.target.id);
   e.dataTransfer.setData("id",id);//设置传输的是被抓id;
  }
  //经过
  function drop(e){
   var beizhuaId=e.dataTransfer.getData("id");//接受被抓id;
   // console.log(beizhuaId);//被抓ID
   var fangID=e.target.id;//所放位置的id;
   var beizhua=document.getElementById(beizhuaId);//获取被抓对象;
   var fang=document.getElementById(fangID);//获取放的对象;
   var f_beizhua=beizhua.parentNode;//分别找到对应的父节点
   var f_fang=fang.parentNode;
   //互换儿子
   f_beizhua.appendChild(fang);
   f_fang.appendChild(beizhua);
   win();
   }
   //判断赢得方法;每个父和子id名字序号相同,循环 ,累加count;
   function win(){
    var count=0;
    var tus=document.getElementsByClassName('tu');
    for(var i=0;i<tus.length;i++){
     var tu=tus[i];
     var fu=tu.parentNode;
     var tu_id=tu.getAttribute("id");
     var fu_id=fu.getAttribute("id");
     if(tu_id.replace("z-","")==fu_id.replace("f-","")){
      count++;
      console.log(count);
     }else{
      return;
     }
    }
    
    if(count==9){
      document.getElementById("PromptText").innerHTML="你赢了!"
    }
    
   }
   //打乱按钮;通过生成随机数;appenChild方法去多次互换,则为打乱;
   function daluan(){
    document.getElementById("PromptText").innerHTML=""
    for(var i=0;i<100;i++){
    var tus=document.getElementsByClassName('tu');
    var m=parseInt(Math.random()*9);
    var n=parseInt(Math.random()*9);
    var tusmp=tus[m].parentNode;
    var tusnp=tus[n].parentNode;
    tusmp.appendChild(tus[n]);
    tusnp.appendChild(tus[m]);
    }
   }
 </script>
 <body>
  <table border="1">
   <tr>
    <td>
     <div id="f-1" ondragover="over(event)" ondrop="drop(event)">
      <div id="z-1" class="tu" draggable="true" ondragstart="drag(event)"></div>
     </div>
    </td>
    <td>
     <div id="f-2" ondragover="over(event)" ondrop="drop(event)">
      <div  id="z-2" class="tu" draggable="true" ondragstart="drag(event)"></div>
     </div>
    </td>
    <td>
     <div id="f-3" ondragover="over(event)" ondrop="drop(event)">
      <div  id="z-3" class="tu" draggable="true" ondragstart="drag(event)"></div>
     </div>
    </td>
   </tr>
   <tr>
    <td>
     <div id="f-4" ondragover="over(event)" ondrop="drop(event)">
      <div id="z-4" class="tu" draggable="true" ondragstart="drag(event)"></div>
     </div>
    </td>
    <td>
     <div id="f-5" ondragover="over(event)" ondrop="drop(event)">
      <div id="z-5" class="tu" draggable="true" ondragstart="drag(event)"></div>
     </div>
    </td>
    <td>
     <div id="f-6" ondragover="over(event)" ondrop="drop(event)">
      <div id="z-6"  class="tu" draggable="true" ondragstart="drag(event)"></div>
     </div>
    </td>
   </tr>
   <tr>
    <td>
     <div id="f-7" ondragover="over(event)" ondrop="drop(event)">
      <div id="z-7"  class="tu" draggable="true" ondragstart="drag(event)"></div>
     </div>
    </td>
    <td>
     <div id="f-8" ondragover="over(event)" ondrop="drop(event)">
      <div id="z-8" class="tu" draggable="true" ondragstart="drag(event)"></div>
     </div>
    </td>
    <td>
     <div id="f-9" ondragover="over(event)" ondrop="drop(event)">
      <div id="z-9" class="tu" draggable="true" ondragstart="drag(event)"></div>
     </div>
    </td>
   </tr>

  </table>
  <input type="button" value="打乱" onclick="daluan()" />
  点击“打乱”开始游戏;按下鼠标左键拖动一块到另一块上松开鼠标左键互换。
  <p id ="PromptText" style="color: red;"></p>
 </body>
</html>

 用浏览器打开运行效果:

OK ! 

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

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

相关文章

Chapter 1: Introduction - Why Program? | Python for Everybody 讲义_Cn

文章目录 Python for Everybody课程简介适合所有人的 Python (Why Program?)为什么要学习写程序&#xff1f;创造力和动力计算机硬件架构了解编程单词和句子与 Python 对话术语&#xff1a;解释器和编译器Writing a program什么是程序&#xff1f;The building blocks of prog…

移远通信联合中国移动研究院等伙伴发布5G RedCap和车载模组白皮书

6月28日&#xff0c;在“2023年上海世界移动通信大会(MWC)”上&#xff0c;中国移动研究院联合移远通信等产业合作伙伴&#xff0c;共同发布了《5G RedCap轻量化通用模组技术要求白皮书》以及《车载模组技术发展白皮书》。 白皮书的发布为5G RedCap和车载领域技术和产业的进一步…

pdf加水印怎么加?一分钟学会!

在办公场景中&#xff0c;我们经常需要向客户或同事发送PDF格式的文件。这时就会面临一个问题&#xff1a;如何为我们的劳动成果打上个人烙印呢?答案是通过添加水印来满足我们的需求。但是&#xff0c;如何给PDF添加水印呢?难道要手动一个个添加吗?这无疑非常费力&#xff0…

整合来自多个Aurora数据库数据,亚马逊云科技为用户提供数据分析一体化融合解决方案

亚马逊云科技近日在沙利文联合头豹研究院发布的《2023年中国数据管理解决方案市场报告》中再次获评中国数据管理解决方案的领导者位置&#xff0c;并在增长指数和创新指数上获得最高评分。亚马逊云科技凭借其独特的数据服务和数据湖组合、全面的无服务器选项、打破数据传输壁垒…

ReentrantReadWriteLock源码

介绍 用一个变量如何维护多种状态 在 ReentrantLock 中&#xff0c;使用 Sync ( 实际是 AQS )的 int 类型的 state 来表示同步状态&#xff0c;表示锁被一个线程重复获取的次数。 但是&#xff0c;读写锁 ReentrantReadWriteLock 内部维护着一对读写锁&#xff0c;如果要用一…

软件自动化测试初学者忠告,错过就后悔了

目录 自动化测试进阶 自动化测试的层次 脚本 1-1 不要在实际项目中使用录制和回放 1-2 不要使用暂停 1-3 在循环中超时退出 1-4 不要将自动化测试完全等同于开发 1-5 不要写复杂的代码 1-6 验证逻辑条件的所有选项 1-7 使用编程规范 1-8 使用静态代码分析器 1-9 随…

Jmeter使用beanshell对接口加密,调用AES代码的jar包,CBC模式,有偏移量。

目录 前言&#xff1a; 这是AES加密代码 beanshell中的脚本 前言&#xff1a; 对接口进行加密是保障数据安全的重要措施之一。在JMeter中&#xff0c;你可以使用BeanShell脚本来实现对接口数据的加密处理。 工作中需要对接口进行AES加密&#xff0c;找开发要来了加密的代码…

PADS Logic的格点推荐设置

使用合适的格点大小能有效的提高我们设计的效率以及所设计文件的美观性。 第一步&#xff1a;执行菜单命令工具-选项&#xff0c;如图1所示 图1 设置选项示意图 第二步&#xff1a;在弹出的选项窗口常规栏中可以找到栅格设置&#xff0c;如图2所示&#xff0c;在设计中通常设置…

真无线蓝牙耳机排行榜10强,十款真无线蓝牙耳机盘点

为了帮助大家在这个充满选择的世界中找到最理想的蓝牙耳机&#xff0c;我们特别为您精心挑选了几款备受赞誉的产品&#xff0c;它们在音质、舒适度、功能和性价比等方面都有出色的表现。在本文中&#xff0c;我们将深入探讨这些蓝牙耳机的特点和优势&#xff0c;帮助您更好地了…

es学习知识汇总

es的索引库就相当于mysql的表 es的文档就相当于mysql的一条数据&#xff08;内容&#xff09; 用代码创建索引库到es 新增文档&#xff08;相当于mysql的一条数据&#xff08;内容&#xff09; 模拟将数据库中的到内容新增到es中 查询文档 注&#xff1a;以下 hotel为索引库名…

如何用迅捷PDF转换器在线压缩PDF文件

大家在工作中传输和保存PDF文件&#xff0c;有时发现PDF文件过大不利于保存&#xff0c;这种情况很多人都会对其进行压缩&#xff0c;但在压缩PDF大小的同时&#xff0c;大家也要注意PDF文件压缩后的质量&#xff0c;那么怎么才能又压缩大小&#xff0c;又能保持文件清晰度呢&a…

GitLab安装及代码管理

一、安装 环境&#xff1a;centos7 1.1、下载rpm安装脚本命令 curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash 上边命令里的rpm安装脚本地址可能会随时更新&#xff0c;当前需要用的是哪个地址&#xff0c;可以参考…

Java基础-泛型类、泛型方法、泛型接口

泛型的简单使用 集合中存储数据&#xff0c;使用到的泛型 // 如果我们没有给集合指定类型&#xff0c;默认认为所有的数据类型都是Object类型 // 此时可以往集合添加任意的数据类型。 // 带来一个坏处:我们在获取数据的时候&#xff0c;无法使用他的特有行为。 // 此时推出了泛…

新生产力革命下,亚马逊云科技超600种不同计算实例满足算力要求

近日&#xff0c;一年一度的亚马逊云科技中国峰会在上海如期召开。在本次峰会上可以切实地感受到亚马逊云科技的Day one理念&#xff0c;并且也对AI创新做了详细解读。 “AI创新”使算力需求井喷、运维复杂性增加 随着AI大模型的发展&#xff0c;大模型应用规模呈爆发式增长…

LED显示屏结构

LED显示屏通常由以下几个主要组成部分构成&#xff1a; LED模块&#xff1a;LED模块是构成LED显示屏的基本单元。它包含多个LED点阵&#xff0c;每个点阵包含红色、绿色和蓝色LED灯珠&#xff0c;通过不同的亮度和颜色组合来呈现图像和视频。LED模块的尺寸和像素密度可以根据需…

短视频seo矩阵+抖音小程序源码开发解决方案(一)

该解决方案主要针对产品用户交易决策周期长/非标定制等情况的企业&#xff0c;如&#xff1a;房产、汽车、金融、咨询服务&#xff0c;广告设计、网络科技公司&#xff0c;TOB类销售行业等。 基于不同的经营场景&#xff0c;解决方案全面更新&#xff0c;新增账号管理&#xf…

Rust in Action笔记 第九章 时间管理

本章主要讲如何实现一个网络时间协议NTP&#xff08;Network Time Protocol&#xff09;客户端&#xff0c;谷歌的世界时间同步误差大概在7毫秒&#xff0c;开源网站CockroachDB的延迟在数十毫秒&#xff0c;使用了NTP协议&#xff0c;在处理与时间敏感的数据时&#xff0c;chr…

C++实现位图与布隆过滤器

文章目录 前言1.位图相关介绍2.位图的实现3.位图的简单总结4.布隆过滤器的相关介绍5.布隆过滤器的实现6.布隆过滤器总结1.布隆过滤器的特点2.布隆过滤器的优点3.布隆过滤器的缺点 7.位图的应用海量数据面试题 前言 之前介绍了哈希表&#xff0c;本文要介绍另一种基于哈希思想的…

Java爬虫与Python爬虫有什么区别

Java爬虫和Python爬虫是两种常见的网络爬虫实现方式&#xff0c;它们在语言特性、开发环境和生态系统等方面存在一些区别。 1. 语言特性&#xff1a;Java是一种面向对象的编程语言&#xff0c;而Python是一种脚本语言。Java较为严谨&#xff0c;需要明确定义类、方法和变量&…

快速生成数据库表说明文档

背景 项目过程中需要对数据库字段说明归纳总结成文档&#xff0c;每个字段都用驼峰命名的话会比较低效繁琐。 现在分享一个在工作中使用的工具&#xff0c;可以一键生成数据库说明文档&#xff0c;简单的改改即可。 支持的数据库类型 MySql Oracle SqlServer PostgreSql Ma…