首頁 web前端 H5教程 HTML5版智力拼图

HTML5版智力拼图

May 16, 2018 am 10:18 AM

本文介绍文件下载:智力拼图板文件下载 (浏览器需支持HTML5)

        还记得小时候经常玩的这种智力拼图板么,通过各个小格子的移动拼成一幅完整的画面。这种拼图的规则大致是:

1. 如果是九宫格的玩法,在九宫格里面有八个小方块;

2. 在右上角(或者像图片里一样的在右下角)是最后一个小方块,当其他8个方块拼凑完成后,将第九块方块推回到九宫格中,凑成一幅完整的画面。

(不过我小时候的策略都是抠出来,然后暴力的完成,智商不够,暴力来凑)

代码剖析

       以下是对一些关键代码的剖析,在游戏的开始,我们需要选择一张本地图片,然后游戏开始,会将选择的图片打乱到九宫格中,然后将右上角的图片移出,这样九宫格里就有空白位了:

1. 如何预览文件控件选择的图片?

        最近的浏览器中,处于安全的原因,他们都将图片的本地地址隐藏起来,这样我们就不能使用图片控件来进行预览了,万幸的是他们同时还提供了FileReader对象,我们可以通过该对象进行图片的预览,当然我也可以通过该对象得到图片的信息,然后可以在Canvas中进行绘制;

 1 $("#pic").change(function () {
 2   if (this.files.length > 0) {
 3     if (this.files[0].type == "image/jpeg" || this.files[0].type == "image/png") {
 4      reader.readAsDataURL(this.files[0]);
 5      }
 6       else {
 7       $(this).val("");
 8        }
 9       }
10    else {
11      $(this).val("");
12      }
13    });
登入後複製

2. 如何对图片进行裁剪分块?

因为我们所选择的图片可能并不能完整的被分割成需要的块数,比如我们设置横向为3格,但是图片的宽度并不是3的倍数,这样我们就需要对图片进行裁剪,以得到最合适的尺寸;

1   var validWidth = img[0].width - img[0].width % xCount;
2  var validHeight = img[0].height - img[0].height % yCount;
登入後複製

现在我们需要计算每个方块里面应该绘制什么样的图片,所以需要计算在原图里面截取的坐标点和尺寸,以及映射到九宫格里面的位置;

1  for (var y = 0; y < yCount; y++) {
2     for (var x = 0; x < xCount; x++) {
3      pieces.push({ index: x + y, point: { x: x * validWidth / xCount,
 y: y * validHeight / yCount, 
width: validWidth / xCount, height: validHeight / yCount } });
4      drawPoints.push({ x: x * pieceWidth, y: y * pieceHeight });
5      }
6        }
登入後複製

现在开始把方块进行打乱,但是我们又需要右上角的方块是正确的一块,并且可以把它移出到九宫格外;

 1   //randon draw points
 2     for (var i = 0; i < pieces.length; i++) {
 3      var index = parseInt(Math.random() * drawPoints.length);
 4         var drawPoint = drawPoints[index];
 5           drawPoints.splice(index, 1);
 6            pieces[i].DrawPoint = drawPoint;
 7          }
 8      //swap the top right
 9          for (var i = 0; i < pieces.length; i++) {
10           if (pieces[i].DrawPoint.x == (xCount - 1) * pieceWidth && 
pieces[i].DrawPoint.y == 0 +&& i != (xCount - 1)) {
11     var oldDP = pieces[xCount - 1].DrawPoint;
12     pieces[xCount - 1].DrawPoint = pieces[i].DrawPoint;
13     whitePiece = { x: pieces[xCount - 1].DrawPoint.x, y: pieces[xCount - 1].DrawPoint.y};
14     pieces[xCount - 1].DrawPoint.x += pieceWidth;
15     pieces[i].DrawPoint = oldDP;
16     break;
17       }
18                 }
登入後複製

在检测方块是否可以移动,我们就判断在该方块的上下左右是否有空白位,有就可以移向空白位;

1  var canMove = function (p) {
2     return (Math.abs(p.DrawPoint.x - whitePiece.x) == pieceWidth && 
p.DrawPoint.y == whitePiece.y)
3        || (Math.abs(p.DrawPoint.y - whitePiece.y) == pieceHeight && 
p.DrawPoint.x == whitePiece.x);
4           };
登入後複製

是否拼凑完成的判断,我们就判断该图片应该在第几行,第几列,并且当前在第几行,第几列,如果所有的方块都在正确的位置,那就表示成功了。

 1  var success = function () {
 2     for (var i = 0; i < pieces.length; i++) {
 3       var x = i % 3;
 4         var y = parseInt(i / 3);
 5            if (pieces[i].DrawPoint.x != x * pieceWidth || pieces[i].DrawPoint.y 
 != y * pieceWidth) {
 6               return false;
 7            }
 8        }
 9 
10        return true;
11       }
登入後複製

以上就是HTML5版智力拼图的内容,更多相关内容请关注PHP中文网(www.php.cn)!



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

See all articles