击鼓传花游戏

原游戏规则:
班级中玩一个游戏,所有学生围成一圈,从某位同学手里开始向旁边的同学传一束花。
这个时候某个人(比如班长),在击鼓,鼓声停下的一刻,花落在谁手里,谁就出来表演节目

一般在编程中就会把游戏规则修改一点

修改后的游戏规则:
几个朋友一起玩一个游戏,围成一圈,开始数数,数到某个数字的人自动淘汰。
最后剩下的这个人会获得胜利,请问最后剩下的是原来在哪一个位置上的人?

要想用JavaScript实现这个游戏,可以使用队列的知识

队列的定义

队列(Queue)是只允许在一端进行插入操作,而另一端进行删除操作的线性表
队列是一种先进先出(First In First Out)的线性表,简称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}
}

编写击鼓传花的代码

/*** @param {Array:参加游戏人员的名字} nameList* @param {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)

输出结果为:

JavaScript 击鼓传花的游戏 使用数据结构---队列来实现击鼓传花相关推荐

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

    击鼓传花游戏 原游戏规则: 班级中玩一个游戏,所有学生围成一圈,从某位同学手里开始向旁边的同学传一束花. 这个时候某个人(比方班长),在击鼓,鼓声停下的一刻,花落在谁手里,谁就进去表演节目 在编程中的 ...

  2. 数据结构--队列--js击鼓传花算法实现

    击鼓传花游戏 原游戏规则: 班级中玩一个游戏,所有学生围成一圈,从某位同学手里开始向旁边的同学传一束花. 这个时候某个人(比如班长),在击鼓,鼓声停下的一刻,花落在谁手里,谁就出来表演节目 一般在编程 ...

  3. 用js写出数据结构中的自定义队列,利用队列思想写出一个击鼓传花的游戏函数,优先级队列

    队列的核心是先进先出 1.用js写出数据结构中的自定义队列 class Queue{constructor(){this.item = [];}// 1.入队enqueue(ele){this.ite ...

  4. 找不同颜色小游戏html源码,Javascript实现找不同色块的游戏

    游戏规则:在变化数量的颜色块里找出一个不同颜色的块点击 这里使用了JS中的构造函数来创建元素 找不同色块的游戏(构造函数) *{ margin: 0; padding: 0; } #box{ widt ...

  5. 炸⾦花棋牌游戏Python

    炸⾦花棋牌游戏 需求: 允许⽤户⼀次性输⼊多个玩家姓名,不限个数,然后为每个玩家随机⽣成3张牌 你只有⼀付扑克牌,确保发出去的每张牌不重样 牌需要有⿊桃.红桃.⽅⽚.梅花之分 思路 建立一个牌库,创建 ...

  6. JAVA算法:李白遇花喝酒游戏JAVA DFS 算法设计

    JAVA算法:李白遇花喝酒游戏JAVA DFS 算法设计 看到了这样的一道题目,还挺有意思,可以通过不同的算法设计来求解. 话说大诗人李白,一生好饮.一日,他提着酒壶,从家里出来,酒壶中有酒2斗.他边 ...

  7. 一款使用JavaScript实现的篮球投篮游戏源代码,在浏览器里就能玩的篮球小游戏代码

    一款使用JavaScript实现的篮球投篮游戏源代码,在浏览器里就能玩的篮球小游戏代码 -根据光标的移动,沿某个方向击球 -球改变大小以使体验像3D一样 -音效让体验像真实生活! -球与轮辋碰撞并反弹 ...

  8. 用javascript编写的打字小游戏

    最近在学ExtJs,看了蔡世友老师的视频课程,在第十课中留了一个小作业,就是用javascript写一个打字小游戏,于是按照前几课所讲的知识自己编写了一个. 一.需求:网页上在随机位置会出现字母,字母 ...

  9. 弹力细胞,一个由JavaScript写的网页小游戏

    弹力细胞 (BounceCell) 一个由JavaScript写的网页小游戏 作为大一菜鸟,这是我第一次比较正式的写文章 [害臊] 游戏玩法 通过鼠标或触屏控制屏幕底部的滑动弹板将发射的小球反弹出去撞 ...

最新文章

  1. 记一次lnmp经历 nginx 多个php版本支持配置
  2. 独家 | 一文盘点数据集市和数据仓库的差异(附链接)
  3. 百度地图发布专网地图时空数据托管平台,构建智慧城市数字底盘
  4. Android TextView文本处理库推荐
  5. tf.clip_norm
  6. 高效程序员的45个习惯 pdf_高效瑜伽人的 5 个习惯,你get到了几个?
  7. linux hadoop 本地,Linux系统下运行基于本地的Hadoop
  8. 2021.12.17自制望远镜调焦座材料
  9. 八个程序员必备的代码编辑器(附下载链接)
  10. 为某个酒店编写程序:酒店管理系统,模拟订房、退房、打印所有房间状态等功能。 1、该系统的用户是:酒店前台。 2、酒店使用一个二维数组来模拟。“Room[][] roo
  11. 掌握 cinder-scheduler 调度逻辑 - 每天5分钟玩转 OpenStack(48)
  12. C#中的线程(四)高级话题
  13. HTML5期末大作业:小说网页设计——在线阅读7页(代码质量好) 学生DW网页设计作业源码 web课程设计网页规划与设计
  14. python里的def方法中->代表什么意思
  15. Spring Cloud技术栈简述
  16. 关于工作后定居城市的思考以及房价…
  17. Beer Barrels
  18. 网页无法访问怎么解决(已解决)
  19. Mac软件:分享五款实用的Mac软件,值得收藏
  20. 瞬态抑制二极管和esd静电管的区别

热门文章

  1. 计算机网络——动态路由RIP
  2. 基于JAVA动物大全和智能识别系统(Springboot框架+AI人工智能) 开题报告
  3. 经典作品推荐 パルフェ ショコラsecond brew 女仆咖啡帕露菲(含下载、汉化和攻略)...
  4. Java毕设项目电费管理系统(java+VUE+Mybatis+Maven+Mysql)
  5. java 对象验证非空_判断Bean对象指定字段非空
  6. 拓保软件喜获【年度最佳数字化服务商】大奖!专业能力获业界认可
  7. php js记住密码功能,JS中解决谷歌浏览器记住密码输入框颜色改变功能
  8. GDSOI2019自爆记
  9. 输电塔绝缘子上鸟巢检测(源码&教程)
  10. 二维等高线图转三维地形图