主要用来锻炼逻辑思维能力

image.png

可以选模式

image.png

这里面主要解决的问题是:

1.判断滑动方向

//在滑动块级绑定滑动开始和滑动结束的方法

很原始的方法,startFn时保存开始的(x,y),endFn时保存结束的(x1,y2),根据这四个参数 判断方向,算法在方法directionFn里

2.根据滑动方向进行叠加

叠加方法在afterslider里

全部代码如下

html代码:

{{score}}分

{{step}}步

{{time}}s

{{v.number}}

{{item.name}}

规模

4*4

3*3

规模

{{item.name}}

Submit

js代码:

Page({

/**

* 页面的初始数据

*/

data: {

cellArr:[],

zhezhangc:true,

modal:3,

score:0,

toushstart:[],

toolindex:2,

step:30,

time:60,

tool: [{ 'name': '无限模式', 'status': 2, 'class': 'speed' },{ 'name': '计时模式', 'status': 0, 'class': 'time' }, { 'name': '计步模式', 'status': 1, 'class': 'speed' }]

},

formSubmit(e) {

console.log(e.detail.value.radiogroup);

this.setData({ modal: e.detail.value.radiogroup, zhezhangc:false});

this.initFn();

},

choosemodal: function (event){

this.setData({ toolindex: event.currentTarget.dataset.data.status});

},

openmenu:function(){

var this_ = this;

this.setData({ zhezhangc: !this_.data.zhezhangc });

},

// 初始化

initFn:function(){

var modal = this.data.modal;

var cellArr = [];

for (var i = 0; i < modal; i++) {

var iarr = [];

for (var j = 0; j < modal; j++) {

iarr.push({ coordinate: [i, j], number: 0 });

}

cellArr.push(iarr);

}

// 二维数组转一维数组

var initget = 1;//第一次先放一个

var this_ = this;

var random_row = Math.round(Math.random() * (modal - 1));

var random_cell = Math.round(Math.random() * (modal - 1));

var getnumber = [2,4,8];

if (cellArr[random_row][random_cell].number==0){

// 如果在空白处就放一个方块

cellArr[random_row][random_cell].number = getnumber[Math.round(Math.random() * 2)];

}

this.setData({ cellArr: cellArr });

},

scoreFn:function(num_){

var score_ = this.data.score;

this.setData({

score:score_+num_*2

})

},

refreshcoordinate:function(){

var cellArr = this.data.cellArr;

var modal = this.data.modal;

var random_row;

var random_cell;

var this_ = this;

for(var i = 0;i<1000;i++){

random_row = Math.round(Math.random() * (modal - 1));

random_cell = Math.round(Math.random() * (modal - 1));

if (cellArr[random_row][random_cell].number == 0) {

cellArr[random_row][random_cell].number = 2;

break;

}

}

var isgame = this.gameover();

var tooltype = this.data.toolindex;

var step_ = this.data.step;

if (isgame && step_ > 0){

this_.setData({

cellArr: cellArr,

cellArrBefore: cellArr

});

if (tooltype == 1){

this_.setData({

step: this.data.step - 1

});

}

}else{

wx.showModal({

title: '提示',

content: '游戏结束',

});

this_.setData({

cellArr: [],

step:30,

score: 0

});

this_.initFn();

}

},

gameover:function(){

var cellArr = this.data.cellArr;

var modal = this.data.modal;

var gamecontine_ = false;

for(var i = 0;i

for (var j = 0; j < modal; j++) {

if (cellArr[i][j].number==0){

gamecontine_ = true;

}

}

}

return gamecontine_;

},

redo:function(){

var this_ = this;

this.setData({

cellArr:this_.data.cellArrBefore

});

},

// 滑动开始

startFn: function (event){

var X_ = event.touches[0].clientX;

var Y_ = event.touches[0].clientY;

this.setData({ toushstart: [X_,Y_]});

},

// 滑动结束

endFn: function (event) {

var eX = event.changedTouches[0].clientX;

var eY = event.changedTouches[0].clientY;

var dir = this.directionFn(eX, eY);

this.afterslider(dir);

},

// 判断方向

directionFn:function(endX,endY){

var sX = this.data.toushstart[0];

var sY = this.data.toushstart[1];

var eX = endX;

var eY = endY;

// console.log('start' + this.data.toushstart+','+sY+'end:'+eX+','+eY);

// 求角度

var a = eX-sX+1;

var b = sY-eY+1;

var angle = Math.abs(b / a);

var direction_;

// console.log('a:' + a + ',b:' + b + ',angle:' + angle);

if (a > 0 && angle<1){

direction_ = 1;

// console.log('右边');

}

if (a < 0 && angle < 1) {

direction_ = 3;

// console.log('左边');

}

if (b > 0 && angle > 1) {

// console.log('上边');

direction_ = 0;

}

if (b < 0 && angle > 1) {

// console.log('下边');

direction_ = 2;

}

return direction_;//上右下左对应0,1,2,3

},

// 根据方向做后续操作

afterslider:function(dir){

var this_ = this;

var modal = this.data.modal;

var cellArr = this.data.cellArr;

var test_ = this.data.test;

switch(dir){

case 0:

// 从上往下循环

for(var i = 1;i

for (var j = 0; j < modal; j++) {

var thisCell = cellArr[i][j];

for(var k=i;k>0;k--){

if (cellArr[k - 1][j].number == 0) {

cellArr[k - 1][j].number = cellArr[k][j].number;

cellArr[k][j].number = 0

}else{

if (cellArr[k - 1][j].number == cellArr[k][j].number) {

var num_ = cellArr[k][j].number;

cellArr[k][j].number = 0;

cellArr[k - 1][j].number = num_ * 2;

this_.scoreFn(num_);

}

}

}

}

}

break;

case 2:

// 从下往上循环

// modal - 2是因为,最底下的方块不用管了

for (var i = modal - 2; i >= 0; i--) {

for (var j = 0; j < modal; j++) {

var thisCell = cellArr[i][j];

for(var k = i;k

if (cellArr[k + 1][j].number == 0) {

cellArr[k + 1][j].number = cellArr[k][j].number;

cellArr[k][j].number = 0

} else {

if (cellArr[k + 1][j].number == cellArr[k][j].number) {

var num_ = cellArr[k][j].number;

cellArr[k][j].number = 0;

cellArr[k + 1][j].number = num_ * 2;

this_.scoreFn(num_);

}

}

}

}

}

break;

case 1:

for (var j = modal - 2; j >= 0;j--){

for(var i=0;i

var thisCell = cellArr[i][j];

for (var k = j; k < modal - 1; k++) {

if (cellArr[i][k + 1].number == 0) {

cellArr[i][k + 1].number = cellArr[i][k].number;

cellArr[i][k].number = 0

} else {

if (cellArr[i][k + 1].number == cellArr[i][k].number) {

var num_ = cellArr[i][k].number;

cellArr[i][k].number = 0;

cellArr[i][k + 1].number = num_ * 2;

this_.scoreFn(num_);

}

}

}

}

}

break;

case 3:

// 从左往右

for(var j = 1;j

for (var i = 0; i < modal; i++) {

var thisCell = cellArr[i][j];

for (var k = j; k >0; k--) {

if (cellArr[i][k - 1].number == 0) {

cellArr[i][k - 1].number = cellArr[i][k].number;

cellArr[i][k].number = 0

} else {

if (cellArr[i][k - 1].number == cellArr[i][k].number) {

var num_ = cellArr[i][k].number;

cellArr[i][k].number = 0;

cellArr[i][k - 1].number = num_ * 2;

this_.scoreFn(num_);

}

}

}

}

}

break;

}

this.refreshcoordinate();

},

watchAgain: function (cellArr, k, j, num_){

if(cellArr[k - 1][j].number == cellArr[k][j].number) {

cellArr[k][j].number = 0;

cellArr[k - 1][j].number = num_ * 2;

var k_ = k - 1;

this.watchAgain(cellArr, k_, j);

}

}

,

/**

* 生命周期函数--监听页面加载

*/

onLoad: function (options) {

this.initFn();

},

/**

* 生命周期函数--监听页面初次渲染完成

*/

onReady: function () {

},

/**

* 生命周期函数--监听页面显示

*/

onShow: function () {

},

/**

* 生命周期函数--监听页面隐藏

*/

onHide: function () {

},

/**

* 生命周期函数--监听页面卸载

*/

onUnload: function () {

},

/**

* 页面相关事件处理函数--监听用户下拉动作

*/

onPullDownRefresh: function () {

},

/**

* 页面上拉触底事件的处理函数

*/

onReachBottom: function () {

},

/**

* 用户点击右上角分享

*/

onShareAppMessage: function () {

}

})

java小程序 2048_微信小程序之游戏2048相关推荐

  1. java计算机毕业设计基于微信小程序的校园外卖订餐系统APP

    项目介绍 网络技术的快速发展给各行各业带来了很大的突破,也给各行各业提供了一种新的管理模块和校园订餐模块,对于校园订餐小程序将是又一个传统管理到智能化信息管理的改革,对于传统的校园订餐管理,所包括的信 ...

  2. java监听微信_一种基于java后台应用监控微信小程序的用户访问量的方法与流程...

    本发明涉及java应用与微信小程序应用开发技术领域,具体涉及一种基于java后台应用监控微信小程序的用户访问量的方法. 背景技术: 微信小程序,简称小程序,是一种不需要下载安装即可使用的应用,它实现了 ...

  3. (微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好

    转载地址:(微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 作者:Happy王子乐 个人网站(整理 ...

  4. java计算机毕业设计基于微信小程序的药店药品销售管理系统APP

    项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息.为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代, ...

  5. 基于java+SpringBoot+HTML+Mysq+微信小程序+小说阅读网站

     详细功能设计:请点击下面链接查看 基于java+SpringBoot+HTML+Mysq+微信小程序+小说阅读网站_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 基于Spr ...

  6. 基于java的ssm和微信小程序实现物业缴费系统的设计与实现【附项目源码+论文说明】

    基于java的ssm和微信小程序实现物业缴费系统的设计与实现 摘要 本论文主要论述了如何使用JAVA语言开发一个基于微信小程序的物业缴费系统的设计与实现,本系统将严格按照软件开发流程进行各个阶段的工作 ...

  7. map和foreach的区别和应用场景_支付宝小程序和微信小程序,两者有何区别?

    原标题:支付宝小程序和微信小程序,两者有何区别? 自2017年1月微信推出小程序之后,小程序的发展势头便愈来愈猛.作为腾讯老对头的阿里,也开始投入小程序的研发.在一年多的开放公测后,支付宝小程序终于于 ...

  8. 怎么添加一个程序集_门店小程序,微信小程序怎么添加店铺

    现今随着互联网发展,越来越多选择网上购物代替实体店购物,微信作为最多人使用的社交软件,他的商机也被许多企业商家发展,进入微信分销小程序购物是现在最流行的购物方式,驱使很多实体店也纷纷加盟进驻门店分销小 ...

  9. 微信与php什么区别,微信小店和微信小程序的区别是什么?

    区别:微信小店的功能比较少,只拥有基本的商城购物功能,没有营销功能,因而只适合不需要营销推广的个人开店:而小程序则是支持各种功能开发,可以开发商城小程序,也可以开发各种营销推广功能,能够满足商家的多功 ...

最新文章

  1. 王贻芳院士:我们的科技管理过度强调竞争,缺乏稳定支持
  2. docker中部署redis主从模式
  3. Dev-GridView-对于gridview的列值的合计
  4. axure 素材_Axure原型:超漂亮的系统首页
  5. 厉害了,3万字的MySQL精华总结 + 面试100问!
  6. 计算机组成原理整机实验报告,计算机组成原理加器实验报告.doc
  7. 在线求CR,你觉得我这段Java代码还有优化的空间吗?
  8. flash player for linux 64,64-bit linux下装什么adobe flash player
  9. TikZ绘图示例——尺规作图:线段的任意等分
  10. 首套房贷款首付多少?
  11. ajax动态的给表格添加数据,jQuery+ajax实现动态添加表格tr td功能示例
  12. 酉矩阵(unitary matrix)
  13. python制作指定区域截图工具_用python实现选择截图区域
  14. linux filp open,内核模块中filp-open对文件的读写【转】
  15. maven 入门(转)
  16. java 填充字符串_Java字符串右补齐——String.format
  17. Tensorflow框架初识
  18. 为网站鼠标点击添加富强民主等内容Js代码
  19. QT绘制区域(ROI)框(矩形框和椭圆框)
  20. 离散数学—命题逻辑知识点整理

热门文章

  1. Java中的类型安全的空集合
  2. 使用Regions ADF 11g进行Master Detail CRUD操作
  3. Linux 命令行中的文件名/文件路径中使用通配符的说明
  4. 递归算法 流程图_什么是算法?如何学习算法?算法入门的学习路径
  5. 多个cpp文件生成so_C++:C++的文件搜索路径
  6. python字符串排序_Python-如何对字符串列表进行排序?
  7. LeetCode 02.两数相加
  8. C语言 | 读写文件
  9. Python3最长连续递增序列问题
  10. t分布 u分布 卡方分布_中心极限定理|z分布|t分布|卡方分布