击鼓传花java_关于javascript:JavaScript-使用数据结构队列来实现击鼓传花

本文介绍了编程版的击鼓传花游戏,利用JavaScript中的队列数据结构来模拟游戏过程。当数到特定数字时,对应位置的玩家会被淘汰,最终返回胜利者及其在原始队列中的位置。
摘要由CSDN通过智能技术生成

击鼓传花游戏

原游戏规则:

班级中玩一个游戏,所有学生围成一圈,从某位同学手里开始向旁边的同学传一束花。

这个时候某个人(比方班长),在击鼓,鼓声停下的一刻,花落在谁手里,谁就进去表演节目

在编程中的游戏规则有一点变动

批改后的游戏规则:

几个敌人一起玩一个游戏,围成一圈,开始数数,数到某个数字的人主动淘汰。

最初剩下的这个人会获得胜利,请问最初剩下的是原来在哪一个地位上的人?

队列的定义

队列是只容许在一端进行插入操作,而另一端进行删除操作的线性表,是一种先进先出的线性表,简称FIFO。容许插入的一段称为队尾,容许删除的一端称为队头。

假如队列是 q=(a1,a2,a3....,an) ,那么 a1 就是队头元素,而 an 就是队尾元素。这样咱们删除时,总是从 a1 开始;而插入时,在最初。

这也合乎咱们通常在生活中一些排队的景象,排在第一个的优先解决,最初来的当然在队伍的最初了。

定义队列的办法:

enqueue() 入队

dequeue() 出队

front() 查看队头元素

toString() 返回队列中所有的元素

length() 返回队列的长度

队列的实现

function Queue() {

this.items = []

// 将元素退出到队列中

Queue.prototype.enqueue = function(element) {

this.items.push(element)

}

// 从队列中删除最前端的元素

Queue.prototype.dequeue = function() {

return this.items.shift()

}

// 查看前端的元素

Queue.prototype.front = function() {

return this.items[0]

}

// 查看队列是否为空

Queue.prototype.isEmpty = function() {

return this.items.length == 0

}

// 查看队列中元素的个数

Queue.prototype.size = function() {

return this.items.length

}

// 展现队列中所有的元素

Queue.prototype.toString = function() {

const resultString = ''

for (let i = 0; i < this.items.length; i++) {

resultString += this.items[i] + ' '

}

return resultString

}

}

编写击鼓传花的代码

=========

//{Array:加入游戏人员的名字} nameList

//{number:数到这个数字的人就淘汰} number

function passGame(nameList,number) {

// 创立一个队列

const queue = new Queue()

// 将所有人放入到队列中

for(let i = 0; i < nameList.length; i++) {

queue.enqueue(nameList[i])

}

// 当只有一个人的时候终止游戏

while(queue.size() > 1) {

for(let i = 0; i < number -1; i++){

// 把队列的第一个人放入到队尾

queue.enqueue(queue.dequeue())

}

// 间接从队列中删除number对应的这个人,

queue.dequeue()

}

return {

name:queue.front(), // 最终获胜的人

num:nameList.indexOf(queue.front())+1 // 最终获胜人在原来队伍中的第几个

}

}

测试

// 创立玩游戏的人

const stus = ['胡一菲','曾小贤','吕子乔','陈美嘉','关谷神奇','唐悠悠','陆展博','林宛瑜','张伟','诸葛鼎力','咖喱酱','赵海棠']

const result = passGame(stus,3)

console.log('获胜人是:' + result.name) //诸葛鼎力

console.log('队伍中的第几个:'+result.num) // 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值