最近公司刚好有个活动是要做一版 html5的拼图小游戏,于是自己心血来潮,自己先实现了一把,也算是尝尝鲜了。下面就把大体的思路介绍一下,希望大家都可以做出一款属于自己的拼图小游戏,必须是更炫酷,更好玩!来吧,大家一起加油。。。

利用canvas切出小块图片

我们知道现在的拼图游戏都是由九张小图片依次排列组成的,就是类似九宫格那样。那么以前的做法就是我们利用Photoshop这样的工具把原始大图【尺寸一般都是正方形的哦】切成九张小块的正方形小图,但是这种做法有点不灵活,如果我们要更换图片的话,就得重新去切图,好麻烦。。。
不过没关系,现在我们有了canvas!利用canvas我们可以很轻松的做到这些。核心代码如下:

var image = new Image();
image.onload = function() {
var index = 1;
for (var i=0; i<3; i++) {
for (var j=0; j<3; j++) {
ctx.drawImage(image, 300*j, 300*i, 300, 300, 0, 0, 300, 300);
$lis.eq(index-1).find('img').attr('src', canvas.toDataURL('image/jpeg'));
index++;
}
}
}
//900x900
image.src = "shanlian.jpg";

实现小块图片的随机排列

这里的核心是利用了javascript数组的随机排序,核心代码如下:

imgArr.sort(function(a, b) {
return Math.random() - Math.random();
});
var index = 1;
for (var i=0; i<3; i++) {
for (var j=0; j<3; j++) {
ctx.drawImage(image, 300*j, 300*i, 300, 300, 0, 0, 300, 300);
$lis.eq(imgArr[index-1]-1).find('img').data('seq', index).attr('src', canvas.toDataURL('image/jpeg'));
index++;
}
}

相关touch事件的监听和实现

这里无非就是利用向左滑动,向右滑动这些去实现拼图的操作。核心代码如下:

//阻止手机上浏览器的弹性下拉。。。
$('body').on('touchstart', function(e) {
e.preventDefault();
});
$lis.on('swipeLeft', function(e) {
e.preventDefault();
var $this = $(this);
var index = $this.index();
var html = $this.html();
var $prev = $this.prev();
if ($.inArray(index, [3, 6]) > -1 || $prev.size() <= 0) {
return false;
}
$this.html($prev.html());
$prev.html(html);
App.check();
});
$lis.on('swipeRight', function(e) {
e.preventDefault();
var $this = $(this);
var index = $this.index();
var html = $this.html();
var $next = $this.next();
if ($.inArray(index, [2, 5]) > -1 || $next.size() <= 0) {
return false;
}
$this.html($next.html());
$next.html(html);
App.check();
});
$lis.on('swipeUp', function(e) {
e.preventDefault();
var $this = $(this);
var html = $this.html();
var index = $this.index() - 3;
var $up = $lis.eq(index);
if (index >= 0 && $up.size() > 0) {
$this.html($up.html());
$up.html(html);
App.check();
}
});
$lis.on('swipeDown', function(e) {
e.preventDefault();
var $this = $(this);
var html = $this.html();
var index = $this.index() + 3;
var $down = $lis.eq(index);
if (index < 9 && $down.size() > 0) {
$this.html($down.html());
$down.html(html);
App.check();
}
});

游戏是否完成的判断

这里的话,拼图顺序的每一次变化都要去检测一下是否完成了,原理就是获取当前小块图片的顺序和原始的图片进行比较。核心代码如下:

var resArr = [];
$('#gameBox img').each(function(k, v) {
resArr.push(v.getAttribute("data-seq"));
});
if (resArr.join("") === oriArr.join("")) {
//完成的处理。。。
}

核心代码和思路就是上面这些,其实整个过程走下来还是蛮简单的,接下来无非要做的就是再加一下花哨的东西了(时间,难度等级,排名等等)。如果大家感兴趣的话,完整版代码猛戳 这里 了。

最新文章

  1. python模块(六)
  2. Oracle11完全卸载
  3. js中常用的操作
  4. PHP 设计模式 笔记与总结(2)开发 PSR-0 的基础框架
  5. WPF 本周、本月、本季、本年的第一天与最后一天取法
  6. DATASNAP为支持FIREDAC而增加的远程方法的数据类型TFDJSONDataSets
  7. javaScript创建无边框iframe兼容ie
  8. poj3671
  9. hdu1054 树状dp
  10. ABP 重写主键ID
  11. 解决vue2.0路由 TypeError: Cannot read property &#39;matched&#39; of undefined 的错误问题
  12. Go:学习笔记兼吐槽(3)
  13. 17年iPhone炫酷铃声,mp3、m4r格式下载
  14. ArcGIS 网络分析[2.5] VRP(车辆配送)【较难】
  15. Android+openCV 的坑
  16. C#基础第五天-作业-用DataTable制作名片集
  17. 【进阶修炼】&mdash;&mdash;改善C#程序质量(4)
  18. SqlServer当前月份时间
  19. QImage与QPixmap完全解析
  20. 开源ITIL管理软件iTop 2.5-2.6安装

热门文章

  1. QT ——TCP接收到的数据出现乱码情况
  2. ASP.NET Core 6框架揭秘实例演示[17]:利用IHttpClientFactory工厂来创建HttpClient
  3. laravel 框架 下拉分页
  4. linux signal-list
  5. CentOS7安装MYSQL8.X详细教程
  6. linux 常用命令:
  7. mysql之常用函数(核心总结)
  8. 记录VMware安装VMware Tools过程及遇到的一些问题
  9. Centos7下开启防火墙,允许通过的端口
  10. python练习册 每天一个小程序 第0009题