时间:2021-05-25
九宫格拼图小游戏是小时候比较常见的小游戏之一。闲着无聊就用js简单写了一个。
游戏的玩法很简单。九宫格中有八个小图片。随机打乱之后,将八张小图片拼接成一个完整的图。
html代码
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><style> body{ border: 0; } .out{ width: 606px; height: 606px; margin: 0 auto; border: 1px solid black; } .in{ width: 200px; height: 200px; background-color:red; float: left; border: 1px solid black; } .no_see{ width: 200px; height: 200px; background-color:white; float: left; border: 1px solid black; } .btn{ width: 50px; height: 25px; margin: 50px auto; } .begin{ width: 50px; height: 25px; }</style><head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>my game</title></head><body> <div class="out"> <div class="in"><img src="1.png" alt="" /></div> <div class="in"><img src="2.png" alt="" /></div> <div class="in"><img src="3.png" alt="" /></div> <div class="in"><img src="4.png" alt="" /></div> <div class="in"><img src="5.png" alt="" /></div> <div class="in"><img src="6.png" alt="" /></div> <div class="in"><img src="7.png" alt="" /></div> <div class="in"><img src="8.png" alt="" /></div> <div class='no_see'></div> </div></body></html>这里使用div来布局。具体实现就不啰嗦了。文章的重点是js的实现。
实现图片的互换
图片的互换其实就是html中的div互换。当点击图片时,和游戏中的空白图进行交换。
$('.in').click(function(){ var t = $(this).clone(); //复制当前点击的div $('.no_see').before(t); //在空白div的前面插入复制的div $(this).before($('.no_see')); //把空白div插入到点击div的前面 t.before($(this)) //把点击的div插入到复制div的前面 t.remove(); //移除复制的div})这里可能会有疑问。为什么后边要多一步 “把点击的div插入到复制div的前面”。测试过程中,发现clone()不会保留js操作节点。也就是点击的div所拥有的class,不能被继承。所以多这一步是为了点击过的div后面还能再继续点击。
保证只有相邻才能互换
当然,只有在空白div旁边的图片才能与其互换。不然游戏就太简单了。如何实现?下面先使用一种比较笨的方式来实现。
<script> $(function(){ var menu = { "1":["2","4"], "2":["1","3","5"], "3":["2","6"], "4":["1","5","7"], "5":["2","4","6","8"], "6":["3","5","9"], "7":["4","8"], "8":["5","7","9"], "9":["6","8"] } $('.in').click(function(){ var click_num = $(this).index()+1; var no_see_num = $('.no_see').index()+1; var arr = menu[no_see_num]; if(jQuery.inArray(String(click_num), arr)=='-1'){ //这里是无法交换位置的逻辑。可以做点什么。 }else{ var t = $(this).clone(); $('.no_see').before(t); $(this).before($('.no_see')); t.before($(this)) t.remove(); } }) })</script>是的,这种方法很蠢,但是可以实现。通过数组的方式,先找到空白div,再查看空白div所在位置四周有哪些位置的图片可以与其交换。
当然,九宫格使用这样的方式来实现没有问题,毕竟数组是可列的。但是如果变成16宫格,36宫格呢?先不说要去列数组,还要修改代码。这样就很费劲了。所以我需要通过别的方式,让代码以后扩展更容易。
通过算法保证互换条件
<script> $(function(){ $('.in').click(function(){ var tmp = false; var click_num = $(this).index(); var no_see_num = $('.no_see').index(); var click_x = click_num % 3; var click_y = Math.floor(click_num / 3); var no_see_x = no_see_num % 3; var no_see_y = Math.floor(no_see_num / 3); if (click_x==no_see_x) { //同一行 if (click_y==no_see_y+1||click_y==no_see_y-1) { tmp = true; //保证相邻 } }else if (click_y==no_see_y) { //同一列 if (click_x==no_see_x+1||click_x==no_see_x-1) { tmp = true; //保证相邻 } } if (tmp) { var t = $(this).clone(); t.addClass('bit'); $('.no_see').before(t); $(this).before($('.no_see')); t.before($(this)) t.remove(); } }) })</script>算法看起来会比较乱。简单的说是通过求余和相除取最小整数的方式来计算。
画几个表可能就清楚了。
1.在九宫格下每个图的顺序如下。
2.在九宫格下每个位置求余后的值如下。
3.在九宫格下每个位置除法取最小整数的值如下。
现在看起来应该简单多了。当取余相等时,两个位置在一列上。当除法取最小整数相等时,两个位置在一行上。
但是此时还存在一个问题,在一行或者一列上也有可能中间有间隔。所以采取当取余相等时,用除法的结果+1或者-1。此时就可以判断是否有间隔值了。
最后
到这里,游戏的主体就算写完了。当然,如何想丰富游戏趣味,可以加入计时器、完成所用步骤等等。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
数独游戏是一种源自18世纪末的瑞士的游戏,后在美国发展、并在日本得以发扬光大的数学智力拼图游戏。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、
iOS7.0.4怎么设置九宫格?很多人升级iOS7.0.4之后发现没有九宫格输入法,那么iOS7.0.4有没有九宫格输入法呢?iOS7.0.4九宫格设置?跟着小
iOS7.1怎么设置九宫格?很多人升级iOS7.1之后发现没有九宫格输入法,那么iOS7.1有没有九宫格输入法呢?iOS7.1九宫格设置?跟着百事网小编一起来学
这篇文章主要介绍了HTML九宫格布局实现方法,瀑布流,九宫格,响应式等布局方式已成为主流,对九宫格布局感兴趣的小伙伴们可以参考一下。 网站布局多样化是我们
很多朋友在问为什么ipadmini升级ios7没有九宫格呢?小编也觉得纳闷,ios7新增了九宫格功能,但是ipadmini升级ios7之后却找不到九宫格输入