最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序?qū)崿F(xiàn)拼圖游戲

 更新時(shí)間:2021年07月23日 14:14:26   作者:流楚丶格念  
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了微信小程序?qū)崿F(xiàn)拼圖游戲的具體代碼,供大家參考,具體內(nèi)容如下

頁(yè)面展示

項(xiàng)目鏈接

微信小程序?qū)崿F(xiàn)拼圖游戲

項(xiàng)目設(shè)計(jì)

首頁(yè)面

wxml

<!--index.wxml-->
<view class="container">
  <!-- 標(biāo)題 -->
  <view class="title">游戲選關(guān)</view>

  <!-- 關(guān)卡列表 -->
  <view class="levelBox">
    <view class="box" wx:for="{{levels}}" wx:key="levels{{index}}" bindtap="chooseLevel" data-level="{{item}}">
      <image src="/images/{{item}}"></image>
      <text>第{{index+1}}關(guān)</text>
    </view>
  </view>

</view>

wxss

/**index.wxss**/
/* 關(guān)卡區(qū)域列表 */
.levelBox{
  width: 100%;
}

/* 單個(gè)關(guān)卡區(qū)域 */
.box{
  width: 50%;
  float: left;
  margin: 25rpx 0;
  display: flex;
  flex-direction: column;
  align-items: center;
}

/* 選關(guān)圖片 */
image{
  width: 260rpx;
  height: 260rpx;
}
//index.js
Page({

  /**
   * 頁(yè)面的初始數(shù)據(jù)
   */
  data: {
    levels: [
      'pic01.jpg',
      'pic02.jpg',
      'pic03.jpg',
      'pic04.jpg',
      'pic05.jpg',
      'pic06.jpg'
    ]

  },

  /**
   * 自定義函數(shù)--游戲選關(guān)
   */
  chooseLevel: function(e) {
    // console.log(e.currentTarget.dataset.level)
    // 獲取選關(guān)圖片
    let level = e.currentTarget.dataset.level

    // 跳轉(zhuǎn)游戲頁(yè)面
    wx.navigateTo({
      url: '../game/game?level='+level,
    })

  },
})

游戲頁(yè)面

wxml

<!--pages/game/game.wxml-->
<view class="container">
  <!-- 頂端提示圖 -->
  <view class="title">提示圖</view>
  <image src="{{url}}"></image>

  <!-- 游戲區(qū)域 -->
  <canvas canvas-id="myCanvas" bindtouchstart="touchBox"></canvas>

  <!-- 重新開始按鈕 -->
  <button type="warn" bindtap="restartGame">重新開始</button>
</view>

wxss

/* pages/game/game.wxss */
/* 提示圖 */
image{
  width: 250rpx;
  height: 250rpx;
}

/* 游戲畫布區(qū)域 */
canvas{
  border: 1rpx solid;
  width: 300px;
  height: 300px;
}

js

// pages/game/game.js
// 方塊的初始位置
var num = [
  ['00', '01', '02'],
  ['10', '11', '12'],
  ['20', '21', '22']
]

// 方塊的寬度
var w = 100

// 圖片的初始地址
var url = '/images/pic01.jpg'

Page({

  /**
   * 頁(yè)面的初始數(shù)據(jù)
   */
  data: {
    isWin: false

  },

  /**
   * 自定義函數(shù)--隨機(jī)打亂方塊順序
   */
  shuffle: function() {
    // 先令所有方塊回歸初始位置
    num = [
      ['00', '01', '02'],
      ['10', '11', '12'],
      ['20', '21', '22']
    ]

    // 記錄當(dāng)前空白方塊的行和列
    var row = 2
    var col = 2

    // 隨機(jī)打亂方塊順序100次
    for (var i = 0; i < 100; i++) {
      // 隨機(jī)生成一個(gè)方向:上0,下1,左2,右3
      var direction = Math.round(Math.random() * 3)

      // 上:0
      if (direction == 0) {
        // 空白方塊不能在最上面一行
        if (row != 0) {
          // 交換位置
          num[row][col] = num[row - 1][col]
          num[row - 1][col] = '22'

          // 更新空白方塊的行
          row -= 1
        }
      }

      // 下:1
      if (direction == 1) {
        // 空白方塊不能在最下面一行
        if (row != 2) {
          // 交換位置
          num[row][col] = num[row + 1][col]
          num[row + 1][col] = '22'

          // 更新空白方塊的行
          row += 1
        }
      }

      // 左:2
      if (direction == 2) {
        // 空白方塊不能在最左邊一列
        if (col != 0) {
          // 交換位置
          num[row][col] = num[row][col - 1]
          num[row][col - 1] = '22'

          // 更新空白方塊的列
          col -= 1
        }
      }

      // 右:3
      if (direction == 3) {
        // 空白方塊不能在最右邊一列
        if (col != 2) {
          // 交換位置
          num[row][col] = num[row][col + 1]
          num[row][col + 1] = '22'

          // 更新空白方塊的列
          col += 1
        }
      }

    }

  },

  /**
   * 自定義函數(shù)--繪制畫布內(nèi)容
   */
  drawCanvas: function() {
    let ctx = this.ctx

    // 清空畫布
    ctx.clearRect(0, 0, 300, 300)

    // 使用雙重for循環(huán)語(yǔ)句繪制3x3拼圖
    for (var i = 0; i < 3; i++) {
      for (var j = 0; j < 3; j++) {
        if (num[i][j] != '22') {
          // 獲取行和列
          var row = parseInt(num[i][j] / 10)
          var col = num[i][j] % 10

          // 繪制方塊
          ctx.drawImage(url, col * w, row * w, w, w, j * w, i * w, w, w)
        }
      }
    }

    ctx.draw()
  },

  /**
   * 自定義函數(shù)--監(jiān)聽點(diǎn)擊方塊事件
   */
  touchBox: function(e) {
    // 如果游戲已經(jīng)成功,不做任何操作
    if (this.data.isWin) {
      // 終止本函數(shù)
      return
    }

    // 獲取被點(diǎn)擊方塊的坐標(biāo)x和y
    var x = e.changedTouches[0].x
    var y = e.changedTouches[0].y
    // console.log('x:'+x+',y:'+y)

    // 換算成行和列
    var row = parseInt(y / w)
    var col = parseInt(x / w)

    // 如果點(diǎn)擊的不是空白位置
    if (num[row][col] != '22') {
      // 嘗試移動(dòng)方塊
      this.moveBox(row, col)

      // 重新繪制畫布內(nèi)容
      this.drawCanvas()

      // 判斷游戲是否成功
      if (this.isWin()) {
        // 在畫面上繪制提示語(yǔ)句
        let ctx = this.ctx

        // 繪制完整圖片
        ctx.drawImage(url, 0, 0)

        // 繪制文字
        ctx.setFillStyle('#e64340')
        ctx.setTextAlign('center')
        ctx.setFontSize(60)
        ctx.fillText('游戲成功', 150, 150)
        ctx.draw()
      }
    }
  },

  /**
   * 自定義函數(shù)--移動(dòng)被點(diǎn)擊的方塊
   */
  moveBox: function(i, j) {
    // 情況1:如果被點(diǎn)擊的方塊不在最上方,檢查可否上移
    if (i > 0) {
      // 如果方塊的上方是空白
      if (num[i - 1][j] == '22') {
        // 交換當(dāng)前被點(diǎn)擊的方塊和空白的位置
        num[i - 1][j] = num[i][j]
        num[i][j] = '22'
        return
      }
    }

    // 情況2:如果被點(diǎn)擊的方塊不在最下方,檢查可否下移
    if (i < 2) {
      // 如果方塊的下方是空白
      if (num[i + 1][j] == '22') {
        // 交換當(dāng)前被點(diǎn)擊的方塊和空白的位置
        num[i + 1][j] = num[i][j]
        num[i][j] = '22'
        return
      }
    }

    // 情況3:如果被點(diǎn)擊的方塊不在最左側(cè),檢查可否左移
    if (j > 0) {
      // 如果方塊的左側(cè)是空白
      if (num[i][j - 1] == '22') {
        // 交換當(dāng)前被點(diǎn)擊的方塊和空白的位置
        num[i][j - 1] = num[i][j]
        num[i][j] = '22'
        return
      }
    }

    // 情況4:如果被點(diǎn)擊的方塊不在最右側(cè),檢查可否右移
    if (j < 2) {
      // 如果方塊的右側(cè)是空白
      if (num[i][j + 1] == '22') {
        // 交換當(dāng)前被點(diǎn)擊的方塊和空白的位置
        num[i][j + 1] = num[i][j]
        num[i][j] = '22'
        return
      }
    }
  },

  /**
   * 自定義函數(shù)--判斷游戲是否成功
   */
  isWin: function() {
    // 使用雙重for循環(huán)檢查整個(gè)數(shù)組
    for (var i = 0; i < 3; i++) {
      for (var j = 0; j < 3; j++) {
        // 如果有方塊位置不對(duì)
        if (num[i][j] != i * 10 + j) {
          // 返回假,游戲尚未成功
          return false
        }
      }
    }

    // 游戲成功,更新狀態(tài)
    this.setData({
      isWin: true
    })
    // 返回真,游戲成功
    return true
  },

  /**
   * 自定義函數(shù)--重新開始游戲
   */
  restartGame: function() {
    // 更新游戲狀態(tài)
    this.setData({
      isWin: false
    })

    // 打亂方塊順序
    this.shuffle()

    // 繪制畫布內(nèi)容
    this.drawCanvas()
  },

  /**
   * 生命周期函數(shù)--監(jiān)聽頁(yè)面加載
   */
  onLoad: function(options) {
    // console.log(options.level)

    // 更新圖片路徑地址
    url = '/images/' + options.level
    // 更新提示圖的地址
    this.setData({
      url: url
    })

    // 創(chuàng)建畫布上下文
    this.ctx = wx.createCanvasContext("myCanvas")

    // 打亂方塊順序
    this.shuffle()

    // 繪制畫布內(nèi)容
    this.drawCanvas()
  },

  /**
   * 生命周期函數(shù)--監(jiān)聽頁(yè)面初次渲染完成
   */
  onReady: function() {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽頁(yè)面顯示
   */
  onShow: function() {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽頁(yè)面隱藏
   */
  onHide: function() {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽頁(yè)面卸載
   */
  onUnload: function() {

  },

  /**
   * 頁(yè)面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動(dòng)作
   */
  onPullDownRefresh: function() {

  },

  /**
   * 頁(yè)面上拉觸底事件的處理函數(shù)
   */
  onReachBottom: function() {

  },

  /**
   * 用戶點(diǎn)擊右上角分享
   */
  onShareAppMessage: function() {

  }
})

為大家推薦現(xiàn)在關(guān)注度比較高的微信小程序教程一篇:《微信小程序開發(fā)教程》小編為大家精心整理的,希望喜歡。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ES6中class類用法實(shí)例淺析

    ES6中class類用法實(shí)例淺析

    這篇文章主要介紹了ES6中class類用法,結(jié)合實(shí)例形式分析了ES6中類的實(shí)現(xiàn)方法與相關(guān)語(yǔ)法使用技巧,需要的朋友可以參考下
    2017-04-04
  • Typescript定義多個(gè)接口類型聲明的方式小結(jié)

    Typescript定義多個(gè)接口類型聲明的方式小結(jié)

    這篇文章主要介紹了Typescript定義多個(gè)接口類型聲明的方式小結(jié),在 TypeScript 中,您可以使用交叉類型(&)或聯(lián)合類型(|)來(lái)組合多個(gè)接口,從而實(shí)現(xiàn)多個(gè)接口類型的混合,文中通過(guò)代碼講解的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • js焦點(diǎn)文字滾動(dòng)效果代碼分享

    js焦點(diǎn)文字滾動(dòng)效果代碼分享

    這篇文章主要介紹了js焦點(diǎn)文字滾動(dòng)效果,功能實(shí)現(xiàn)非常簡(jiǎn)單,推薦給大家,有需要的小伙伴可以參考下。
    2015-08-08
  • JS實(shí)現(xiàn)方形抽獎(jiǎng)效果

    JS實(shí)現(xiàn)方形抽獎(jiǎng)效果

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)方形抽獎(jiǎng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫效果

    js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • js如何讀取csv內(nèi)容拼接成json

    js如何讀取csv內(nèi)容拼接成json

    這篇文章主要介紹了js如何讀取csv內(nèi)容拼接成json,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 用file標(biāo)簽實(shí)現(xiàn)多圖文件上傳預(yù)覽

    用file標(biāo)簽實(shí)現(xiàn)多圖文件上傳預(yù)覽

    本文介紹了用file標(biāo)簽實(shí)現(xiàn)多圖文件上傳預(yù)覽的方法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • js監(jiān)聽F11觸發(fā)全屏事件簡(jiǎn)單代碼舉例

    js監(jiān)聽F11觸發(fā)全屏事件簡(jiǎn)單代碼舉例

    這篇文章主要給大家介紹了關(guān)于js監(jiān)聽F11觸發(fā)全屏事件的相關(guān)資料,自己工作中遇到的一點(diǎn)點(diǎn)小問(wèn)題,記錄一下,希望也能對(duì)你們有幫助,需要的朋友可以參考下
    2024-05-05
  • JavaScript實(shí)現(xiàn)左右滾動(dòng)電影畫布

    JavaScript實(shí)現(xiàn)左右滾動(dòng)電影畫布

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)左右滾動(dòng)電影畫布,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • js 中 document.createEvent的用法

    js 中 document.createEvent的用法

    用該方法創(chuàng)建了 Event 對(duì)象以后,必須用上表中所示的初始化方法初始化對(duì)象。關(guān)于初始化方法的詳細(xì)信息,請(qǐng)參閱 Event 對(duì)象參考。
    2010-08-08

最新評(píng)論

石景山区| 京山县| 宝兴县| 边坝县| 江北区| 罗定市| 汝南县| 韶山市| 同江市| 哈密市| 祁连县| 化德县| 仁布县| 漳浦县| 图木舒克市| 华坪县| 建平县| 镇江市| 庆阳市| 民县| 顺义区| 冷水江市| 卢氏县| 拜城县| 马鞍山市| 定边县| 宁波市| 隆昌县| 手游| 开原市| 巴林左旗| 新宁县| 饶河县| 涡阳县| 德兴市| 高州市| 北宁市| 芜湖市| 永吉县| 景洪市| 枞阳县|