溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用微信小程序制作拼圖小游戲

發布時間:2020-10-26 15:16:33 來源:億速云 閱讀:396 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關使用微信小程序制作拼圖小游戲,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

目錄結構:

使用微信小程序制作拼圖小游戲

pages\game\game.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({
 
 /**
 * 頁面的初始數據
 */
 data: {
 isWin: false
 
 },
 
 /**
 * 自定義函數--隨機打亂方塊順序
 */
 shuffle: function() {
 // 先令所有方塊回歸初始位置
 num = [
  ['00', '01', '02'],
  ['10', '11', '12'],
  ['20', '21', '22']
 ]
 
 // 記錄當前空白方塊的行和列
 var row = 2
 var col = 2
 
 // 隨機打亂方塊順序100次
 for (var i = 0; i < 100; i++) {
  // 隨機生成一個方向:上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
  }
  }
 
 }
 
 },
 
 /**
 * 自定義函數--繪制畫布內容
 */
 drawCanvas: function() {
 let ctx = this.ctx
 
 // 清空畫布
 ctx.clearRect(0, 0, 300, 300)
 
 // 使用雙重for循環語句繪制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()
 },
 
 /**
 * 自定義函數--監聽點擊方塊事件
 */
 touchBox: function(e) {
 // 如果游戲已經成功,不做任何操作
 if (this.data.isWin) {
  // 終止本函數
  return
 }
 
 // 獲取被點擊方塊的坐標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)
 
 // 如果點擊的不是空白位置
 if (num[row][col] != '22') {
  // 嘗試移動方塊
  this.moveBox(row, col)
 
  // 重新繪制畫布內容
  this.drawCanvas()
 
  // 判斷游戲是否成功
  if (this.isWin()) {
  // 在畫面上繪制提示語句
  let ctx = this.ctx
 
  // 繪制完整圖片
  ctx.drawImage(url, 0, 0)
 
  // 繪制文字
  ctx.setFillStyle('#e64340')
  ctx.setTextAlign('center')
  ctx.setFontSize(60)
  ctx.fillText('游戲成功', 150, 150)
  ctx.draw()
  }
 }
 },
 
 /**
 * 自定義函數--移動被點擊的方塊
 */
 moveBox: function(i, j) {
 // 情況1:如果被點擊的方塊不在最上方,檢查可否上移
 if (i > 0) {
  // 如果方塊的上方是空白
  if (num[i - 1][j] == '22') {
  // 交換當前被點擊的方塊和空白的位置
  num[i - 1][j] = num[i][j]
  num[i][j] = '22'
  return
  }
 }
 
 // 情況2:如果被點擊的方塊不在最下方,檢查可否下移
 if (i < 2) {
  // 如果方塊的下方是空白
  if (num[i + 1][j] == '22') {
  // 交換當前被點擊的方塊和空白的位置
  num[i + 1][j] = num[i][j]
  num[i][j] = '22'
  return
  }
 }
 
 // 情況3:如果被點擊的方塊不在最左側,檢查可否左移
 if (j > 0) {
  // 如果方塊的左側是空白
  if (num[i][j - 1] == '22') {
  // 交換當前被點擊的方塊和空白的位置
  num[i][j - 1] = num[i][j]
  num[i][j] = '22'
  return
  }
 }
 
 // 情況4:如果被點擊的方塊不在最右側,檢查可否右移
 if (j < 2) {
  // 如果方塊的右側是空白
  if (num[i][j + 1] == '22') {
  // 交換當前被點擊的方塊和空白的位置
  num[i][j + 1] = num[i][j]
  num[i][j] = '22'
  return
  }
 }
 },
 
 /**
 * 自定義函數--判斷游戲是否成功
 */
 isWin: function() {
 // 使用雙重for循環檢查整個數組
 for (var i = 0; i < 3; i++) {
  for (var j = 0; j < 3; j++) {
  // 如果有方塊位置不對
  if (num[i][j] != i * 10 + j) {
   // 返回假,游戲尚未成功
   return false
  }
  }
 }
 
 // 游戲成功,更新狀態
 this.setData({
  isWin: true
 })
 // 返回真,游戲成功
 return true
 },
 
 /**
 * 自定義函數--重新開始游戲
 */
 restartGame: function() {
 // 更新游戲狀態
 this.setData({
  isWin: false
 })
 
 // 打亂方塊順序
 this.shuffle()
 
 // 繪制畫布內容
 this.drawCanvas()
 },
 
 /**
 * 生命周期函數--監聽頁面加載
 */
 onLoad: function(options) {
 // console.log(options.level)
 
 // 更新圖片路徑地址
 url = '/images/' + options.level
 // 更新提示圖的地址
 this.setData({
  url: url
 })
 
 // 創建畫布上下文
 this.ctx = wx.createCanvasContext("myCanvas")
 
 // 打亂方塊順序
 this.shuffle()
 
 // 繪制畫布內容
 this.drawCanvas()
 },
 
 /**
 * 生命周期函數--監聽頁面初次渲染完成
 */
 onReady: function() {
 
 },
 
 /**
 * 生命周期函數--監聽頁面顯示
 */
 onShow: function() {
 
 },
 
 /**
 * 生命周期函數--監聽頁面隱藏
 */
 onHide: function() {
 
 },
 
 /**
 * 生命周期函數--監聽頁面卸載
 */
 onUnload: function() {
 
 },
 
 /**
 * 頁面相關事件處理函數--監聽用戶下拉動作
 */
 onPullDownRefresh: function() {
 
 },
 
 /**
 * 頁面上拉觸底事件的處理函數
 */
 onReachBottom: function() {
 
 },
 
 /**
 * 用戶點擊右上角分享
 */
 onShareAppMessage: function() {
 
 }
})

pages\game\game.wxml

<view class="container">
 <view class="title">
 提示圖
 </view>
 <image src="{{url}}"></image>
 <canvas canvas-id="myCanvas" bindtouchstart="touchBox"></canvas>
 <button type="warn" bindtap="restartGame">重新開始</button>
</view>

pages\game\game.wxss

/* pages/game/game.wxss */
/* 提示圖 */
image{
 width: 250rpx;
 height: 250rpx;
}
 
/* 游戲畫布區域 */
canvas{
 border: 1rpx solid;
 width: 300px;
 height: 300px;
}

pages\index\index.js

Page({
 
 /**
 * 頁面的初始數據
 */
 data: {
 levels:[
  'pic01.jpg',
  'pic02.jpg',
  'pic03.jpg',
  'pic04.jpg',
  'pic05.jpg',
  'pic06.jpg',
 
 ]
 },
 chooseLevel:function(e){
 let level = e.currentTarget.dataset.level
 wx.navigateTo({
  url: '../game/game&#63;level='+level,
 })
 },
 
 /**
 * 生命周期函數--監聽頁面加載
 */
 onLoad: function (options) {
 
 },
 
 /**
 * 生命周期函數--監聽頁面初次渲染完成
 */
 onReady: function () {
 
 },
 
 /**
 * 生命周期函數--監聽頁面顯示
 */
 onShow: function () {
 
 },
 
 /**
 * 生命周期函數--監聽頁面隱藏
 */
 onHide: function () {
 
 },
 
 /**
 * 生命周期函數--監聽頁面卸載
 */
 onUnload: function () {
 
 },
 
 /**
 * 頁面相關事件處理函數--監聽用戶下拉動作
 */
 onPullDownRefresh: function () {
 
 },
 
 /**
 * 頁面上拉觸底事件的處理函數
 */
 onReachBottom: function () {
 
 },
 
 /**
 * 用戶點擊右上角分享
 */
 onShareAppMessage: function () {
 
 }
})

pages\index\index.wxml

<view class="container">
 <view class="title">
 游戲選關
 </view>
 
 <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}}關</text>
 </view>
 </view>
</view>

pages\index\index.wxss

/**index.wxss**/
/* 關卡區域列表 */
.levelBox{
 width: 100%;
}
 
/* 單個關卡區域 */
.box{
 width: 50%;
 float: left;
 margin: 25rpx 0;
 display: flex;
 flex-direction: column;
 align-items: center;
}
 
/* 選關圖片 */
image{
 width: 260rpx;
 height: 260rpx;
}

app.json

{
 "pages":[
 "pages/index/index",
 "pages/game/game"
 ],
 "window":{
 "backgroundTextStyle":"light",
 "navigationBarBackgroundColor": "#E64340",
 "navigationBarTitleText": "拼圖游戲",
 "navigationBarTextStyle":"black"
 },
 "style": "v2",
 "sitemapLocation": "sitemap.json"
}

app.wxss

/**app.wxss**/
/* 頁面容器樣式 */
.container{
 height: 100vh;
 color: #e64340;
 font-weight: bold;
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: space-evenly;
}
 
/* 頂端標題樣式 */
.title{
 font-size: 18pt;
}

app.js

App({
 
 /**
 * 當小程序初始化完成時,會觸發 onLaunch(全局只觸發一次)
 */
 onLaunch: function () {
 
 },
 
 /**
 * 當小程序啟動,或從后臺進入前臺顯示,會觸發 onShow
 */
 onShow: function (options) {
 
 },
 
 /**
 * 當小程序從前臺進入后臺,會觸發 onHide
 */
 onHide: function () {
 
 },
 
 /**
 * 當小程序發生腳本錯誤,或者 api 調用失敗時,會觸發 onError 并帶上錯誤信息
 */
 onError: function (msg) {
 
 }
})

運行截圖:

使用微信小程序制作拼圖小游戲

看完上述內容,你們對使用微信小程序制作拼圖小游戲有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女