微信二维码
微博二维码
qq号二维码

学员作品-云顶之弈刮刮乐小程序

王伟平 2021.07.02 812人浏览
0基础学员的小程序处女座

以下内容转自学员作品站-筑坐极

创作人:学员-李子行

创作时间:2020年11月8号

以下为正文开始:


灵感来源:玩英雄联盟云顶之弈的时候,想自定义一些阵容保存下来。

所用工具:微信开发者工具

创意领域:微信小程序

班级类型:脱产班

所有者:李子行

这周完成的是微信小程序的学习,我做了一个简单的关于云顶之弈的微信小程序。

这个小程序分为三个页面,分别是阵容推荐页面,全英雄列表和小游戏页面。

这是第一个页面,阵容推荐页面。

学员作品-云顶之弈刮刮乐小程序

然后是第二个页面,全英雄列表页面:

学员作品-云顶之弈刮刮乐小程序

最后是小游戏页面:

学员作品-云顶之弈刮刮乐小程序

下面是翻翻乐的主要代码:


/**示例代码开始啦!**/
var app = getApp()
var allCard = ['202', '203', '204',  '205',  '206', '207', '208','209', '210',
      '211','212','213', '214', '215','216','217',
      '218', '219', '220', '221','222','223','224','225','226','227'];
var backCardImage = "/img/backPic.jpg"
Page({
  data: {
    clickNum: 0, // 点击次数
    useTime: 0, // 游戏时间  
    checked: 0, // 已匹配牌数
    allCard: allCard, // 全部卡牌数组
    backImage: backCardImage, // 牌背面 图片地址
    modalHidden: true, // 游戏完成提示是否显示
    firstX: -1, // 点击的第一张卡牌的坐标 
    firstY: -1,
    cards: [], // 随机挑选出来的牌   
    size: 12, // 界面显示的牌数=size*2
    clickable: false, // 当前是否可点击
    timer: '' // 游戏计时的定时器
  },
  startGame: function () { // 开始游戏
    var data = this.data;
    var that = this;
    console.log('startGame');
    var tmp = this.data.allCard.sort(
      function (a, b) {
        return Math.random() > .5 ? -1 : 1;
      }).splice(0, Math.floor(data.size)); // 打乱牌堆,挑出size/2张牌
    tmp = tmp.concat(tmp).sort(function (a, b) {
      return Math.random() > .5 ? -1 : 1;
    }); // 牌*2,再打乱
    // 添加src,state,转成二维数组方面展示
    var cards = [];
    var ix = -1;
    var iy = 0;
    for (var i in tmp) {
      if (i % 4 == 0) {
        cards.push([]);
        ix++;
        iy = 0;
      }
      cards[ix].push({
        src: 'https://game.gtimg.cn/images/lol/tft/cham-icons/624x318/'
              + tmp[i] + '.jpg',
        state: 1 // 为1时显示图片,为0时显示牌背面
 
      });
    }
    this.data.cards = cards;
    this.setData({
      cards: cards,
      clickNum: 0,
      useTime: 0,
      checked: 0,
      modalHidden: true,
      firstX: -1,
      clickable: false
    });
 
    var that = this;
    setTimeout(function () {
      that.turnAllBack(); // 所有的牌翻到背面
      console.log('turn all back');
      data.clickable = true; // 开始计时了才让点
      if (data.timer === '') {
        data.timer = setInterval(function () {
          data.useTime++;
          that.setData({
            useTime: data.useTime
          });
        }, 1000); // 游戏开始计时
      } else {
        that.setData({
          useTime: 0
        });
      }
    }, 5000); // 游戏开始前先让玩家记忆几秒钟
  },
  onTap: function (event) {
    var that = this;
    var data = this.data;
    var ix = event.currentTarget.dataset.ix; // 获取点击对象的坐标
    var iy = event.currentTarget.dataset.iy;
    console.log('onTap ' + ix + ' ' + iy);
    if (data.cards[ix][iy].state != 0 || !data.clickable) // 点击的不是未翻过来的牌或者现在不让点直接pass
      return;
    that.setData({
      clickNum: ++data.clickNum
    }); //点击数加1   
    // 1. 检测是翻过来的第几张牌
    if (data.firstX == -1) {
      // 1.1 第一张修改状态为 1
      data.cards[ix][iy].state = 1;
      data.firstX = ix;
      data.firstY = iy; // 记下坐标
      that.setData({
        cards: data.cards
      }); // 通过setData让界面变化
    } else {
      // 1.2 前面已经有张牌翻过来了,先翻到正面然后看是不是一样
      data.cards[ix][iy].state = 1;
      that.setData({
        cards: data.cards
      });
      if (data.cards[data.firstX][data.firstY].src === data.cards[ix][iy].src) {
        // 1.2.1.1 两张牌相同, 修改两张牌的state为2完成配对
        data.cards[data.firstX][data.firstY].state = 2;
        data.cards[ix][iy].state = 2;
        data.checked += 1; // 完成配对数++
        data.firstX = -1; // 准备下一轮匹配 
        // 1.2.1.2 检查是否所有牌都已经翻过来,都已翻过来提示游戏结束
        if (data.checked == data.size) { // 所有牌都配对成功了!
          this.setData({
            modalHidden: false
          });
          clearInterval(this.data.timer); // 暂停计时
          this.data.timer = '';
          this.saveScore({
            'time': data.useTime,
            'click': data.clickNum
          }) // 保存成绩
        }
      } else { // 1.2.2 两张牌不同, 修改两张牌的state为 0
        data.cards[data.firstX][data.firstY].state = 0;
        data.cards[ix][iy].state = 0;
        data.firstX = -1;
        data.clickable = false;
        setTimeout(function () {
          that.setData({
            cards: data.cards,
            clickable: true
          });
        }, 500); //过半秒再翻回去
      }
    }
    console.log(this.data.cards);
  },
  turnAllBack: function () {
    for (var ix in this.data.cards)
      for (var iy in this.data.cards[ix])
        this.data.cards[ix][iy].state = 0;
    this.setData({
      cards: this.data.cards
    });
  },
  saveScore: function (score) { // 保存分数
    var maxscore = wx.getStorageSync('maxscore');
    if (maxscore == undefined || maxscore == '')
      maxscore = [];
    maxscore.push(score);
    maxscore = maxscore.sort(function (a, b) {
      if (a.time < b.time)
        return -1;
      else if (a.time == b.time && a.click < b.click)
        return -1;
      else return 1;
    });
    wx.setStorageSync('maxscore', maxscore);
  },
  "disableScroll": true,
  onLoad: function () {
    this.startGame();
    console.log(this.data.cards);
  },
  modalComfirm: function () {
    this.startGame();
  },
  modalCancle: function () {
    this.setData({
      modalHidden: true,
    })
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  onReady: function () {
    console.log("onReady")
  },
  onShow: function () {
    console.log("onShow");
    if (this.data.checked == this.data.size)
      this.startGame()
  },
  onHide: function () {
    console.log("onHide")
  },
  onUnload: function () {
    console.log("onUnload")
  },
  onReachBottom: function () {
    console.log("onReachBottom")
  },
  onShareAppMessage: function () {
    console.log("onShareAppMessage")
  },
  onShareAppMessage: function () {
    console.log('onShareAppMessage')
    return {
      title: '自定义分享标题',
      desc: '自定义分享描述',
      path: '/page/user?id=123'
    }
  }
})

在刚开始编写微信小程序的时候很不适应,因为相对于JavaScript的节点操作来说,微信小程序是通过修改数据来修改各种内容的,但在适应过后感觉也还可以。

在最后:

学员作品-云顶之弈刮刮乐小程序

分享到:
天津UI设计培训-CleanPNG免抠素材网站
  • 2020.11.30
  • "天津IT培训适应经济新常态:中日职场比较 - 探索工作时长减少、生活质量提升的程序员"
  • 2024.04.23