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

时间:2021-09-13 09:36:47

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

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

博客班级 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. 微信小程序学习笔记一 小程序介绍 &amp&semi; 前置知识

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

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

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

  9. 小程序登录及AppSecret&lpar;小程序密钥&rpar;

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

随机推荐

  1. iOS 跳转至AppStore评分页面

    iOS7之前: [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"itms-apps://ax.itunes. ...

  2. ASP&period;NET MVC进阶一

    一.控制器相关 在Controller类中方法访问级别为public的方法,就是行为(Action). 如果不希望Controller类中的方法成为Action(可以在地址栏中被访问),有两种实现方式 ...

  3. 利用getchar&lpar;&rpar;消除多余字符数据&lpar;主要是&OpenCurlyDoubleQuote;回车”&rpar;

  4. WCF系列学习5天速成

    看到一篇比较好的基础wcf学习博客,分享给大家:http://www.cnblogs.com/huangxincheng/archive/2011/10/23/2221845.html

  5. Django(十九)Ajax全套

    参考博客:http://www.cnblogs.com/wupeiqi/articles/5703697.html 提交: - Form - Ajax 一.Ajax,偷偷向后台发请求 - XMLHtt ...

  6. python学习之老男孩python全栈第九期&lowbar;day004知识点总结

    1. 列表list: 列表转换成字符串: s = 'kidd' s1 = '_'.join(s) # 用_连接 字符串转换成列表: split() range(头,尾,步长): [0,1,2,3,4, ...

  7. Node&period;js中setTimeout和setInterval的使用

    Node.js和js一样也有计时器,超时计时器.间隔计时器.及时计时器,它们以及process.nextTick(callback)函数来实现事件调度.今天先学下setTimeout和setInter ...

  8. 关于java学习中的一些易错点&lpar;基础篇&rpar;

    由JVM来负责Java程序在该系统中的运行,不同的操作系统需要安装不同的JVM,这样Java程序只需要跟JVM打交道,底层的操作由JVM去执行. JRE(Java Runtime Environmen ...

  9. MySQL集群原理详解

    1. 为什么需要分布式数据库2. MySQL Cluster原理3. MySQL Cluster的优缺点4. MySQL Cluster国内应用5. 参考资料 1. 为什么需要分布式数据库 随着计算机 ...

  10. HDU 3038 How Many Answers Are Wrong(带权并查集,真的很难想到是个并查集!!!)

    How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...