java小程序 2048_微信小程序之游戏2048
主要用来锻炼逻辑思维能力
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相关推荐
- java计算机毕业设计基于微信小程序的校园外卖订餐系统APP
项目介绍 网络技术的快速发展给各行各业带来了很大的突破,也给各行各业提供了一种新的管理模块和校园订餐模块,对于校园订餐小程序将是又一个传统管理到智能化信息管理的改革,对于传统的校园订餐管理,所包括的信 ...
- java监听微信_一种基于java后台应用监控微信小程序的用户访问量的方法与流程...
本发明涉及java应用与微信小程序应用开发技术领域,具体涉及一种基于java后台应用监控微信小程序的用户访问量的方法. 背景技术: 微信小程序,简称小程序,是一种不需要下载安装即可使用的应用,它实现了 ...
- (微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好
转载地址:(微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 作者:Happy王子乐 个人网站(整理 ...
- java计算机毕业设计基于微信小程序的药店药品销售管理系统APP
项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息.为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代, ...
- 基于java+SpringBoot+HTML+Mysq+微信小程序+小说阅读网站
详细功能设计:请点击下面链接查看 基于java+SpringBoot+HTML+Mysq+微信小程序+小说阅读网站_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 基于Spr ...
- 基于java的ssm和微信小程序实现物业缴费系统的设计与实现【附项目源码+论文说明】
基于java的ssm和微信小程序实现物业缴费系统的设计与实现 摘要 本论文主要论述了如何使用JAVA语言开发一个基于微信小程序的物业缴费系统的设计与实现,本系统将严格按照软件开发流程进行各个阶段的工作 ...
- map和foreach的区别和应用场景_支付宝小程序和微信小程序,两者有何区别?
原标题:支付宝小程序和微信小程序,两者有何区别? 自2017年1月微信推出小程序之后,小程序的发展势头便愈来愈猛.作为腾讯老对头的阿里,也开始投入小程序的研发.在一年多的开放公测后,支付宝小程序终于于 ...
- 怎么添加一个程序集_门店小程序,微信小程序怎么添加店铺
现今随着互联网发展,越来越多选择网上购物代替实体店购物,微信作为最多人使用的社交软件,他的商机也被许多企业商家发展,进入微信分销小程序购物是现在最流行的购物方式,驱使很多实体店也纷纷加盟进驻门店分销小 ...
- 微信与php什么区别,微信小店和微信小程序的区别是什么?
区别:微信小店的功能比较少,只拥有基本的商城购物功能,没有营销功能,因而只适合不需要营销推广的个人开店:而小程序则是支持各种功能开发,可以开发商城小程序,也可以开发各种营销推广功能,能够满足商家的多功 ...
最新文章
- 王贻芳院士:我们的科技管理过度强调竞争,缺乏稳定支持
- docker中部署redis主从模式
- Dev-GridView-对于gridview的列值的合计
- axure 素材_Axure原型:超漂亮的系统首页
- 厉害了,3万字的MySQL精华总结 + 面试100问!
- 计算机组成原理整机实验报告,计算机组成原理加器实验报告.doc
- 在线求CR,你觉得我这段Java代码还有优化的空间吗?
- flash player for linux 64,64-bit linux下装什么adobe flash player
- TikZ绘图示例——尺规作图:线段的任意等分
- 首套房贷款首付多少?
- ajax动态的给表格添加数据,jQuery+ajax实现动态添加表格tr td功能示例
- 酉矩阵(unitary matrix)
- python制作指定区域截图工具_用python实现选择截图区域
- linux filp open,内核模块中filp-open对文件的读写【转】
- maven 入门(转)
- java 填充字符串_Java字符串右补齐——String.format
- Tensorflow框架初识
- 为网站鼠标点击添加富强民主等内容Js代码
- QT绘制区域(ROI)框(矩形框和椭圆框)
- 离散数学—命题逻辑知识点整理
热门文章
- Java中的类型安全的空集合
- 使用Regions ADF 11g进行Master Detail CRUD操作
- Linux 命令行中的文件名/文件路径中使用通配符的说明
- 递归算法 流程图_什么是算法?如何学习算法?算法入门的学习路径
- 多个cpp文件生成so_C++:C++的文件搜索路径
- python字符串排序_Python-如何对字符串列表进行排序?
- LeetCode 02.两数相加
- C语言 | 读写文件
- Python3最长连续递增序列问题
- t分布 u分布 卡方分布_中心极限定理|z分布|t分布|卡方分布