• 六边形拼图游戏之给提示


    此博客链接:https://www.cnblogs.com/ping2yingshi/p/14483090.html

    六边形拼图

    1.说明

    1.游戏玩法

     界面上显示一张被3*3六边形分割后打乱顺序的图片如图1.1打乱顺序图所示。(图片部分图片显示蓝色,称为蓝色图片),用户移动图片时,只能移动蓝色图片附近的图片,只需要点击图片,使图片和粉红色图片交换,最后把打乱顺序后的图片还原为原图片如图1.2原图所示。

                               1.1打乱顺序图

     

                                      1.2原图

    2.编程语言

    小程序

    2.技术原型

    (1)显示六边形

    (2)分割图片

    (3)移动图片

    (4)启发式搜索算法

    3.需求

    (1)在界面固定坐标处显示几张六边形图片。

    (2)打乱图片顺序。

    (3)交换图片。

    (4)当用户点击提示时,提示用户下一步移动哪一块儿图片。

    (5)判断用户移动图片是否和原图片一致。

    4.思路

    4.1说明

    使用代码分割图片,使每个图片显示六边形,把图片的背景位置存放到一个数组中,给每个图片绑定一个编号。使用启发式搜索算法,计算成功时需要的步骤,获取下一步的坐标,判断需要移动的图片,给出移动提示。

    4.2思路

    1.显示图片:把一张图片以六边形的形式展示。

    2.分割图片:把一张大的图片分割成多个小的六边形。

    3.获取用户点击事件:获取用户点击事件,判断图片是否和蓝色图片相邻,如果相邻则交换蓝色图片和选的图片的坐标。

    4.通关:通过判断图片编号和数组下标是否相等来判断图片是否还原了。

    5.提示:当用户点击提示时,给出移动提示。

    5.关键技术和核心代码

    5.1显示六边形

    5.1.1说明

    以六边形展示图片。

    5.1.2技术

    同一宽高的图片以不同固定角度叠加到一起,只取重合部分,视角效果会感觉像是一张六边形图片。

    同一张图片在同一位置以不同角度显示三次,只显示重合位置,不重合位置隐藏。

     

    5.1.3代码

    数据结构

     backup_liubianxing: [{
            className: 'pic1-1',
            flag: 0,
            fragment_no: 0,
          },
          {
            className: 'pic1-2',
            flag: 0,
            fragment_no: 1,
          },
          {
            className: 'pic1-3',
            flag: 0,
            fragment_no: 2,
          },
          {
            className: 'pic1-4',
            flag: 0,
            fragment_no: 3,
          },
          {
            className: 'pic2-1',
            flag: 0,
            fragment_no: 4,
          },
          {
            className: 'pic2-2',
            fragment_no: 5,
          },
          {
            className: 'pic2-3',
            fragment_no: 6,
    
          },
          {
            className: 'pic2-4',
            fragment_no: 7,
          },
          {
            className: 'pic4-4',
            fragment_no: 8,
            flag:1
          },
        ],

     wxml代码

    <view class="box">
        <block wx:for="{{liubianxing_pic}}" wx:for-index="row_index" wx:for-item="out_item">
            <view class="line{{row_index+1}}">
                <view class="pic-item" wx:for="{{out_item}}">
                    <view class="boxF">
                        <view class="boxS">
                            <view class="boxT {{item.className}}" data-row-index="{{row_index}}" data-col-index="{{index}}" bindtap="click_pic"></view>
                        </view>
                    </view>
                </view>
            </view>
        </block>
    </view>

    wxss代码

    .boxF,
    .boxS,
    .boxT {
         80px;
        height: 100px;
        overflow: hidden;
    }
    
    .boxF,
    .boxS {
        visibility: hidden;
    }
    
    .boxF {
        transform: rotate(120deg);
        float: left;
    }
    
    .boxS {
        transform: rotate(-60deg);
    }
    
    .boxT {
        transform: rotate(-60deg);
        /* background: no-repeat 50% center; */
        /* background-size: 125% auto; */
        visibility: visible;
        background-repeat: no-repeat;
        background-image: url(data:image/jpg;base64,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);
    }
    
    .pic-item {
        float: left;
        margin-left: 4px;
        display: inline-block;
        overflow: hidden;
    }
    
    .pic-item:after {
        content: '';
        height: 0;
        line-height: 0;
        display: block;
        visibility: hidden;
        clear: both;
    }
    
    .pic1-1 {
        /* width = 80 */
        background-position: 0 0;
    }
    
    .pic1-2 {
        /* width = 80 */
        /* 1*width  */
        background-position: -80px 0;
    }
    
    .pic1-3 {
        /* width = 80 */
        /* 2*width  */
        background-position: -160px 0;
    }
    
    .pic1-4 {
        /* width = 80 */
        /* 3*width  */
        background-position: -240px 0;
    }
    
    .pic2-1 {
        /* width = 80 */
        /* height = 100 */
        /* width + width/2  */
        background-position: -40px -75px;
    }
    
    .pic2-2 {
        /* width = 80 */
        /* height = 100 */
        /* width + width/2  */
        background-position: -120px -75px;
    }
    
    .pic2-3 {
        /* width = 80 */
        /* height = 100 */
        /* width + width/2  */
        background-position: -200px -75px;
    }
    
    .pic2-4 {
        /* width = 80 */
        /* height = 100 */
        /* width + width/2  */
        background-position: -280px -75px;
    }
    
    .pic3-1 {
        /* width = 80 */
        background-position: 0px -150px;
    }
    
    .pic3-2 {
        /* width = 80 */
        /* 1*width  */
        background-position: -80px -150px;
    }
    
    .pic3-3 {
        /* width = 80 */
        /* 2*width  */
        background-position: -160px -150px;
    }
    
    .pic3-4 {
        /* width = 80 */
        /* 3*width  */
        background-position: -240px -150px;
    }
    
    .pic4-1 {
        /* width = 80 */
        /* height = 100 */
        /* width + width/2  */
        background-position: -40px -225px;
        background-color: rgb(191, 216, 223);
    }
    
    .pic4-2 {
        /* width = 80 */
        /* height = 100 */
        /* width + width/2  */
        background-position: -120px -225px;
        background-color: rgb(191, 216, 223);
    }
    
    .pic4-3 {
        /* width = 80 */
        /* height = 100 */
        /* width + width/2  */
        background-position: -200px -225px;
        background-color: rgb(191, 216, 223);
    }
    
    .pic4-4 {
        /* width = 80 */
        /* height = 100 */
        /* width + width/2  */
        background-position: -1000px -1000px;
        background-color: rgb(191, 216, 223);
    }
    View Code

    5.2找出下一步

    5.2.1说明

    用户点击提示时,给出下一步提示。需要先把从当前位置到完成拼图时,走的所有步骤记录下来。

    5.2.2技术

    启发式搜索算法

    5.2.2.1定义

    参见百度百科解释:https://baike.baidu.com/item/%E5%90%AF%E5%8F%91%E5%BC%8F%E6%90%9C%E7%B4%A2/8944170?fr=aladdin

    5.2.2.2 估价函数

    f(x)=g(x)+h(x)

    f(x)为估算函数

    g(x)为初始状态到当前状态的全部距离

    h(x)为当前状态到目标状态所走的步数

    5.2.2.3搜索过程

    (1)把初始节点S0放入到Open表中,f(S0)=g(S0)+h(S0);

    (2)如果Open表为空,则问题无解,失败退出;

    (3)把Open表中的第一个节点取出放入到Closed表,并记该节点为n;

    (4)考察节点是否为目标节点。如果是的话,则找到问题的解,成功退出;

    (5)如果节点n不可扩展,则转到第(2)步骤;

    (6)扩展节点n,生成子节点ni(i=1,2......)计算每一个子节点的估价值f(ni)(i=1,2......),并为每一个子节点设置指向父节点的指针,然后将这些子节点放入到Open表中;

    (7)根据各节点的估价函数值,对Open表中的全部节点按从小到大的顺序重新进行排序;

    (8)转第(2)步。 

    5.2.3代码

    坐标位置的数据结构

        this.place = [ //坐标位置
            [0, 0],
            [1, 0],
            [2, 0],
            [0, 1],
            [1, 1],
            [2, 1],
            [0, 2],
            [1, 2],
            [2, 2]
        ];

    两个坐标之间的曼哈顿距离

    distance: function (a, b) {
        let aa = this.getCoordinate(a);
        let bb = this.getCoordinate(b);
        return Math.abs(aa.x - bb.x) + Math.abs(aa.y - bb.y);
      }

    状态空间搜索

     searchA: function () {
        // debugger
        var _this = this;
        var n = 0;
        var lastState;
        var nowAllNode = [];
        var isSuccess = false;
        //估价函数
        var hx = _this.totalDis(_this.data.nowOrder) + _this.data.step;
        _this.data.Open.push({
          h: hx,
          state: _this.data.nowOrder
        });
        nowAllNode = nowAllNode.concat(_this.data.Open);
        var i = 0
        while (_this.data.Open.length !== 0) {
          i++
          var temp; //当前节点
          // var i = 0;
          temp = _this.deepCopy(_this.data.Open[0]);
          _this.data.Open.forEach(function (el, index) {
            if (el.h < temp.h) {
              temp = _this.deepCopy(el);
              i = index;
            }
            if (_this.data.Open.length == index + 1) {
              _this.data.Open.splice(i, 1);
            }
          })
          _this.data.Closed.push(temp);
          //是否为目标节点
          if (JSON.stringify(temp.state) == JSON.stringify(_this.data.purposeOder)) {
            wx.showToast({
              title: '完成了',
            })
            console.log("还差一步")
            isSuccess = true;
            break;
          }
          nowAllNode.push(temp);
          //防止陷入无限循环  
          if (nowAllNode.length > 10) {
            nowAllNode.splice(0, 1);
          }
          _this.data.Open = [];
          //扩展节点
          temp.state.forEach(function (el, index) {
            var nowA = _this.deepCopy(temp.state);
            if (_this.distance(el, temp.state[8]) == 1) {
              let s = el;
              nowA[index] = nowA[8];
              nowA[8] = s;
              var kz = {
                h: _this.data.step + _this.totalDis(nowA),
                state: nowA
              }
              var m = true;
              for (var i = 0; i < nowAllNode.length; i++) { //判断是否走过此节点
                if (JSON.stringify(kz.state) == JSON.stringify(nowAllNode[i].state)) m = false;
                if (nowAllNode.length == i + 1 && m) _this.data.Open.push(kz);
              }
            }
          })
          if (n != 0) {
            _this.data.step++;
            lastState = _this.data.nowOrder;
            _this.data.nowOrder = _this.data.Closed.pop().state;
            // 输出当前移动步骤结果
            // console.log('输出当前移动步骤结果:', JSON.stringify(_this.data.nowOrder));
            // _this.test();
          }
          n++;
        }
        if (!isSuccess) {
          wx.showToast({
            title: '没有找到',
          })
          console.log('没有找到');
        }
        return isSuccess

      },
     
    
    

    6.实现过程

    1.图片以六边形显示。

    2.打乱图片顺序。

    3.移动图片。

    4.找到图片最终拼成的步骤。

    7.动态效果

    8.代码地址

    github地址:git@e.coding.net:SpringSun/jigsaw/jigsaw.git 。

    出来混总是要还的
  • 相关阅读:
    Spring Boot 无侵入式 实现 API 接口统一 JSON 格式返回
    Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
    排名前 16 的 Java 工具类
    万字详解,JDK8 的 Lambda、Stream 和日期的使用详解
    这样规范写代码,同事直呼“666”
    Java多线程高并发学习笔记——阻塞队列
    零散的MySQL基础总是记不住?看这一篇就够了!
    Java 中自定义注解及使用场景
    最简单的6种防止数据重复提交的方法!
    选择数据库联系人【选择之后将不在列表】
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14483090.html
Copyright © 2020-2023  润新知