国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語言 - JavaScript - 微信小程序?qū)崿F(xiàn)拼圖小游戲

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

2021-11-04 14:54yunfeather JavaScript

這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

微信小游戲入門案例——拼圖游戲,供大家參考,具體內(nèi)容如下

涉及內(nèi)容:canvas組件、小程序界面繪圖API

目錄結(jié)構(gòu):

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

pages\game\game.js

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
// pages/game/game.js
// 方塊的初始位置
var num = [
 ['00', '01', '02'],
 ['10', '11', '12'],
 ['20', '21', '22']
]
 
// 方塊的寬度
var w = 100
 
// 圖片的初始地址
var url = '/images/pic01.jpg'
 
Page({
 
 /**
 * 頁面的初始數(shù)據(jù)
 */
 data: {
 isWin: false
 
 },
 
 /**
 * 自定義函數(shù)--隨機打亂方塊順序
 */
 shuffle: function() {
 // 先令所有方塊回歸初始位置
 num = [
 ['00', '01', '02'],
 ['10', '11', '12'],
 ['20', '21', '22']
 ]
 
 // 記錄當(dāng)前空白方塊的行和列
 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
 }
 }
 
 }
 
 },
 
 /**
 * 自定義函數(shù)--繪制畫布內(nèi)容
 */
 drawCanvas: function() {
 let ctx = this.ctx
 
 // 清空畫布
 ctx.clearRect(0, 0, 300, 300)
 
 // 使用雙重for循環(huán)語句繪制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)聽點擊方塊事件
 */
 touchBox: function(e) {
 // 如果游戲已經(jīng)成功,不做任何操作
 if (this.data.isWin) {
 // 終止本函數(shù)
 return
 }
 
 // 獲取被點擊方塊的坐標(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)
 
 // 如果點擊的不是空白位置
 if (num[row][col] != '22') {
 // 嘗試移動方塊
 this.moveBox(row, col)
 
 // 重新繪制畫布內(nèi)容
 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()
 }
 }
 },
 
 /**
 * 自定義函數(shù)--移動被點擊的方塊
 */
 moveBox: function(i, j) {
 // 情況1:如果被點擊的方塊不在最上方,檢查可否上移
 if (i > 0) {
 // 如果方塊的上方是空白
 if (num[i - 1][j] == '22') {
 // 交換當(dāng)前被點擊的方塊和空白的位置
 num[i - 1][j] = num[i][j]
 num[i][j] = '22'
 return
 }
 }
 
 // 情況2:如果被點擊的方塊不在最下方,檢查可否下移
 if (i < 2) {
 // 如果方塊的下方是空白
 if (num[i + 1][j] == '22') {
 // 交換當(dāng)前被點擊的方塊和空白的位置
 num[i + 1][j] = num[i][j]
 num[i][j] = '22'
 return
 }
 }
 
 // 情況3:如果被點擊的方塊不在最左側(cè),檢查可否左移
 if (j > 0) {
 // 如果方塊的左側(cè)是空白
 if (num[i][j - 1] == '22') {
 // 交換當(dāng)前被點擊的方塊和空白的位置
 num[i][j - 1] = num[i][j]
 num[i][j] = '22'
 return
 }
 }
 
 // 情況4:如果被點擊的方塊不在最右側(cè),檢查可否右移
 if (j < 2) {
 // 如果方塊的右側(cè)是空白
 if (num[i][j + 1] == '22') {
 // 交換當(dāng)前被點擊的方塊和空白的位置
 num[i][j + 1] = num[i][j]
 num[i][j] = '22'
 return
 }
 }
 },
 
 /**
 * 自定義函數(shù)--判斷游戲是否成功
 */
 isWin: function() {
 // 使用雙重for循環(huán)檢查整個數(shù)組
 for (var i = 0; i < 3; i++) {
 for (var j = 0; j < 3; j++) {
 // 如果有方塊位置不對
 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)聽頁面加載
 */
 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)聽頁面初次渲染完成
 */
 onReady: function() {
 
 },
 
 /**
 * 生命周期函數(shù)--監(jiān)聽頁面顯示
 */
 onShow: function() {
 
 },
 
 /**
 * 生命周期函數(shù)--監(jiān)聽頁面隱藏
 */
 onHide: function() {
 
 },
 
 /**
 * 生命周期函數(shù)--監(jiān)聽頁面卸載
 */
 onUnload: function() {
 
 },
 
 /**
 * 頁面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動作
 */
 onPullDownRefresh: function() {
 
 },
 
 /**
 * 頁面上拉觸底事件的處理函數(shù)
 */
 onReachBottom: function() {
 
 },
 
 /**
 * 用戶點擊右上角分享
 */
 onShareAppMessage: function() {
 
 }
})

pages\game\game.wxml

?
1
2
3
4
5
6
7
8
<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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
/* pages/game/game.wxss */
/* 提示圖 */
image{
 width: 250rpx;
 height: 250rpx;
}
 
/* 游戲畫布區(qū)域 */
canvas{
 border: 1rpx solid;
 width: 300px;
 height: 300px;
}

pages\index\index.js

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Page({
 
 /**
 * 頁面的初始數(shù)據(jù)
 */
 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?level='+level,
 })
 },
 
 /**
 * 生命周期函數(shù)--監(jiān)聽頁面加載
 */
 onLoad: function (options) {
 
 },
 
 /**
 * 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
 */
 onReady: function () {
 
 },
 
 /**
 * 生命周期函數(shù)--監(jiān)聽頁面顯示
 */
 onShow: function () {
 
 },
 
 /**
 * 生命周期函數(shù)--監(jiān)聽頁面隱藏
 */
 onHide: function () {
 
 },
 
 /**
 * 生命周期函數(shù)--監(jiān)聽頁面卸載
 */
 onUnload: function () {
 
 },
 
 /**
 * 頁面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動作
 */
 onPullDownRefresh: function () {
 
 },
 
 /**
 * 頁面上拉觸底事件的處理函數(shù)
 */
 onReachBottom: function () {
 
 },
 
 /**
 * 用戶點擊右上角分享
 */
 onShareAppMessage: function () {
 
 }
})

pages\index\index.wxml

?
1
2
3
4
5
6
7
8
9
10
11
12
<view class="container">
 <view class="title">
 游戲選關(guān)
 </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}}關(guān)</text>
 </view>
 </view>
</view>

pages\index\index.wxss

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**index.wxss**/
/* 關(guān)卡區(qū)域列表 */
.levelBox{
 width: 100%;
}
 
/* 單個關(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;
}

app.json

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
 "pages":[
 "pages/index/index",
 "pages/game/game"
 ],
 "window":{
 "backgroundTextStyle":"light",
 "navigationBarBackgroundColor": "#E64340",
 "navigationBarTitleText": "拼圖游戲",
 "navigationBarTextStyle":"black"
 },
 "style": "v2",
 "sitemapLocation": "sitemap.json"
}

app.wxss

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**app.wxss**/
/* 頁面容器樣式 */
.container{
 height: 100vh;
 color: #e64340;
 font-weight: bold;
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: space-evenly;
}
 
/* 頂端標(biāo)題樣式 */
.title{
 font-size: 18pt;
}

app.js

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
App({
 
 /**
 * 當(dāng)小程序初始化完成時,會觸發(fā) onLaunch(全局只觸發(fā)一次)
 */
 onLaunch: function () {
 
 },
 
 /**
 * 當(dāng)小程序啟動,或從后臺進入前臺顯示,會觸發(fā) onShow
 */
 onShow: function (options) {
 
 },
 
 /**
 * 當(dāng)小程序從前臺進入后臺,會觸發(fā) onHide
 */
 onHide: function () {
 
 },
 
 /**
 * 當(dāng)小程序發(fā)生腳本錯誤,或者 api 調(diào)用失敗時,會觸發(fā) onError 并帶上錯誤信息
 */
 onError: function (msg) {
 
 }
})

運行截圖:

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/yunfeather/article/details/109177745

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩精品久久久 | 亚洲欧美日韩精品久久亚洲区 | 亚洲在线电影 | 91精品国产一区二区三区四区在线 | 亚洲国产视频一区 | 亚洲成av人影片在线观看 | 黄色片视频在线播放 | 在线观看亚洲 | 亚洲国产成人一区二区精品区 | 亚洲高清久久 | 伦理午夜电影免费观看 | 成人午夜性a一级毛片免费看 | 亚洲国产精品久久久久婷婷老年 | 成人午夜 | 欧美日韩国产一区二区在线观看 | 三级在线观看网站 | 韩日中文字幕 | 国产精品美女久久久久aⅴ国产馆 | 三级av在线 | 黄色免费观看网址 | 91在线看片| 国产综合精品 | 互换娇妻呻吟hd中文字幕 | 成人午夜免费视频 | 久久久久久久国产视频 | 免费观看的av| 久久久91| 自拍偷拍一区 | 国产精品久久久久久久久久妞妞 | 久久伊人久久 | 国产免费av网站 | 久久久久在线 | а√天堂资源中文最新版地址 | 在线播放高清视频www | 中文字幕在线一区二区三区 | 在线免费日韩 | 国产伦精品一区二区三区精品视频 | 日韩av免费在线观看 | 色接久久| 国产精品美女久久久久久久久久久 | 久久久久久久久99精品 |