微信小程序:做一个拼图游戏

执笔记忆的空白 2018-08-07 13:17:50 ⋅ 962 阅读

游戏界面

初始化游戏:


游戏成功:


思路&功能:

1.初始化,将数字1~8存放在数组中,随机打乱后拼接一个9(空白格),修改空白格的样式

2.点击数字,判断空白格对于其所在位置的方向,进行相应的上下左右移动

3.上下左右移动,及把移动的两个数字互换在数组中的位置

4.判断数组中元素是否是[1,2,3,4,5,6,7,8,9],是则游戏成功,

5.计时,利用定时器,结束,清除定时器

代码:

项目中所用到的数据:

data: {    
    num: ['★', '★', '★', '★', '★', '★', '★', '★', '★'],   //初始化前    
    hidden: true,   //隐藏空白格中的数字    
    time:0,           //秒数    
    t:''                  //定时器  
},

构建页面:index.wxml

<view class="container">
  <view class="row" wx:for="{{num}}" wx:for-item="item" wx:for-index="index">
    <button class="btn {{item == 9?'active':''}}" catchtap='onMoveTap'  data-item="{{item}}" data-index="{{index}}">{{item}}</button>
  </view>
</view>


需要传两个数据过去,一个是被点击块的下标index和块中的数字item

动态为空白格[9]添加样式active

{{item == 9?'active':''}}

游戏初始化:

init:function(){
    this.setData({
      num:this.sortArr([1,2,3,4,5,6,7,8]).concat([9])
    })
  },

初始化的时候,这里用了sortArr(arr)打乱数组,并拼接个空白格[9],这样让空白格初始化的时候永远处于最后一位。

随机打乱数组:

sortArr: function (arr) {    
   return arr.sort(function () {      
       return Math.random() - 0.5    })  }

这里用了最简单的打乱方法,缺点就是打乱不完全

给每个块添加点击事件onMoveTap:

onMoveTap: function (e) {
    var index = e.currentTarget.dataset.index;
    var item = e.currentTarget.dataset.item;    
   if (this.data.num[index + 3] == 9) {      this.down(e);    }        if (this.data.num[index - 3] == 9) {      this.up(e);        }        if (this.data.num[index + 1] == 9 && index != 2 && index != 5) {            this.right(e);    }    
   if (this.data.num[index - 1] == 9 && index != 3 & index != 6) {      this.left(e);    }  
}

如果空白格的下标比所点击的块的下表大3,则表示空白格在所点击块的下方,那么点击后向下移动;

如果空白格的下标比所点击的块的下表小3,则表示空白格在所点击块的上方,那么点击后向上移动;

如果空白格的下标比所点击的块的下表大1,则表示空白格在所点击块的右方,那么点击后向右移动,需考虑点击快是否在容器右边缘;

如果空白格的下标比所点击的块的下表小1,则表示空白格在所点击块的左方,那么点击后向左移动,需考虑点击快是否在容器左边缘;

移动:

以向上移动举例

 up: function (e) {
    var index = e.currentTarget.dataset.index; //当前数字下标
    var temp = this.data.num[index];
    this.data.num[index] = this.data.num[index - 3]
    this.data.num[index - 3] = temp;
    this.setData({
      num: this.data.num
    })    
    if (this.data.num.toString() == [1, 2, 3, 4, 5, 6, 7, 8, 9].toString()) {
      this.success();
    }
  }


移动后,将所点击块与空白格互换在数组中的位置,并判断目前的数组是否满足游戏成功的条件,判断数组相等,我这里把数组转化成字符串做的比较

游戏成功:

success: function () {
    var that = this;
    wx.showToast({
      title: '闯关成功',
      icon: 'success',
      success: function () {
        that.init();
      }
    })
  }

游戏成功,弹出交互反馈窗口,并初始化重新打乱数组

定时器:

 timeCount:function(){
    var that = this;
    var timer = that.data.time;
    that.setData({
      t:setInterval(function(){
        timer++;
        that.setData({ 
         time:timer
       })
      },1000)
    })
  }

开始结束游戏:

 timeBegin:function(){
    clearInterval(this.data.t);
    this.setData({
      time:0
    })
    this.timeCount();
    this.init();
  },
  timeStop:function(){
    clearInterval(this.data.t);    if (this.data.num.toString() != [1, 2, 3, 4, 5, 6, 7, 8, 9].toString()) {
      this.fail();
    }
  }

给开始按钮绑定timeBegin事件,初始化游戏

给结束按钮绑定timeStop事件,判断是否游戏成功

源代码:https://github.com/lcp1551/lcpISfat

---------------END----------------

后续的内容同样精彩

长按关注“IT实战联盟”哦




全部评论: 0

    我有话说:

    程序抖音实战-首页(上)

    你也可以用程序编写一个抖音

    程序电商实战-首页(下)

    上一篇:程序电商实战-首页(上)好了,上一期我们把首页搜索、导航栏和广告轮播给完了,那么接下来会继续

    程序实战篇:商品属性联动选择(案例)

    本期的程序实战篇来一个电商网站经常用到的-商品属性联动选择的效果,素材参考了一点

    程序实现商品数量加减

    这是一个程序原生代码实现的数量加减demo,主要是用于商品购物车或者商品详情修改数量使用

    程序-Image的widthFix属性和rpm尺寸的使用

    程序的商品详情页,商品的详情是图片集合,渲染完成后发现图片加载的很不自然

    程序电商实战-入门篇

    程序开发工具有新版本更新啦!开发体验更好了,接下来一起为电商程序一下准备前期准备工作~~

    程序电商实战-商品列表流式布局

    今天给大家分享一下程序中商品列表的流式布局方式,根据文章内容操作就可以看到效果哦~~~

    程序商城(七):动态API实现商品分类

    程序商品分类页面布局并且调用动态API获取数据并加载

    程序电商实战-首页(上)

    上一篇:程序电商实战-入门篇 嗨,大家好!经过近两周的精心准备终于开始程序电商实战之路喽。那么最终会做成什么样呢?好了,不啰嗦了 我们先看首页长什么样吧!   首页效果图

    程序实战篇:基于wxcharts.js绘制移动报表

    程序图表插件(wx-charts)是基于canvas绘制,体积巧,支持图表类型饼图、线图、柱状图 ......

    程序电商实战-购物车(上)

    好久没更新程序电商实战的文章了,是因为最近一直整体架构调整,一些准备工作也是比较耗费时间的。在这几天将会有新版的 程序电商教程推出.......

    程序 - iconfont 图标字体

    你还在使用图片作为程序的图标?大猪告诉大家如何在程序上使用iconfont字体图标

    程序实战篇:如何解决https域名问题 ?

    开发自己的程序绕不开https问题,为了能在程序中调用我们自己的API服务请打开看一看吧!!!

    程序:最新登录授权并获取openid等信息

    为优化用户体验,使用 wx.getUserInfo 接口直接弹出授权框的开发方式将逐步不再支持。从2018年4月30日开始,程序游戏的体验版、开发版调用 wx.getUserInfo 接口,将

    程序商城(九):授权并实现个人中心页面页面

    实现商城的授权并获取用户信息和个人中心页面布局

    程序实战篇:实现抖音评论效果

    我们在写程序的时候经常会遇到弹出层的效果而现有官网提供的跳转方法多数是不支持参数传递的。本文教大家一个抖音评论效果的程序......

    程序抖音实战-首页(下)

    抖音程序首页动态数据获取

    程序电商实战-商品详情(上)

    先看一下今天要实现的程序商品详情页吧!