java小程序 2048_微信小程序之游戏2048

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

ec7ab94ede71

image.png

可以选模式

ec7ab94ede71

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 () {

}

})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现场故事:从Log4J迁移到Log4J2

通过从应用程序中学习企业APM产品&#xff0c;发现更快&#xff0c;更高效的性能监控。 参加AppDynamics APM导览&#xff01; 与许多Java应用程序一样&#xff0c;AppDynamics Java代理广泛使用日志记录。 多年来&#xff0c;我们一直使用Log4J作为日志记录框架。 虽然Log4J的…

Java面向对象(8)--继承性

多个类中存在相同属性和行为时&#xff0c;可以将这些内容抽取到单独一个类中&#xff0c;那么多个类无需再定义这些相同的属性和行为&#xff0c;只要继承那个类即可。 这里的多个类称为子类(派生类)&#xff0c;单独的这个类称为父类(基类或超类)。 语法格式&#xff1a;cla…

aimesh node重启_华硕 RT-AC86U 和 网件 R7000 组 AiMesh 成功

家里之前买了一个 R7000 主路由器&#xff0c;后来我嫌我房间里的信号有点烂( 5G 信号只能 2 格&#xff0c;网速比 2.4G 还慢)&#xff0c;所以就入手了一个华硕 RT-AC86U 作为主路由器&#xff0c;R7000 则作为 AP。在买的时候就想组 AiMesh&#xff0c;但是因为种种事情耽搁…

Java面向对象(9)--方法的重写(override/overwrite)

在子类中可以根据需要对从父类中继承来的方法进行改造&#xff0c;也称为方法的重置、覆盖。在程序执行时&#xff0c;子类的方法将覆盖父类中同名同参数列表的方法。 权限修饰符 返回值类型 方法名&#xff08;形参列表&#xff09; throws 异常类型{方法体; }①子类重写的方法…

maven ant_如何在Maven中运行Ant目标?

maven antmaven-antrun-plugin允许我们在各种maven构建阶段中运行ant目标。 我将专门为具有开发环境的开发人员解释maven-antrun-plugin的非常实际的用法。 通常&#xff0c;使用maven build&#xff0c;您会将项目捆绑到war文件或ear文件中。 您可以使用maven-antrun-plugin…

java中打开文件显示_在默认文件资源管理器中打开文件,并使用JavaFX或普通Java突出显示它...

我想做标题所说的.部分解决方案例如,在Windows中,您可以使用以下代码在默认资源管理器中打开文件并突出显示它.(虽然它需要修改包含空格的文件)&#xff1a;/*** Opens the file with the System default file explorer.** param path the path*/public static void openFileLo…

win10下vscode配置c语言环境

1、C编译器下载 C编译器&#xff08;MinGW-W64 GCC&#xff09;的下载&#xff1a;点击官方下载 或者点击网盘下载提取码为karj 下载完成后解压&#xff0c;将解压后的文件夹放到合适的位置&#xff0c;点开其bin子文件夹&#xff0c;复制路径。 2、win10下环境变量配置 ①…

java jdbc 乱码_【求助】为什么用纯java jdbc插入mysql一直乱码

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼String str "人造革";//gbk编码使用2个字节表示一个汉字,所以buffer的长度应该为6byte[] buffer str.getBytes("gbk");//[-56, -53, -44, -20, -72, -17]System.out.println("gbk编码的byte信息:"…

Java面向对象(10)--super关键字

在子类中使用super来调用父类中的指定操作&#xff1a; ①super可用于访问父类中定义的属性 ②super可用于调用父类中定义的成员方法 ③super可用于在子类构造器中调用父类的构造器 super的追溯不仅限于直接父类。 我们可以在子类的方法或构造器中&#xff0c;通过使用"s…

Java的Gradle依赖关系,使用编译还是实现?

当我向一位同事解释如何将Gradle用于Java项目时&#xff08;他正在远离Maven &#xff09;&#xff0c;我们遇到了各种代码示例。 有些示例将编译配置用于依赖项&#xff0c;而其他示例则使用Implements和api 。 dependencies { compile commons-httpclient:commons-httpclien…

Java面向对象(11)--多态性

父类 变量名 new 子类&#xff08;&#xff09;&#xff1b;对象的多态性&#xff1a;父类的引用指向子类的对象 Java引用变量有两个类型&#xff1a;编译时类型和运行时类型。编译时类型由声明 该变量时使用的类型决定&#xff0c;运行时类型由实际赋给该变量的对象决定。简…

java如何替换字符串0A_我有一个带有“ \ u00a0”的字符串,我需要将其替换为“” str_replace failed...

我需要清理来自各种Microsoft Office套件应用程序(Excel&#xff0c;Access和Word)的字符串(复制/粘贴)&#xff0c;每个应用程序都有自己的一组编码。我将json_encode用于调试目的&#xff0c;以便能够看到每个编码的字符。我可以使用str_replace清除到目前为止找到的所有内容…

Java面向对象(12)--对象类型转换 (Casting )

基本数据类型的Casting&#xff1a; ①自动类型转换&#xff1a;小的数据类型可以自动转换成大的数据类型 如long g20; double d12.0f ②强制类型转换&#xff1a;可以把大的数据类型强制转换(casting)成小的数据类型 如 float f(float)12.0; int a(int)1200L Java对象的强制…

知识蒸馏 循环蒸馏_Java垃圾收集蒸馏

知识蒸馏 循环蒸馏串行&#xff0c;并行&#xff0c;并发&#xff0c;CMS&#xff0c;G1&#xff0c;Young Gen&#xff0c;New Gen&#xff0c;Old Gen&#xff0c;Perm Gen&#xff0c;Eden&#xff0c;Tenured&#xff0c;Survivor Spaces&#xff0c;Safepoints和数百个JVM…

Java面向对象(13)--==操作符与equals方法

&#xff1a;运算符 可以使用在基本数据类型变量和引用数据类型变量中 ①如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等(类型不一定要相同&#xff0c;当要能够统一)。 int i 9;int j 9;double d 9.0;System.out.println(i j); //trueSystem.out.println…

ubuntu php pear_ubuntu下安装pear包(lynx和php-cli安装)

如果已经安装了lynx和php5-cli&#xff0c;那么就可以很方便的安装pear包了。如果安装了lynx和php5-cli,直接运行 # lynx -source http://pear.php.net/go-pear | php 就可以出现安装界面了。直接按提示回车就行了。遇到y/n选择直接y就可以了。不需要输入任何东西就可以全部安装…

Javascript中的AES加密和Java中的解密

AES代表高级加密系统&#xff0c;它是一种对称加密算法&#xff0c;很多时候我们需要在客户端加密一些纯文本&#xff08;例如密码&#xff09;并将其发送到服务器&#xff0c;然后由服务器解密以进行进一步处理.AES加密和解密更加容易在相同的平台&#xff08;例如Android客户…

toString()方法使用

toString()方法在Object类中定义&#xff0c;其返回值是String类型&#xff0c;返回类名和它的引用地址。在进行String与其它类型数据的连接操作时&#xff0c;自动调用toString()方法。 Account account new Account(); System.out.println(account); //com.atyeman.Account…

php 睡眠,php输出与sleep()

您要实现的是从PHP向浏览器的增量输出.这是否可实现取决于您的服务器以及您如何调用PHP.FastCGI下的PHP当PHP在FastCGI下而不是作为Apache模块运行时,你可能更容易遇到这种问题,因为服务器和PHP进程之间的耦合并不紧密耦合.一旦数据离开PHP进程,FastCGI通信就使用输出缓冲,只有…

Java面向对象(14)--包装类的使用

针对八种基本数据类型定义相应的引用类型—包装类&#xff08;封装类&#xff09;&#xff0c;有了类的特点&#xff0c;就可以调用类中的方法。 基本数据类型 <——> 包装类&#xff0c;String——>包装类 ①装 int num 9; Integer int1 new Integer(num); Syste…