无极低码 :https://wheart.cn
2048微信小程序效果

布局页面

页面结构
<view class="action_cavas" bindtouchstart="tapStart" bindtouchmove="tapMove" bindtouchend="tapEnd">
<view class="score">
<view class="title">2048</view>
<view class="scoredetail">
<view class="scoredesc">得分</view>
<view class="scorenumber">{{score}}</view>
</view>
<view class="scoredetail">
<view class="scoredesc">历史最高</view>
<view class="scorenumber">{{maxscore}}</view>
</view>
</view>
<view class="bc_cavas">
<view class="bc" wx:for="{{numbers}}" wx:for-item="row" >
<view wx:for="{{row}}" class="bc_ bc_{{item}}"> {{item}} </view>
</view>
</view>
</view>
<modal class="modal" hidden="{{modalHidden}}" bindconfirm="modalChange" bindcancel="modalCancle">
<view> 游戏结束,重新开始吗? </view>
</modal>
JS
//index.js
//获取应用实例
var app = getApp()
Page({
data: {
score: 0,
maxscore: 0,
startx: 0,
starty: 0,
endx:0,
endy:0,
direction:'',
numbers:[[0,0,2,2],[0,2,4,0],[0,4,0,0],[0,0,0,0]],
modalHidden: true,
},
onLoad: function () {
//调用API从本地缓存中获取数据
var maxscore = wx.getStorageSync('maxscore')
if(!maxscore) maxscore = 0
this.setData({
maxscore:maxscore
})
},
storeScore:function(){
console.log(this.data.maxscore, this.data.score)
if(this.data.maxscore < this.data.score){
this.setData({
maxscore:this.data.score
})
wx.setStorageSync('maxscore', this.data.maxscore)
}
},
tapStart: function(event){
this.setData({
startx: event.touches[0].pageX,
starty: event.touches[0].pageY
})
},
tapMove: function(event){
this.setData({
endx: event.touches[0].pageX,
endy: event.touches[0].pageY
})
},
tapEnd: function(event){
var heng = (this.data.endx) ? (this.data.endx - this.data.startx) : 0;
var shu = (this.data.endy) ? (this.data.endy - this.data.starty) : 0;
console.log(heng, shu);
if(Math.abs(heng) > 5 || Math.abs(shu) > 5){
var direction = (Math.abs(heng) > Math.abs(shu)) ? this.computeDir(1, heng):this.computeDir(0, shu);
this.setData({
startx:0,
starty:0,
endx:0,
endy:0
})
this.mergeAll(direction) && this.randInsert();
}
},
computeDir: function(heng, num){
if(heng) return (num > 0) ? 'right' : 'left';
return (num > 0) ? 'bottom' : 'top';
},
mergeAll: function(dir){
this.checkGame();
switch(dir){
case 'left':
return this.mergeleft();
break;
case 'right':
return this.mergeright();
break;
case 'top':
return this.mergetop();
break;
case 'bottom':
return this.mergebottom();
break;
default:
}
},
//左划
mergeleft: function(){
var change = false;
var arr = this.data.numbers;
for(var i = 0; i < 4; i++){
//merge first
for(var j = 0; j < 3; j++){
if(arr[i][j] == 0) continue;
for(var k = 1; k < 4-j; k++){
if(arr[i][j] != 0 && arr[i][j+k] != 0){
if(arr[i][j] != arr[i][j+k]) break; //不相同则直接跳过
arr[i][j] = arr[i][j] *2;
arr[i][j+k] = 0;
change = true;
this.setData({
score: this.data.score + arr[i][j]/2
})
break;
}
}
}
//movemove
for(var j = 0; j < 3; j++){
if(arr[i][j] == 0){
for(var k = 1; k < 4-j; k++){
if(arr[i][j+k] != 0){
arr[i][j] = arr[i][j+k];
arr[i][j+k] = 0;
change = true;
break;
}
}
}
}
}
this.setData({
numbers:arr
})
this.storeScore()
return change
},
//右滑
mergeright: function(){
var change = false
var arr = this.data.numbers;
for(var i = 0; i < 4; i++){
//merge first
for(var j = 3; j > 0; j--){
if(arr[i][j] == 0) continue;
for(var k = 1; k <= j; k++){
if(arr[i][j] != 0 && arr[i][j-k] != 0){
if(arr[i][j] != arr[i][j-k]) break;
arr[i][j] = arr[i][j] *2;
arr[i][j-k] = 0;
change = true;
this.setData({
score: this.data.score + arr[i][j]/2
})
break;
}
}
}
//movemove
for(var j = 3; j > 0; j--){
if(arr[i][j] == 0){
for(var k = 1; k <= j; k++){
if(arr[i][j-k] != 0){
arr[i][j] = arr[i][j-k];
arr[i][j-k] = 0;
change = true;
break;
}
}
}
}
}
this.setData({
numbers:arr
})
this.storeScore()
return change
},
//下划
mergebottom: function(){
var change = false
var arr = this.data.numbers;
for(var i = 0; i < 4; i++){
//merge first
for(var j = 3; j > 0; j--){
if(arr[j][i] == 0) continue;
for(var k = 1; k <= j; k++){
if(arr[j][i] != 0 && arr[j-k][i] != 0){
if(arr[j][i] != arr[j-k][i]) break;
arr[j][i] = arr[j][i] *2;
arr[j-k][i] = 0;
change = true
this.setData({
score: this.data.score + arr[j][i]/2
})
break;
}
}
}
//movemove
for(var j = 3; j > 0; j--){
if(arr[j][i] == 0){
for(var k = 1; k <= j; k++){
if(arr[j-k][i] != 0){
arr[j][i] = arr[j-k][i];
arr[j-k][i] = 0;
change = true
break;
}
}
}
}
}
this.setData({
numbers:arr
})
this.storeScore()
return change
},
//上滑
mergetop: function(){
var change = false
var arr = this.data.numbers;
for(var i = 0; i < 4; i++){
//merge first
for(var j = 0; j < 3; j++){
if(arr[j][i] == 0) continue;
for(var k = 1; k < 4-j; k++){
if(arr[j][i] != 0 && arr[j+k][i] != 0){
if(arr[j][i] != arr[j+k][i]) break;
arr[j][i] = arr[j][i] *2;
arr[j+k][i] = 0;
change = true
this.setData({
score: this.data.score + arr[j][i]/2
})
break;
}
}
}
//movemove
for(var j = 0; j < 3; j++){
if(arr[j][i] == 0){
for(var k = 1; k < 4-j; k++){
if(arr[j+k][i] != 0){
arr[j][i] = arr[j+k][i];
arr[j+k][i] = 0;
change = true
break;
}
}
}
}
}
this.setData({
numbers:arr
})
this.storeScore()
return change
},
//随机插入
randInsert: function(){
var arr = this.data.numbers
//随机2或4
var num = Math.random() < 0.8 ? 2 : 4
//计算随机位置
var zeros = [];
for(var i = 0; i < 4; i++){
for(var j = 0; j < 4; j++){
if(arr[i][j] == 0){
zeros.push([i, j]);
}
}
}
var position = zeros[Math.floor(Math.random() * zeros.length)];
arr[position[0]][position[1]] = num
this.setData({
numbers:arr
})
//this.checkGame()
},
checkGame: function(){
var arr = this.data.numbers
for(var i = 0; i < 4; i++){
for(var j = 0; j < 4; j++){
if(arr[i][j] == 0) return;
}
}
for(var i = 0; i < 3; i++){
for(var j = 0; j < 3; j++){
if(arr[i][j] == arr[i+1][j] || arr[i][j] == arr[i][j+1]) return;
}
}
for(var j = 0; j < 3; j++){
if(arr[3][j] == arr[3][j+1]) return;
if(arr[j][3] == arr[j+1][3]) return;
}
this.setData({
modalHidden: false,
})
},
modalChange:function(){
this.setData({
score: 0,
numbers:[[0,0,2,2],[0,2,4,0],[0,4,0,0],[0,0,0,0]],
modalHidden: true,
})
},
modalCancle:function(){
this.setData({
modalHidden: true,
})
},
})
编辑
每日分享一个小程序源码
源码地址:https://wheart.cn/so/home?m=dw&rid=7cdc5eff-d47b-11ed-96fa-52540016e6ac
无极低码 :https://wheart.cn
-
2024-07-14 18:09:19.0
shp,行政边界,区划
-
2024-07-14 17:35:13.0
低代码,无极低码,低代码编程,低代码开发平台
-
2024-07-14 17:12:17.0
编程,程序,软件,工具,CAD
-
2024-07-14 17:02:26.0
shp,路网,高铁,高速
-
2024-07-14 16:52:43.0
地图软件,大数据,GIS,工具,地图下载
-
2024-05-24 14:05:12.0
编程,设计,原型,Axure,可视化
-
2023-07-13 22:08:25.0
人事系统,人事人才,事业单位,工资系统,职称系统
-
2023-07-13 22:01:38.0
建设方案,规划设计,汇报方案
-
2023-07-13 21:49:37.0
小程序,建设方案,汇报方案,设计方案
-
2023-07-04 17:34:40.0
建设方案,汇报PPT,汇报方案,自然灾害
-
2023-07-01 15:00:03.0
网络安全,web安全,资料下载,建设方案,安全方案
-
2023-07-01 11:23:41.0
密码建设,密码测评,方案
-
2023-07-01 11:07:14.0
技术方案,安全方案,密码评测
-
2023-06-15 12:49:36.0
行政区划,乡镇经纬度,乡镇区划
-
2023-05-31 21:41:01.0
技术体系,技术标准,数据标准,数据资产,数据安全
-
2023-05-31 21:38:31.0
数据中心,大数据,白皮书,技术规范,标准
-
2023-05-31 21:34:00.0
数据治理,元数据,数据抽取,数据质量,数据血缘,数据统计
-
2023-05-31 07:26:15.0
excel,easyexcel,jar,导入,导出,poi
-
2023-05-28 20:49:51.0
大数据,ETL,数据抽取,数据采集,数据仓库
-
2023-05-28 20:33:31.0
标准体系,技术标准,政策标准,开发模板
-
2023-05-18 13:14:04.0
标准,技术方案,指标体系,研究报告,国标文件,规范,行业报告,白皮书,数据,资源
-
2023-05-18 12:51:09.0
数字化,pdf,解决方案,企业转型,白皮书,研究报告
-
2023-05-17 18:21:47.0
BI,数字化,pdf,解决方案,企业转型,白皮书
-
2023-05-17 18:06:08.0
BI,数字化,pdf,解决方案,企业转型,白皮书,免费
-
2023-05-17 18:49:25.0
BI,数字化,pdf,解决方案,企业转型,白皮书
-
2023-05-03 12:21:39.0
天气,气象,灾害,防御指南,标准,图标,预警
-
2023-04-26 17:29:42.0
绿屏软件,Bandicam,注册码,破解码,注册机
-
2023-04-12 21:41:31.0
历史天气,空气质量
-
2023-04-12 21:18:04.0
气象数据,历史数据
-
2023-04-09 22:05:04.0
历史天气,气象数据,天气实况
-
2023-04-08 23:36:55.0
微信小程序,源码
-
2023-04-07 22:47:37.0
微信小程序,源码
-
2023-04-07 21:56:18.0
微信,小程序,源码
-
2023-04-06 22:37:06.0
小程序,微信小程序,源码
-
2023-04-06 21:06:52.0
微信小程序,微信小游戏,小游戏源码,2048,前端
-
2023-04-05 20:58:20.0
数据,雷电,空间数据
-
2023-04-05 11:52:56.0
气象数据,天气历史数据,格式说明
-
2023-04-01 23:13:10.0
AI,chatgpt,写作助手,智能AI,文心一言
-
2023-04-01 22:13:32.0
数据库,myql,关系数据库,数据库增删改查
-
2023-03-26 21:17:49.0
天气,历史天气,天气实况,历史数据,全国天气预报