前端:运用HTML+CSS+JavaScript实现拼图游戏

这篇具有很好参考价值的文章主要介绍了前端:运用HTML+CSS+JavaScript实现拼图游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前一段时间突然来了一个想法,就是运用前端知识实现一个拼图游戏,但是不知道具体怎样实现。今天,想到既然实现不了现实中我们看到的那种拼块,那么就用正方形来代替吧!html拼图游戏,前端,前端,html,css,拼图游戏,javascript,原力计划
效果如下:
html拼图游戏,前端,前端,html,css,拼图游戏,javascript,原力计划
想到就是当小的图片块放到合适的位置上时,表示拼图完成。

1. 前端布局

运用css浮动样式,具体效果为:
html拼图游戏,前端,前端,html,css,拼图游戏,javascript,原力计划
两个div盒子,均采用左浮动,即它们的css样式表示为:float:left
至于小图片块交换位置动态效果,只是在css样式中设置这个属性即可。

.right li{
	transition: all 1s;
}

这个css属性小编觉得真的很不错,其实,现实中我们在网页端看到的轮播图等效果都有它的影子,实现一个轮播图只需用到相对定位和绝对定位、或者采用z-index等技术结合transition 等css属性可以完美实现(额外扩展一下!)
html拼图游戏,前端,前端,html,css,拼图游戏,javascript,原力计划

2. js脚本实现小图片块变换位置
1. 确定随机小图片块的选择

既然提到随机,那么肯定用到 Math.random() 这个函数呀!这个函数生成的随机数范围为0~1之间的随机小数,如果我们用 Math.floor(Math.random()Xnum),那么它的结果将是0~num(不包括num)。这个num为总的小图片块的总数,这样我们用生成的这个随机数即可确定一个小图片块的坐标,如 num = 37,每一行最多可以放小图片块数量为18,那么这个num表示的小图片块的位置为:(parseInt(num/18),num%18)=(2,1) ,通过这个坐标运用绝对定位相关知识,从而确定看到的效果中小图片块的样式位置。

let randomPosArr = [];
let randomMap = {},map2 = {};
let countSum = count_w * count_h;
// 小图片的总数
let i = 0;
while(i < randomNum){
	let pos = Math.floor(Math.random() * countSum);
	// 0 ~ 179
	let x = pos%count_w,y=Math.floor(pos/count_w);
	let pos_str = `${y},${x}`;
	if(randomMap[pos_str] === undefined){
		randomMap[pos_str] = true;
	}else{
		continue;
	}
	
	let num;
	while(true){
		num = Math.floor(Math.random() * randomNum);
		// 向下取整 0 ~ randomNum - 1 
		if(map2[num] === undefined){
			map2[num] = true;
			break;
		}
	}
	
	randomPosArr.push([y,x,num]);
	i ++;
}
2. 打乱随机小图片块的对应关系

虽然得到的随机生成的小图片的位置,那么怎样打乱它们的对应的关系呢?这里举一个例子,比如原来的顺序为 1,2,3,打乱之后,现在它们的顺序为2,3,1,即处于下标为0的1用2来占,下标为1的2用3来占,下标为2的3用1来占。这样的对应关系,不论随机小图片块的数量为奇数还是偶数,均可以打乱之间的顺序。
html拼图游戏,前端,前端,html,css,拼图游戏,javascript,原力计划

let posMap = {};
for(let i=0;i<randomNum;i++){
	let pos_y = randomPosArr[i][0],pos_x = randomPosArr[i][1],index = randomPosArr[i][2];
	let pos_str = `${pos_y},${pos_x}`;
	let pos3 = randomPosArr[index];
	let pos_str2 = `${pos3[0]},${pos3[1]}`;
	posMap[pos_str] = pos_str2;
}

这里没有用到随机函数 Math.random(),因为在上一个代码处,已经确定了,这里用 i 和生成的数组randomPosArr[i][2]来进行对应关系。

3. 点击小图片块进行拼图操作

当点击一个没有乱序的小图片块时,代码会给出相关提示。
html拼图游戏,前端,前端,html,css,拼图游戏,javascript,原力计划
当点击到一个乱序的图片时,就进行拼图操作,即把当前位置正确的小图片块拼回来,把当前图片放到当前位置正确的小图片块位置上。

function fun2(ele,v){
	let index = $(ele).attr('index'), index2 = $(ele).attr('index2');
	if(index2 === undefined || index2 === ''){
		alert('无需操作!');
		return;
	}
	// index2 当前位置
	else{
		let obj = fun3(index2);
		// console.log(obj);
		if(obj !== null){
			let _index2 = obj.attr('index2'),_arr2 = obj.attr('index').split(',');
			$(ele).attr('index2',_index2);
			obj.attr('index2','');
			// obj 已经回到原始位置,去掉index2属性中的值
			let _arr1 = _index2.split(',');
			
			obj.css({
				'top': parseInt(_arr2[0]) * param + 'px',
				'left': parseInt(_arr2[1]) * param + 'px'
			});
			
			$(ele).css({
				'top': parseInt(_arr1[0]) * param + 'px',
				'left': parseInt(_arr1[1]) * param + 'px'
			});
			
			if(fun4()){
				setTimeout(function(){
					alert('拼图成功!');
				},2000);
			}
		}
	}
}

fun2函数对应小图片块上的点击事件。

4. 更改小图片块的大小和小图片块的个数

代码头部这里进行修改参数即可。
html拼图游戏,前端,前端,html,css,拼图游戏,javascript,原力计划
【注】:上传的图片宽至少大于或等于900像素

5. 改进方案

小编觉得还可以加一个操作,就是当我们点击没有乱序的图片时,把当前图片再加几个小图片块加入到这个随机小图片块中,这样难度就高一些了,也更加完美,哈哈!
html拼图游戏,前端,前端,html,css,拼图游戏,javascript,原力计划

3. 实现参考代码和运行结果

参考代码已经上传到GitCode,链接为:拼图游戏.html
html拼图游戏,前端,前端,html,css,拼图游戏,javascript,原力计划
运行结果为:

前端:运用HTML+CSS+JavaScript实现拼图游戏文章来源地址https://www.toymoban.com/news/detail-712753.html

到了这里,关于前端:运用HTML+CSS+JavaScript实现拼图游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端:运用html+css+js模仿百度热搜电影榜鼠标移入特效

    1. 实现原理 百度热搜上电影榜鼠标移入特效如上图所示。个人觉得上述特效实现原理为使用相对定位、绝对定位实现的(鼠标移入和没有移入时,元素布局有一些不同而已)。至于鼠标移入时,出现延迟效果,则是在css上设置transition(用于设置过渡效果的)实现的。我的实现效果

    2024年02月15日
    浏览(67)
  • 前端全集Ⅰ---- HTML/CSS/JavaScript

    Web:全球广域网,也称万维网,能够通过浏览器访问的网站 Web网站的工作流程:(前后端分离模式) 网页有哪些组成? 文字、图片、视频、音频、超链接 前端代码通过浏览器的解析和渲染变成用户看到的页面,对网页进行解析渲染的部分就是浏览器的内核 Web标准 不同的浏

    2024年02月15日
    浏览(76)
  • 前端三剑客 HTML+CSS+JavaScript ② HTML相关概念

    他们这样形容我 是暴雨浇不灭的火                                                       —— 24.4.18 学习目标         理解                 HTML的概念                 HTML的分类                 HTML的关系                 HTML的语义化         应用

    2024年04月23日
    浏览(58)
  • 前端= 结构(HTML)+ 样式(CSS)+ 行为(JavaScript)

    前端开发确实涵盖了行为(JavaScript)、样式(CSS)和结构(HTML)这三个主要方面。这三个方面在前端开发中密切协作,共同构建用户界面和用户体验。 结构(Structure):HTML 是用于定义页面结构的标记语言。通过使用 HTML 标签,可以创建网页的基本骨架,包括标题、段落、

    2024年02月13日
    浏览(63)
  • [前端开发] 常见的 HTML CSS JavaScript 事件

    代码示例指路 常见的 HTML、CSS、JavaScript 事件代码示例 在 Web 开发中,事件是用户与网页交互的重要方式之一。通过事件,用户可以与页面元素进行交互,触发相应的功能或效果。本文将介绍常见的 HTML、CSS、JavaScript 事件,以及事件对象和事件代理的概念。 鼠标事件 鼠标事

    2024年02月19日
    浏览(56)
  • 前端随笔:HTML/CSS/JavaScript和Vue

    最近因为工作需要,需要接触一些前端的东西。之前虽然大体上了解过 HTML 、 CSS 和 JavaScript ,也知道 HTML 定义了内容、 CSS 定义了样式、 JavaScript 定义了行为,但是却没有详细的学习过前端三件套的细节。而最近的工作中需要使用 Vue ,并且想到未来的工作中使用 Vue 能够更

    2024年02月16日
    浏览(44)
  • 前端(html+css+javascript)作业--展现家乡的网页

    期末期间,老师布置了前端作业,现在放到这里,给各位同志参考。 桂平市是广西壮族自治区的一个美丽的城市,拥有丰富的历史文化和自然景观,属于贵港市管辖,那为什么是看起来是市级而不是县级,其实他就是个 市级县,比县大一些人口多一些就叫做市了。 此网页不

    2024年01月17日
    浏览(50)
  • 前端技术Html,Css,JavaScript,Vue3

    1.基本标签 2.文本格式化 3.链接 4.图片 5.无序列表 6.有序列表 7.表格 8.表单 1.选择器 2.文本和字体 3.链接 4.隐藏 5.定位position 6.浮动 7.对齐 8.图像 1.输出 2.函数 3.常用事件 4.DOM 5.改变Html 6.DOM 元素 (节点) 尾部创建新的 HTML 元素 (节点) - appendChild() 头部创建新的 HTML 元素 (节点)

    2024年02月13日
    浏览(52)
  • 建站系列(五)--- 前端开发语言之HTML、CSS、JavaScript

    建站系列(一)— 网站基本常识 建站系列(二)— 域名、IP地址、URL、端口详解 建站系列(三)— 网络协议 建站系列(四)— Web服务器之Apache、Nginx 建站系列(五)— 前端开发语言之HTML、CSS、JavaScript 建站系列(六)— 后端开发语言 建站系列(七)— 常用前后端框架

    2024年02月09日
    浏览(56)
  • 【前端】javascript+html+css 家具销售网站(代码+报告)

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 整个网页在头部部分,定义了字符编码、

    2024年02月14日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包