微信小程序——【百景游戏小攻略】

本次课程小项目中的图片以及文章还未获得授权!请勿商用!未经授权,请勿转载!

博客班级 https://edu.cnblogs.com/campus/zjcsxy/SE2020
作业要求 https://edu.cnblogs.com/campus/zjcsxy/SE2020/homework/11334
作业目标 1.编写一个小程序,可以全新编写,也可以学习别人的小程序进行修改 2.熟悉git代码管理流程,将源代码上传到到 3.github在博客园班级中写一篇相应的博文
作业源代码 https://github.com/LittleFox99/software-engineering
学号 31801128
院系 浙大城市学院计算机专业
班级姓名 计算1803 陈可盈

1.前言

  • 因为作业目标中提到可以学习别人的小程序进行修改,所以就去github上找微信小程序的开源项目,一些项目无法运行,一些项目整体结构十分完整且数据存放在云盘上对初学者不太友好。所以最终还是决定自己创一个小的项目,合并与修改一些小组件。(项目中翻牌小游戏是我进行修改的他人项目,目的是使小程序更为完整以及趣味化,同时为后续的认知模型的大作业作准备)
  • 暑假开始,在玩一个休闲游戏,收集了一部分的攻略文章还有图片素材,就打算做一个游戏的小攻略程序。

2.项目展示

2.1界面展示

  • 首页

    • 小攻略

    首页-小攻略

首页-人物图鉴
  • 翻牌小游戏

翻牌小游戏
  • 布局(举例两个)

布局

2.2目录结构

├── app.js
├── app.json
├── app.wxss
├── components
├── data
│   ├── gonglue.js
│   ├── gonglue.json
│   ├── gonglue.wxml
│   └── gonglue.wxss
├── images
│   ├── b-1.JPG
│   ├── b-2.JPG
│   ├── b-3.JPG
│ ...
│   └── yt-4.JPG
├── pages
│   ├── detail
│   │   ├── article.js
│   │   ├── article.json
│   │   ├── article.wxml
│   │   └── article.wxss
│   ├── game
│   │   ├── game.js
│   │   ├── game.json
│   │   ├── game.wxml
│   │   └── game.wxss
│   ├── game-index
│   │   ├── gama-index.js
│   │   ├── gama-index.json
│   │   ├── gama-index.wxml
│   │   └── gama-index.wxss
│   ├── index
│   │   ├── index.js
│   │   ├── index.json
│   │   ├── index.wxml
│   │   ├── index.wxss
│   │   └── pc
│   │   ├── person.js
│   │   ├── person.json
│   │   ├── person.wxml
│   │   └── person.wxss
│   ├── logs
│   │   ├── logs.js
│   │   ├── logs.json
│   │   ├── logs.wxml
│   │   └── logs.wxss
│   └── tujian
│   ├── tujian.js
│   ├── tujian.json
│   ├── tujian.wxml
│   └── tujian.wxss
├── project.config.json
├── sitemap.json
└── utils
└── util.js
  • data

    • 存放攻略的具体数据(该项目写的比较简陋,数据收集较少,所以一些数据直接写在页面里,建议之后将其他页面的数据一起存放在data中)
  • images
    • 存放该项目的所有图片素材
  • pages
    • detail——攻略文章页面
    • game——游戏页面
    • game-index——游戏的首页
    • index——首页
      • pc——人物图鉴的页面
    • tujian——布局

3.代码学习之路

3.1布局

3.1.1轮播图

轮播图的wxml文件中轮播图模块我将图片全部列出来,其实只要写个循环

 <view class="lunbo-section">
<swiper class='lunbo' indicator-dots='true' autoplay='true' interval='4000'>
<swiper-item> <image src='/images/lunbo-1.JPG'></image> </swiper-item>
<swiper-item> <image src='/images/lunbo-2.JPG'></image></swiper-item>
<swiper-item> <image src='/images/lunbo-3.JPG'></image> </swiper-item>
<swiper-item> <image src='/images/lunbo-4.JPG'></image> </swiper-item>
<swiper-item> <image src='/images/lunbo-5.JPG'></image> </swiper-item>
</swiper>
</view>

{{}}是数据,它绑定使用 Mustache 语法(双大括号)将变量包起来.因为数据较少,轮播图的wxml文件中轮播图模块我将图片全部列出来,其实只要写个循环将图片源载入即可,比如:

<swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}">
<block wx:for="{{imgUrl}}">
<swiper-item>
<image src="{{item}}" class="slide-image" />
</swiper-item>
</block>
</swiper>

使用了滑块视图容器swiper,在页面的js中自己写函数设置swiper的属性或者在wxml设置直接设置属性

data{
background: ['demo-text-1', 'demo-text-2', 'demo-text-3','demo-text-4','demo-text-5'],
indicatorDots: true,
...
autoplay: false,
interval: 2000,
duration: 500,
...
},
...
属性 说明
indicator-dots 是否显示面板指示点
autoplay 是否自动切换
interval 自动切换时间间隔
duration 滑动动画时长
3.1.2选项卡

给页面赋值index,给view(tab)设置一个点击事件bindtap,并且给view(tab)一个data-index索引,根据页面的index来改变tab的状态并决定swiper显示不同页面的内容。

<view class='topTabSwiper'>
<view class='tab {{currentData == 0 ? "tabBorer" : ""}}' data-current = "0" bindtap='checkCurrent'>
<image src='/images/im-2.JPG'></image>
<text>
小攻略</text>
</view>
<view class='tab {{currentData == 1 ? "tabBorer" : ""}}' data-current = "1" bindtap='checkCurrent'>
<image src='/images/im-3.JPG'></image>
<text>
人物图鉴</text>
</view>
</view>
//点击切换,滑块index赋值
checkCurrent:function(e){
const that = this; if (that.data.currentData === e.target.dataset.current){
return false;
}else{ that.setData({
currentData: e.target.dataset.current
})
}
}
3.1.3图片列表
  • 以布局页面举例

    • 列表渲染:官方解释——在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。用<block/>,渲染一个包含多节点的结构块。
    • 这里学习了社区的代码片段,在使图片列表完整显示的时候使用的是scoll-view,比较简单的实现页面下拉,但查询微信开发文档时,官方给了一些小tip(比如:在滚动 scroll-view 时会阻止页面回弹,所以在 scroll-view 中滚动,是无法触发 onPullDownRefresh 以及若要使用下拉刷新,请使用页面的滚动,而不是 scroll-view ,这样也能通过点击顶部状态栏回到页面顶部),所以代码还有待优化。

    <swiper-item style="overflow: scroll;">
    <scroll-view scroll-y refresher-enabled refresher-background="#F6F7F8" refresher-triggered="{{isRefresh}}" bindrefresherrefresh="refresherpulling" bindscrolltolower="handleTolower">
    <view class="swiper-item">
    <block wx:for="{{item.bjList}}">
    <view class="post-container">
    <image src="{{item.imgSrc}}" class="post-img"></image>
    <text class="post-title">{{item.title}}</text>
    </view>
    </block>
    </view>
    <view class="swiper-item">到底了~~图片均未获得授权</view>
    </scroll-view>
    </swiper-item>
    handleTolower(e){
    wx.showToast({
    title: '到底啦!'
    })
    },
    refresherpulling() {
    wx.showLoading({
    title: '刷新中'
    })
    setTimeout(() => {
    this.setData({
    isRefresh: false
    })
    wx.showToast({
    title: '加载完成'
    })
    }, 2000)
    }

3.2页面跳转

  • 跳转页面的父页面

    • e是事件对象,可以携带额外信息,currentTarget是事件触发的当前事件(注:与Target之间的区别,可自行查阅资料),dataset是当前组件上由data-开头的自定义属性组成的集合。
    • 我们在需要点击跳转的模块绑定跳转函数 goDetailArticle(e),自定义了自定义属性组成的集合data-id,对应跳转数据中的id属性,实现跳转。这里要非常重要,可以打印一下数据 console.log(),查看是否接受到数据了,刚开始e.currentTarget.dataset拿不到数据,我自己debug了很久,查阅资料发现重点:以data-开头,多个单词由连字符-链接,不能有大写(大写会自动转成小写)如data-element-type,最终在 event.target.dataset 中会将连字符转成驼峰elementType。
    • wx.navigateTo带参数的页面跳转,跳转之后并且自带返回箭头,个人理解,比较适用于有列表渲染的idx的模块。wx.switchTab 跳转到tab页。
goDetailArticle(e) {
var postId = e.currentTarget.dataset.postid;
console.log(e);
console.log(postId);
wx.navigateTo({
url: '../detail/article?id='+postId
})
}
<view class="post-container" bindtap="goDetailArticle" data-postid="{{item.postid}}">
<view class="post-author-date">
<image src="{{item.avatar}}" class="post-author"></image>
<text class="post-date">{{item.date}}</text>
</view>
<text class="post-title">{{item.title}}</text>
<image src="{{item.imgSrc}}" class="post-img"></image>
<text class="post-content">{{item.content}}</text>
</view>
  • 被跳转的界面接受数据。

    onLoad:function(options){
    var postId=options.id;
    this.data.postId = postId;
    var data = postsData.glList[postId];//根据数据集合中自定义的id属性于数据的idx相同,实现获取具体的数据。
    this.setData({...data});//发送数据到data中
    console.log(postsData);
    console.log(options);
    }

3.3静态数据

var local_database = [
{
date:"07月29日 2020年",
title:"【保姆级·「驿站探险」·快速通关攻略】",
imgSrc:"/images/yizhan.JPG",
avatar:"/images/t1.JPG",
content:"牡丹亭的主线和副线我都快快做完了,分享一下心得。方便新手们参考。但我几乎算0氪玩家,用的人也比较非,一定还有更好更快的办法。",
author:"东西研究所",
postid: 0,
detail:"选人冒险属性高的(这个应该不用说吧)。去驿站出发前选人会显示体力的,挑体力高的人去,一次可以做多点任务。还要看人物天赋。我一开始抽到的人没什么厉害的,前期都在用卿级的冯梦龙,他算是卿级属性最好的。然后还有阿朵,自带天赋是摘花砍树都可以省体力,遇到那种-15的牡丹花之类的,相当于省一半体力了。但阿朵属性比较低,可以带珍宝配加属性。后来一些可以用的就是徐霞客(体力多,容易抽到)、王昭君(属性高,省粮草)、汪直、常遇春。别的冒险属性高的我没抽到。反正数值大家自己看,选体力多的就对了!还是体力,三白酒可以补50体力。每天在客栈可以领三次(10:00、16:00、21:00)。还有就是土行孙那里也能拿到。省去看广告的时间。地图上会有小泉水,发光的,不用仔细找也能看到。一次补50体力。同理还有摇钱树,也是发光的,点了能有铜钱(似乎耗费5体力)。反正大家地图上看到什么奇怪东西,又不用花什么体力都可以点一下。" },
......
]
var mydata="jiangbai";
module.exports = {
glList: local_database,
jiangbai:mydata
}

3.4游戏逻辑

  • 项目中翻牌小游戏是他人项目,目的是使小程序更为完整以及趣味化,同时学习其中的游戏逻辑,为后续的认知模型的大作业作准备。具体代码以及注释可看github上的项目。以下是我自己对这个小程序的一点理解

    /*开始游戏*/
    startGame: function ()
    {
    /*打乱牌堆,首先是选出参与游戏的牌,然后打乱*/
    var tmp = this.data.allCard.sort(
    .....
    );
    /*设置卡片的state,游戏刚开始时露出所有牌的正面,而后迅速变成背面*/
    setTimeout(function () {
    // 所有的牌翻到背面
    // 开始计时了才让点
    // 游戏开始计时
    }
    /*二维数组设定卡牌位置,通过获取坐标,检测是翻过来的第几张牌,通过卡牌的state来看玩家是否完成配对*/
    onTap: function (event){
    //1.牌翻过来,没有完成配对,修改卡牌的状态
    //2.牌翻过来,完成配对,修改卡牌的状态,页面显示改变
    //3.检查是否所有牌都已经翻过来,都已翻过来提示游戏结束 }

4.总结

4.1收获

​ 小程序的新手入门,因为小程序的开发比较类似web,也算是复习了web前端的一点知识。从刚开始下载github上一些demo的一脸茫然,到现在已经可以开始着手自己写一个微信小程序的代码片段,并最后可以组成一个不太完整比较粗糙的小程序。之前不怎么喜欢看官方的开发文档,比较喜欢直接搜索或找demo学习,现在发现官方的开发文档才是最重要的最规范的。

4.2困难

​ 刚开始看不懂github上一些项目非常完整的代码,找不到他们的数据在哪,后来才知道他们将数据放在服务器上。写代码的日常是页面接受不到数据,需要一直找bug,以及web的知识忘记了不少,布局上经常出现问题。微信组件也非常不熟悉,代码能力跟不上想法,不停地看博客教程和官方的开发文档。

4.3优化

  • 使用的是静态数据,没有配置域名(没有服务器)而不能进行后台操作

  • 人物图鉴的页面还没有写完整

  • 渲染列表数据多了,容易卡

  • 列表模块可以写成模版,是代码看起来更简洁

    。。。。。。

5.参考资料

https://www.cnblogs.com/chenyingying0/archive/2020/03/23/12556083.html

写项目的时候,参考的博客很多,大多已经找不到链接,如有侵权,非常抱歉!

6.本次课程小项目中的图片以及文章还未获得授权!请勿商用!未经授权,请勿转载!

微信小程序——【百景游戏小攻略】的更多相关文章

  1. 微信小程序开发的游戏《拼图游戏》

    微信小程序开发的游戏<拼图游戏> 代码直接考进去就能用 pintu.js // pintu.js Page({ /** * 页面的初始数据 */ data: { }, initGame: ...

  2. 微信小程序开发详解——小程序,大颠覆!

    微信小程序开发 联系 苏念 188.1414.7927  微信小程序系统开发 微信新功能开发 小程序开发 小程序怎么开发 app小程序开发 简化小程序开发 微信小程序定制 小程序制作 开发微信小程序  ...

  3. 微信小程序来了,小程序都能做些什么

    2017年的微信大动作就是微信小程序了,到底小程序都能做些什么?这是很多人关注的热点,小程序开发对企业又有什么帮助呢?下面让厦门微信小程序开发公司来为你就分析下.       微信小程序与APP的关系 ...

  4. 微信小程序快速移植支付宝小程序

    移植背景: 1. 支付宝小程序开发文档只了解了大致框架,跑了demo,具体Api.组件没太多了解: 2. 已有微信小程序,移植支付宝小程序做预研(主要针对授权登录.支付等功能). 3. 移植的微信小程 ...

  5. 微信小程序迁移到头条小程序工具

    最近公司需要将微信小程序迁移到头条小程序,比较得知微信和头条小程序的写法类似,只有文件名称不同,相关的指令不同,以及头条在ttml绑定的数据不可使用function,于是就写了node脚本来实现这些重 ...

  6. 微信小程序的开发——01小程序的执行流程是怎样的?

    作者:叶小钗 转载至:https://www.cnblogs.com/yexiaochai/p/9346043.html 我们这边最近一直在做基础服务,这一切都是为了完善技术体系,这里对于前端来说便是 ...

  7. 微信小程序学习笔记一 小程序介绍 & 前置知识

    微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...

  8. QQ小程序开发与发布小教程

    QQ小程序QQApp,和微信小程序类似,可以直接在手机QQ中直接打开,应用内应用,省去了安装手机APP,非常方便.官方的介绍:QQ小程序为QQ体系下的应用开放平台,可为不同类型的产品提供框架,并在QQ ...

  9. 小程序登录及AppSecret(小程序密钥)

    在授权开发以后,需要提交小程序密钥,有小程序密钥第三方才有能力获取用户的一些信息,提供一些能力! 平台分别提供多种方式实现微信登录: 1. 调用wx.login接口,静默获取openid 适用场景:无 ...

随机推荐

  1. C++中_T()和L的区别

    转载:https://blog.csdn.net/amusi1994/article/details/53898960 前言 本文旨在介绍于VC++常见的两个类型:_T()和L   概念 字符串前面加 ...

  2. Oracle Database XE 11gR2 SQL 命令行的显示调整

    操作系统:Windows 10 x64 Oracle Database XE 11gR2 参考:在cmd命令行使用sqlplus时的页面显示问题 通过 cmd 命令行或运行 SQL 命令行查看一张表的 ...

  3. Ubuntu通过Apache安装WebDav

    使用KeePass保存密码,在个人服务器上安装WebDav协议. # 安装Apache2服务器 sudo aptitude install -y apache2 # 开启Apache2中对WebDav ...

  4. Selenium截屏 图片未加载的问题解决--【懒加载】

    需求: 截屏后转PDF. 问题: selenium截屏后,图片未加载 如下图: 原因: 网站使用了懒加载技术:只有在浏览器中纵向滚动条滚动到指定的位置时,页面的元素才会被动态加载. 什么是图片懒加载? ...

  5. HttpReports 2.0 发布了 !!!

    前言介绍 HttpReports 是基于.Net Core 开发的APM监控系统,使用MIT开源协议,主要功能包括,统计, 分析, 可视化, 监控,追踪等,适合在微服务环境中使用. Github地址: ...

  6. LVS+keepalive

    LVS+keepalive 什么是keepalive Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,HA),其实两种不同的含义:广义来讲 ...

  7. Jenkins从节点上构建自动化测试项目时报错:java.io.IOException: Unexpected termination of the channel

    在mac电脑上配置了Jenkins从节点,在该从节点上构建app UI 自动化测试项目,运行一些用例后报如下错误: java.io.EOFException at java.io.ObjectInpu ...

  8. redis协议规范

    好多年前看过redis的代码,那个时候还是2.6的版本,集群和哨兵还没加入正式代码,这几年redis发展的好快.简略翻译一篇文章redis的https://redis.io/topics/protoc ...

  9. python -re库

    正则表达式的语法 正则表达式语法由字符和操作符构成 正则表达式的常用操作符: print("--正则表达式常用操作符--") mata="11356352135 abcd ...

  10. MeteoInfoLab脚本示例:Hamawari-8 netCDF data

    示例数据:ftp://ftp.bom.gov.au/anon/sample/catalogue/Satellite/IDE00220.201507140300.nc 该数据的分辨率很高(22000*2 ...