微信小程序版狼人杀+服务端系列(1)_叫我秋水呀的博客-程序员宅基地

技术标签: .Net Core  微信小程序  微信狼人杀  

本系列主要讲利用微信小程序完整实现狼人杀游戏,慢慢跟进

关于狼人杀的游戏规则,就懒得赘述了,请自行百度。以下正文开始

  1. 创建房间以及加入房间
  2. 创建房间逻辑
  3. 加入房间逻辑

后续更改界面什么

创建房间效果图

以下实现逻辑,首先具有一个初始参数,然后根据用户选择来进行调节

Page({

  /**
   * 页面的初始数据
   */
  data: {
    person_step: 62.5, //初始人数条
    wolf_step: 60, //初始狼人条
    sumPerson: 9, //参与人数
    sumWolf: 3, //狼人人数
    radio: '2', //默认屠边
    loading: false, //不加载
    initPerson: { //默认配置
      hunter: 1, //猎人
      witch: 1, //女巫
      prophet: 1, //预言家
      guard: 0, //守卫
      idiot: 0, //白痴
      villager: 3, //村民
      wolf: 3, //狼人
      sheriff: 2, //警长票数
    },
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function() {

  },
  onDrag(event) {
    this.setData({
      sumPerson: Math.ceil(event.detail.value / 6.25)
    })
  },
  onDrag_wolf(event) {
    this.setData({
      sumWolf: Math.ceil(event.detail.value / 20)
    })
  },
  onChange(event) {
    this.setData({
      radio: event.detail
    });
  },
  //推荐设置
  setIdentity() {
    let initPerson = this.data.initPerson,
      that = this
    switch (this.data.sumPerson) {
      case 9:
        initPerson.hunter = 1
        initPerson.witch = 1
        initPerson.prophet = 1
        initPerson.wolf = 3
        initPerson.villager = 3
        initPerson.guard = 0
        initPerson.idiot = 0
        initPerson.sheriff = 0
        break;
      case 10:
        initPerson.hunter = 1
        initPerson.witch = 1
        initPerson.prophet = 1
        initPerson.wolf = 3
        initPerson.villager = 4
        initPerson.guard = 0
        initPerson.idiot = 0
        initPerson.sheriff = 0
        break;
      case 11:
        initPerson.hunter = 1
        initPerson.witch = 1
        initPerson.prophet = 1
        initPerson.wolf = 4
        initPerson.villager = 3
        initPerson.guard = 0
        initPerson.idiot = 1
        initPerson.sheriff = 3
        break;
      case 12:
        initPerson.hunter = 1
        initPerson.witch = 1
        initPerson.prophet = 1
        initPerson.wolf = 4
        initPerson.villager = 4
        initPerson.guard = 0
        initPerson.idiot = 1
        initPerson.sheriff = 3
        break;
      case 13:
        Toast('目前没有推荐配置,请自行配置')
        break;
      case 14:
        Toast('目前没有推荐配置,请自行配置')
        break;
      case 15:
        Toast('目前没有推荐配置,请自行配置')
        break;
      case 16:
        Toast('目前没有推荐配置,请自行配置')
        break;
    }
    this.setData({
      initPerson: initPerson,
      sumWolf: initPerson.wolf,
      sumPerson: that.reckonPerson(),
      person_step: that.reckonPerson() * 6.25,
      wolf_step: initPerson.wolf * 20
    })
  },
  //头像单点
  identityClick(event) {
    // 1 2 3 4 5 6 7 8  hunter witch prophet wolf villager guard idiot sheriff
    let initPerson = this.data.initPerson,
      that = this,
      sumPerson = this.data.sumPerson
    switch (parseInt(event.currentTarget.dataset.index)) {
      case 1:
        Toast('当前局只能有1个猎人')
        break;
      case 2:
        Toast('当前局只能有1个女巫')
        break;
      case 3:
        Toast('当前局只能有1个预言家')
        break;
      case 4:
        initPerson.wolf = initPerson.wolf + 1
        break;
      case 5:
        initPerson.villager = initPerson.villager + 1
        break;
      case 6:
        initPerson.guard = initPerson.guard + 1
        break;
      case 7:
        initPerson.idiot = initPerson.idiot + 1
        break;
      case 8:
        if (parseInt(initPerson.sheriff) < 4) {
          initPerson.sheriff = initPerson.sheriff + 0.5;
        } else {
          Toast('最高4票,0.5票算作一人')
        }
        break;
    }
    if (that.reckonPerson() <= 16) {
      this.setData({
        initPerson: initPerson,
        sumPerson: that.reckonPerson(),
        sumWolf: initPerson.wolf,
        person_step: that.reckonPerson() * 6.25,
        wolf_step: initPerson.wolf * 20
      })
    } else {
      Toast('超过最大人数十六人')
    }
  },
  //计算总人数
  reckonPerson() {
    let initPerson = this.data.initPerson
    let sumPerson = initPerson.hunter + initPerson.witch + initPerson.prophet + initPerson.wolf + initPerson.villager + initPerson.guard + initPerson.idiot
    return sumPerson;
  },
  btnCreate() {
    let that = this,
      initPerson = this.data.initPerson
    this.setData({
      loading: true
    })
    //请求创建房间
    util.request(api.CreateRoom, {
      openid: app.globalData.userInfo.openid,
      gamer: that.reckonPerson(),
      wolf: initPerson.wolf,
      villager: initPerson.villager,
      witch: initPerson.witch,
      prophet: initPerson.prophet,
      hunter: initPerson.hunter,
      idiot: initPerson.idiot,
      guard: initPerson.guard,
      sheriff: initPerson.sheriff
    }).then(res => {
      if (res.code == 200) {
        wx.redirectTo({
          url: '/pages/room/room?roomid=' + res.data.id,
        })
      }
    })
  }
})

整个项目已上传至GitHub,觉得有用的同学麻烦点个star 谢谢。GitHub狼人杀项目

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36479244/article/details/98044214

智能推荐

HDU 2815 Mod Tree 解a^x = b(mod n)非互质-程序员宅基地

HDU 2815 Mod Tree 解a^x = b(mod n)非互质

我这个月外快赚了1万多(纯干货篇)-程序员宅基地

很多程序员兄弟们工资不高,但时间还是比较充足的,剩下的时间想多搞点外快,毕竟要养家糊口。我来讲讲怎么做可以一个月轻松多赚1万多元的外快。(纯干货分享!)一、接项目是程..._外快怎么才能挣到1万块钱

DataTable转换为List<T>或者DataRow转换为T-程序员宅基地

这段时间开发ASP.NETMVC应用程序,从数据库获取数据之后,需要把记录转换为数据集在视图中显示。我们需要把DataTable转换为List&lt;T&gt;或者DataRow转换为T。 本篇中可以学习到相关的知识,数据库方面,创建表,添加数据,存储过程等。MVC方面,创建model,创建Entity,Utility写在一个目录中,控制器创建视图操作,以及行为操作。先从数据库:SQL..._datarow转list

layui table 操作栏按钮过多 省略号隐藏的按钮弹出的tip点击没有效果解决办法_layui操作栏按钮过多显示省略号-程序员宅基地

范例如下&lt;table id="LAY-app-content-nav" lay-filter="LAY-app-content-nav"&gt;&lt;/table&gt; table.on('row(LAY-app-content-nav)', function(obj){ var data = obj.data; /* laye..._layui操作栏按钮过多显示省略号

学习Android逆向总结-程序员宅基地

1.最好做过一段时间的android sdk ndk开发这样就能:(1)了解android系统的运行机制 (2)熟练使用C/C++,java开发2.逆向必备的的基本功是1.java\C++\C 开发2.Python\arm 汇编3.Linux 密码学4.anroid 系统原理,框架,权限,沙箱等等5.elf、dex文件结构、加载运行机制6.推荐啃透:程序员的自我修养,linker ...

关于IDEA显示无法找到bean报错但可以运行的情况_idea 启动失败找不到bean 但是项目中有bean-程序员宅基地

有时我们在使用bean的时候会出现显示无法autowire的情况,但实际调用的时候可以正常运行,遇到这种情况zhi'只需要填加@SuppressWarnings("SpringJavaAutowiringInspection")注解,会取消这个无用报错。..._idea 启动失败找不到bean 但是项目中有bean

随便推点

Python批量重命名文件_if in file: python-程序员宅基地

按照txt中的顺序将文件夹中的文件批量重命名:import osdef re_name(path): for file in os.listdir(path): file_path = os.path.join(path, file) #print(file) if ".dic" in file.lower(): # 判断文件是否为dic文件 for i in range(len(LstFilesDIC)): _if in file: python

skyeye1.2.8运行u-boot出现大量"bus read error"解析_bus read 错误-程序员宅基地

平台环境:skyeye1.2.8+u-boot1.2.0+smdk2410现象描述:在运行的时候会出现大量的“bus read error”错误,或者u-boot跑飞出现乱码信息。 1.2.8相对1.2.6最大的改变就是将存储管理这一块做成相对独立的模块,我想这样做的目的应该是能够把更多的精力放在新平台新架构的研发。出现问题我初步想法可能就是在这个改变上。通过与1.2.6上跑u-_bus read 错误

韩学东 中科院计算机,视觉导航技术综述医.pdf-程序员宅基地

视觉导航技术综述医2007 江苏省自动化学会学术年会论文集视觉导航技术综述唐超颖,杨忠,沈春林(南京航空航天大学自动化学院,江苏 南京 210016)摘要:概述了视觉导航技术。视觉导航依据视觉图像,利用图像处理、计算机视觉、模型识别等相关技术获取运动体的运动信息和空间位置信息,实现导航。首先,简单比较了各种常用的导航方式,分析了视觉导航的研究意义;其次,总结了目前视觉导航的应用领域及应用概况;接着..._杨忠 博导 南京航空航天大学自动化学院

开心农场的20条人生启示_陕南赤子_新浪博客-程序员宅基地

看到这二十条启示第一反应是:游戏出真知啊!凡事都有对立面,多看看积极的一面不挺好啊?吸引我玩这个游戏是因为有朋友说到游戏里的一名话:做人不能贪得无厌每个人的内心或多或少都会有点小恶,个人觉得于人无害便不算恶吧!恶作剧是生活的调剂.个人觉得还是挺好玩的,植物画得很好,很形像,尤其看到作物枝繁叶茂果实累累的时候,最是开心!不过,小孩子慎玩.括...

自定义控件总结---onMeasure onLayout onDraw深入解析_onmeasure onlayout ondraw-程序员宅基地

对于一个Android开发来说,不管你有多不喜欢自定义控件,你都得和她谈一场恋爱。所以我主动谈了这场很费脑子的恋爱,因为阅读源码的能力不好,在寻根抛底的找线索的过程中,搞得反胃,不过最后还是把来龙去脉都捋了一遍。当然今天的角不是常用且高效的组合型自定义控件,而是纯粹绘制出来的View或者重新定义规则的一个ViewGroup。 简述1:启动Activity的时候会创建..._onmeasure onlayout ondraw

数据结构和算法:16.ConcurrentHashMap分析_concurrenthashmap h >>> 16-程序员宅基地

ConcurrentHashMap分析1. HashMap 5 个线程 put 数据会发生什么? (阿里面试第一面)2. Java 多线程的内存模型3. synchronized 的底层实现原理4. ConcurrentHashMap 源码分析1. HashMap 5 个线程 put 数据会发生什么? (阿里面试第一面)数据丢失,死循环 (扩容)解决方案:hashTableCollections.synchronizedMap()ConcurrentHashMap前两种是锁着整个方法,分_concurrenthashmap h >>> 16