微信小程序黑白块游戏

代码如下:

//play.js
// play
var app = getApp()
Page({data: {typeName: '计时模式',score: 0,time: 60,shouldStop: false,blockData:[]},onReady: function(){var array = [];// 先生成一个10个长度的数组for(var i = 0; i < 10; i++){// 生成一个随机位数为1的数组var orderArray = [0,0,0,0];var randomNum = Math.floor(Math.random() * 4);orderArray[randomNum] = 1;array.push({id: i, block: orderArray});}this.setData({blockData: array.reverse()});},handleClick: function(events){var id = events.currentTarget.id;var line = id.split("-")[1];var column = id.split("-")[2];var isBlack = id.split("-")[3];var blockData = this.data.blockData.reverse();var score = this.data.score;var orderArray = [0,0,0,0];// 判断是否是第一行if(line != blockData[0].id){this.handleWrong(0, score);return;}// 判断是否正确if(isBlack != 1){this.handleWrong(1, score);return;}// 正确下一个// 分数++// 最后一个小块的id为分数+10score++;orderArray[Math.floor(Math.random() * 4)] = 1;blockData.push({id: score+10, block: orderArray});blockData.shift();this.setData({silding: true,score: score,blockData: blockData.reverse()});},handleWrong: function( type , score){const titleArr = ["请点击第一个白块!游戏结束", "别点白块!游戏结束", "时间到"];var _this = this;wx.showToast({title: titleArr[type],icon: 'cancel', duration: 2000,complete: function(){// 将此分数存入全局变量app.globalData.currentScore = score;// 停止计数器_this.setData({shouldStop: true});// 若此分数比最高分数还高 将其存入本地if(score > app.globalData.timeScore){app.globalData.timeScore = score;wx.setStorageSync('timeScore',score);}var timer = setTimeout(function(){wx.redirectTo({url: '../end/end?type=time&score=' + score})clearTimeout(timer);}, 2000);}})},timeInterval: function(){var that = this;var timer = setInterval(function(){// 判断是否小于0var nowTime = that.data.time;if(that.data.shouldStop){clearInterval(timer);}if(nowTime > 1){that.setData({time: nowTime-1});return;}that.setData({time: nowTime-1});that.handleWrong(2, that.data.score);clearInterval(timer);}, 1000);},onLoad: function(){var that = this;wx.setNavigationBarTitle({title: that.data.typeName});this.timeInterval();}
})

急速模式

//play.js
// // play
var app = getApp()
Page({data: {typeName: '急速模式',score: 0,blockData:[],scrollHeight: 0,canRun: false},onLoad: function(){var that = this;// 设置titlewx.setNavigationBarTitle({title: that.data.typeName});},onReady: function(){var array = [];// 先生成一个10个长度的数组for(var i = 0; i < 10; i++){array.push(this.getNewLine(i));}this.setData({blockData: array.reverse()});},handleClickWhite: function(events){// 点击白块一定会报错 差别在于报错文案// 判断是否是点击的第一行// 被点击的idvar id = events.currentTarget.id;// 被点击的行var line = id.split("-")[1];// 数据var blockData = this.data.blockData.concat().reverse();// 当前分数var score = this.data.score;// 判断是否是第一行if(line != this.getClickableBlockLine(blockData)){this.handleWrong("请点击第一个黑块!游戏结束", score);} else {// 点击的第一行白块  this.handleWrong("别点白块!游戏结束", score);}},handleClickBlack: function(events){// 黑块是应该点击的块// 判断是否是点击的第一行// 被点击的idvar id = events.currentTarget.id;// 被点击的行var line = id.split("-")[1];// 数据var blockData = this.data.blockData.concat().reverse();// 当前分数var score = this.data.score;// 可点击的第一行var clickableLine = this.getClickableBlockLine(blockData);// 判断是否是第一行if(line == clickableLine){// 点击了第一行黑块 // 判断是否是是第一次if(score == 0){// 启动滑动程序this.run();}score++;// 将黑块变灰块this.getBlockBlackToGray(line, blockData);// 分数++this.setData({score: score,blockData: blockData.concat().reverse()});} else {// 点击的不是第一行白块  this.handleWrong("请点击第一个黑块!游戏结束", score);}},handleClickGray: function(events){// 灰块是指黑块点击之后的块 // 其在显示是白块 并且同样不可点var score = this.data.score;this.handleWrong("别点白块!游戏结束", score);},run: function(){// 滑动方法var that = this;var speed = 10;this.setData({canRun: true});var timer = setInterval(function(){// 当前滑动距离if(!that.data.canRun){clearInterval(timer);return;}var currentScrollHeight = that.data.scrollHeight;// 当前分数var score = that.data.score;// 滑块数据var blockData = that.data.blockData.concat().reverse();if(Math.abs(currentScrollHeight) == 150){// 滑到临界点// 判断是否过期// 判断条件是 第一个滑块的状态是否为已点击if(that.checkFirstLineBlockClicked(blockData[0].block)){// 没过期// 继续 去除旧节点 插入新节点 scrolllHeight归0var newId = blockData[blockData.length - 1].id + 1;blockData.push(that.getNewLine(newId));blockData.shift();that.setData({scrollHeight: 0,blockData: blockData.concat().reverse()});return;}// 过期// 报错that.handleWrong("请点击白块!游戏结束", score);return;}currentScrollHeight = currentScrollHeight - speed;that.setData({scrollHeight: currentScrollHeight});}, 20);},checkFirstLineBlockClicked: function(blockDataLine){for(var i = 0; i < blockDataLine.length; i++){if(blockDataLine[i] == 2){return true;}}return false;},getBlockBlackToGray: function(line, blockData){for(var i = 0; i < blockData.length; i++){if(blockData[i].id == line){var currentArray = blockData[i].block;for(var j = 0; j < currentArray.length; j++){if(currentArray[j] == 1){currentArray[j] = 2;return;}}}}},getClickableBlockLine: function(blockData){var line = 0;for(var i = 0; i < blockData.length; i++){var block = blockData[i].block;for(var j = 0; j < block.length; j++){// 行内四个元素 有1即可if(block[j] == 1){return blockData[i].id;}}}return line;},getNewLine: function(i){// 生成一个标准的数据var orderArray = [0,0,0,0];// 生成一个随机数var randomNum = Math.floor(Math.random() * 4);// 赋值给对应的objorderArray[randomNum] = 1;return {id: i, block: orderArray};},handleWrong: function(text, score){this.setData({canRun: false});wx.showToast({title: text,icon: 'cancel', duration: 2000,complete: function(){// 将此分数存入全局变量app.globalData.currentScore = score;// 若此分数比最高分数还高 将其存入本地if(score > app.globalData.speedScore){app.globalData.speedScore = score;wx.setStorageSync('speedScore',score);}var timer = setTimeout(function(){wx.redirectTo({url: '../end/end?type=speed&score=' + score})clearTimeout(timer);}, 2000);}})}
})


无尽模式

//play.js
// play
var app = getApp()
Page({data: {typeName: '无尽模式',silding: false,score: 0,blockData:[]},onReady: function(){var array = [];// 先生成一个10个长度的数组for(var i = 0; i < 10; i++){// 生成一个随机位数为1的数组var orderArray = [0,0,0,0];var randomNum = Math.floor(Math.random() * 4);orderArray[randomNum] = 1;array.push({id: i, block: orderArray});}this.setData({blockData: array.reverse()});},handleClick: function(events){var id = events.currentTarget.id;var line = id.split("-")[1];var column = id.split("-")[2];var isBlack = id.split("-")[3];var blockData = this.data.blockData.reverse();var score = this.data.score;var orderArray = [0,0,0,0];// 判断是否是第一行if(line != blockData[0].id){this.handleWrong(0, score);return;}// 判断是否正确if(isBlack != 1){this.handleWrong(1, score);return;}// 正确下一个// 分数++// 最后一个小块的id为分数+10score++;orderArray[Math.floor(Math.random() * 4)] = 1;blockData.push({id: score+10, block: orderArray});blockData.shift();this.setData({silding: true,score: score,blockData: blockData.reverse()});},handleWrong: function( type , score){const titleArr = ["请点击第一个白块!游戏结束", "别点白块!游戏结束"];wx.showToast({title: titleArr[type],icon: 'cancel', duration: 2000,complete: function(){// 将此分数存入全局变量app.globalData.currentScore = score;// 若此分数比最高分数还高 将其存入本地if(score > app.globalData.endlessScore){app.globalData.endlessScore = score;wx.setStorageSync('endlessScore',score);}var timer = setTimeout(function(){wx.redirectTo({url: '../end/end?type=endless&score=' + score})clearTimeout(timer);}, 2000);}})},onLoad: function(){var that = this;wx.setNavigationBarTitle({title: that.data.typeName});}
})
//结束
var app = getApp()
Page({data: {currentScore: 0,gameType: "",heighestScore: 0,backUrl: ""},onLoad: function(options){var score = options.score;var gameType = options.type;var text = {endless: "无尽模式", time: "计时模式", speed: "极速模式"};// 从全局变量中获取分数this.setData({currentScore: app.globalData.currentScore,gameType: text[gameType],heighestScore: app.globalData[gameType + "Score"],backUrl: '../'+gameType+'/play'});}
})

本文感谢无私开源的程序员点击获取项目

转载于:https://www.cnblogs.com/smart-girl/p/10858094.html

Black-White-Blocks相关推荐

  1. Uva 1103 Ancient Messages

    大致思路是DFS: 1. 每个图案所包含的白色连通块数量不一: Ankh : 1 ;  Wedjat : 3  ; Djed : 5   ;   Scarab : 4 ; Was : 0  ;  Ak ...

  2. UNREAL ENGINE 4.13 正式发布!

    这次的版本带来了数百个虚幻引擎 4 的更新,包括来自 GitHub 的社区成员们提交的 145 个改进!感谢所有为虚幻引擎 4 添砖加瓦贡献的人们: alk3ovation, Allegorithmi ...

  3. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务等等

    --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用 ...

  4. Scratch Blocks自定义组件之「点阵」

    一.背景 由于scratch blocks 自带的mictobit点阵只支持5*5,有时候并不满足我们自己的硬件,为此设计了N*M点阵Block,效果如下: 二.功能配置说明 支持N行M列点阵 支持保 ...

  5. Windows 7+Code::Blocks+wxWidgets实录(一)

    环境配置篇 玩过Linux的人应该对Code::Blocks和wxWidgets并不陌生. Code::Blocks是一款非常有名的代码编辑器,在linux下用不惯vim的话,这是个不错的选择.但千万 ...

  6. iOS 关于Blocks

    *本文参考了<Objective-C高级编程 iOS与OSX多线程和内存管理>一书,关于Block的介绍摘取自此书. Objective-c 语言中Block语法格式为: 返回值类型  参 ...

  7. 灵异事件 !同一个代码在code::blocks和Dev上面运行结果不一样!(一番分析后找到原因!)

    我今天在code的时候发现了一个灵异事件 !同一个代码在code::blocks和Dev上面运行结果不一样! 如图,同一个代码文件在两个编译器上的输出不同: 同样的代码在code::blocks上输出 ...

  8. 使最新版Code::Blocks支持C++11标准

    在使用最新版的Code::Blocks的时候发现如果使用C++11的unordered_map编译器就会报错: error: 'unordered_map' does not name a type ...

  9. UI自动化测试工具White简介以及使用经验总结(一)

    一.White简介 White是微软开发的一个开源工具,它提供了一套主要用于UI测试的框架.它适用于WinForm, WPF, Win32 以及SWT(java)的测试. White是用C#开发的,但 ...

  10. 使用TestStack.White进行Windows UI的自动化测试 (1) 基础篇

    参考  https://www.dazhuanlan.com/2019/09/04/8c18f8874287/ 本文章将简单介绍TestStack.White这个Windows UI自动化测试的套件, ...

最新文章

  1. 震惊!EfficientDet终于开源了!
  2. php 如何实现表格行列的对齐,excel怎样把每列文字对齐
  3. Laravel 文件夹结构简介
  4. Spring源码解析之:Spring Security启动细节和工作模式--转载
  5. 微服务治理实践:服务契约
  6. 如何在PFSense中设置故障转移和负载平衡
  7. EPSON 自带CCD图像处理包的典型应用框架
  8. C#由转换二进制所引起的思考,了解下?
  9. idea 15 license server
  10. [转载] java中抽象类的定义和使用
  11. bay——RAC 表空间时数据文件误放置到本地文件系统-介质恢复.txt
  12. 各浏览器下图片垂直居中的方法:
  13. html添加自动视频播放器,html5教程:[3]video标签轻松添加视频
  14. Linux系统 / Ubuntu16.04系统下安装QQ/TIM软件
  15. Jenkins配置Publish Junit test result report(转)
  16. 流媒体下载的几种方法
  17. java发送lrc文件格式_java中用正則表達式解析LRC文件
  18. String转成JSON或String转为list后转为JSON或String转为map后转为JSON
  19. Unity OSA循环列表插件常用介绍
  20. SVG排版公众号图文『实时计算日期差』模板代码

热门文章

  1. 省赛模拟一 又一道简单题
  2. SharePoint Framework 企业向导(六)
  3. java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map
  4. iOS 架构模式--解密 MVC,MVP,MVVM以及VIPER架构
  5. shell 数组详解
  6. Stream篇(2)【TextReader】
  7. MRTG 监控主机流量
  8. 使用“npm init”初始化项目
  9. 【CentOS7】设置静态IP地址
  10. 前端页面使用ace插件优化脚本