近期弄了一个谁是卧底微信小程序线下版,只要一部手机就能完成游戏整个流程。下图为程序二维码
程序通过一部手机设定游戏人数,包括平民、卧底和白板的数量,点击开始游戏后,会生成意思相近的两个词语,参与人依次点击查看自己的词语,保证属于自己的词语不被其他人看到。游戏过程中,大家投票过后,可在相应界面点击投票数最多的人的序号查看此人的身份,直到游戏结束。
此项目采用wepy框架开发,包含首页模块、配置人数模块、词语查看模块、结果查看模块。
下面为一局游戏生成核心代码:
/**
* 生成一局游戏
* @returns array 所有角色对应的词语数组
*/
static createGame() {
this.allPlayerWordArray = []
// 词语数组
const wordDataArray = dataArray
// 词语数组长度
const wordDataArrayLen = dataArray.length
// 生成一个随机数,获取当前游戏的词语
const randomNum = this.createRandom(0, wordDataArrayLen)
// 平民的词
const civilianWord = wordDataArray[randomNum][0]
// 卧底的词
const spyWord = wordDataArray[randomNum][1]
// 获取游戏角色人数
const playerNumArr = this.getGamePlayer()
// 总人数
this.allPlayerNum = playerNumArr[0]
// 平民人数
this.civilianPlayerNum = playerNumArr[1]
// 卧底人数
this.spyPlayerNum = playerNumArr[2]
// 白板人数
this.whiteboardPlayerNum = playerNumArr[3]
// 总人数
const allNum = this.allPlayerNum
// 卧底人数
const spyNum = this.spyPlayerNum
// 白板人数
const whiteboardNum = this.whiteboardPlayerNum
// 卧底和白板总数
const swNum = spyNum + whiteboardNum
// 卧底和白板总的数字数组
let swRandomArr = []
for (let i = 0; i < swNum; i++) {
const csRandom = this.createRandom(0, allNum)
if (swRandomArr.indexOf(csRandom) === -1) {
swRandomArr.push(csRandom)
} else {
i--
}
}
// 卧底随机数字数组
let sRandomArr = swRandomArr.slice(0, spyNum)
// 白板随机数字数组
let wRandomArr = swRandomArr.slice(spyNum, swNum)
let allPlayerWordArr = []
// 角色类型
const role = this.roleArray
for (let j = 0; j < allNum; j++) {
let obj = {
checked: false,
liveFlag: j + 1 + '号玩家,存活'
}
// 卧底
if (sRandomArr.indexOf(j) > -1) {
obj.role = role[1]
obj.word = spyWord
}
// 白板
else if (wRandomArr.indexOf(j) > -1) {
obj.role = role[2]
obj.word = ''
}
// 平民
else {
obj.role = role[0]
obj.word = civilianWord
}
allPlayerWordArr[j] = obj
}
this.allPlayerWordArray = allPlayerWordArr
return allPlayerWordArr
}
需要查看更多源码的请评论联系我!