击鼓传花击鼓次数相同c语言,JavaScript 实现击鼓传花游戏

大家小时候应该都玩过击鼓传花(Hot Potato)的游戏吧!

一群小孩围成一个圆圈,把花尽快的传给旁边的人。某一时刻传花停止,这时花在谁手里,谁就退出圆圈结束游戏。重复此过程,直到剩下最后一个孩子,即为胜者。

如何用 JavaScript 代码按此规则实现击鼓传花呢?

这里需要借助 JavaScript 中队列的知识,利用循环队列来实现。

6d99ffa9d44a

队列

首先,我们创建一个 queue.js 的文件存储 Queue 类,代码如下:

export default class Queue {

constructor() {

this.count = 0;

this.lowestCount = 0;

this.items = {};

}

enqueue(element) {

this.items[this.count] = element;

this.count++;

}

dequeue() {

if (this.isEmpty()) {

return undefined;

}

const result = this.items[this.lowestCount];

delete this.items[this.lowestCount];

this.lowestCount++;

return result;

}

isEmpty() {

return this.size() === 0;

}

clear() {

this.items = {};

this.count = 0;

this.lowestCount = 0;

}

size() {

return this.count - this.lowestCount;

}

toString() {

if (this.isEmpty()) {

return '';

}

let objString = `${this.items[this.lowestCount]}`;

for (let i = this.lowestCount + 1; i < this.count; i++) {

objString = `${objString},${this.items[i]}`;

}

return objString;

}

}

其次,根据击鼓传花的规则和循环队列的知识,组织代码:

/**

* @param {Array:参加游戏的人员} elementsList

* @param {number:每次击鼓的次数} num

*/

function hotPotato(elementsList, num) {

// 引入 queue.js 创建 Queue 实例

const queue = new Queue();

const elimitatedList = [];

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

// 把参加的人列入队列中

queue.enqueue(elementsList[i]);

}

while (queue.size() > 1) {

for (let i = 0; i < num; i++) {

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

queue.enqueue(queue.dequeue());

}

// 把淘汰的人放入 elimitatedList 数组中

elimitatedList.push(queue.dequeue());

}

return {

eliminated: elimitatedList, // 淘汰的人

winner: queue.dequeue() // 胜利者

};

}

// test

const names = ['丁一', '龙二', '张三', '李四', '王五', '赵六'];

const result = hotPotato(names, 7);

result.eliminated.forEach(name => {

console.log(`${name} was eliminated from the Hot Potato game.`);

});

console.log(`The winner is: ${result.winner}`);

// 龙二 was eliminated from the Hot Potato game.

// 王五 was eliminated from the Hot Potato game.

// 李四 was eliminated from the Hot Potato game.

// 丁一 was eliminated from the Hot Potato game.

// 赵六 was eliminated from the Hot Potato game.

// The winner is: 张三

输出的结果依次为被淘汰的选手和最后的胜利者,这个方法有个弊病:每次淘汰选手敲得鼓声都是一样,导致淘汰的选手和胜利者能预测到。一般我们游戏的时候敲的鼓声都是不确定的,那如何做到不确定,达到一定的游戏氛围呢?大家集思广益吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端的c语言面试题,前端工程师面试题汇总(选择题)

前端工程师面试题汇总(选择题)时间&#xff1a;2017-12-05 来源&#xff1a;前端工程师面试题推荐作为一名前端工程师&#xff0c;我们必不可少的就是参加面试&#xff0c;面试过程中会遇到各类奇葩的问题&#xff0c;今天小编为大家汇总了一些相关的问题&#xff0c;希望可…

android 磁场传感器 罗盘,Android开发获取重力加速度和磁场强度的方法

本文实例讲述了Android开发获取重力加速度和磁场强度的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;Android获取重力加速度和磁场强度主要依靠&#xff1a;Sensor.getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic)输入数据&am…

html在线编辑器 asp.net,ASP.NET网站使用Kindeditor富文本编辑器配置步骤

1. 下载编辑器下载 KindEditor 最新版本&#xff0c;下载页面: http://www.kindsoft.net/down.php2. 部署编辑器解压 kindeditor-x.x.x.zip 文件&#xff0c;将editor文件夹复制到web目录下3、在网页中加入(ValidateRequest"false")4、引入脚本文件(XXX部分需要修改)…

html中通过定位 实现下拉,JS+CSS相对定位实现的下拉菜单

本文实例讲述了JSCSS相对定位实现的下拉菜单。分享给大家供大家参考。具体如下&#xff1a;这里使用的是相对定位&#xff0c;不过效果还可以&#xff0c;用时候再修整一下&#xff0c;这个只是实现了大概功能&#xff0c;还有许多细节没有修饰。运行效果截图如下&#xff1a;在…

html页面包含头文件,Web前端技术:HTML部分---Head标签中包含的头文件标签,body标签包含的内部标签...

1、Head标签中包含的 头文件标签的作用&#xff1a;(1)title标签&#xff1a;定义网页的标题。(2)meta标签&#xff1a;一般用于定义页面的特殊信息&#xff0c;例如页面的关键字、页面描述等(3)link标签&#xff1a;用于引入外部样式文件(CSS 文件)。(4)style标签&#xff1a;…

HTML如何做个播放器图表,Web绘图神器之ECharts-ts文件播放器

前言最近在做一个项目需要用到大量的图形报表来展示数据。就去对比了一些前端图形报表框架&#xff0c;有Highcharts、Echarts、Three.js。发现Three.js比较笨重&#xff0c;不太适合数据展示&#xff0c;做前端动画还是比较好。而highcharts、echarts比较轻量级拿来就用比较方…

计算机网络原码反码补码,计算机的原码和反码及补码到底是什么

数据在计算机里面都是以0和1存储和运算的&#xff0c;这是冯诺依曼体系的基础。比如一个数在计算机中若有正负之分&#xff0c;则用一个数的最高位(符号位)用来表示它的正负&#xff0c;其中0表示正数&#xff0c;1表示负数。原码就是整数绝对值的二进制形式&#xff0c;为了解…

关于计算机应用基础问题,《计算机应用基础》习题及问题详解

《计算机应用基础》习题及问题详解 (17页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;19.90 积分实用文档第一章 计算机基础知识填空题&#xff1a;1. 信息技术在现代工业工程中的应用十分广泛&…

计算机网络安全本科大学排名,2021网络工程专业大学排名 最好大学排行榜

2021网络工程专业大学排名 最好大学排行榜2021-06-11 19:35:09文/丁雪竹网络工程专业在全国最好的大学是哪几所呢&#xff0c;最好的大学排名是什么样呢&#xff0c;小编整理网络工程专业大学最好大学排行榜&#xff0c;仅供参考&#xff01;网络工程专业最好大学排行榜在网络工…

20线程测试cpu性能软件,评测平台介绍、CPU多线程性能测试

2、平台介绍及CPU性能测试AMD AM3平台CPUAMD FX-8150(4模块/8核)AMD FX-8350(4模块/8核)主板华硕 Crosshair V Formula(BIOS版本&#xff1a;1605)Intel LGA1155平台CPUIntel Core i5 3570K(4核/4线程)Intel Core i7 3770K(4核/8线程)主板华硕 P8Z77-V Deluxe共用配件硬盘主盘&…

大型网站服务器 pdf,大型网站服务器容量规划[PDF][145.25MB]

内容简介内 容 提 要本书讲解了用数学回归分析方法来做服务器容量规划的思路&#xff0c;让读者掌握服务器容量规划的量化方法&#xff1b;模型的选择是服务器容量规划的关键&#xff0c;不同的程序有不同的模型。本书使用nginxPHPMySQL为实例演示了具体的规划过程&#xff0c;…

穿越火线全部服务器都显示爆满,穿越火线大区全部爆满,频道挤不进去背后的故事!...

大家好我是小包子&#xff0c;穿越火线经历了十一周年&#xff0c;盛典游戏更新后&#xff0c;我们发现游戏基本上所有大区都呈现爆满的盛世。我们热爱的穿越火线又回来了吗&#xff1f;6月小包子曾爆料CF启动量超过吃鸡跃居第二&#xff0c;射击游戏第一&#xff0c;重回巅峰的…

服务器加根网线用不用修改路由器,安装设置无线路由器需要用几根网线?

“安装设置无线路由器需要用几根网线&#xff1f;看到网上安装设置路由器的教程&#xff0c;有的说需要两根网线&#xff0c;有的说需要一根网线&#xff0c;请问到底应该使用一根还是两根呢&#xff1f;”其实这个问题的答案并不是唯一的&#xff0c;使用一根还是两根&#xf…

大数运算#

大数&#xff0c;就是C/C中利用基本类型所不能存储的数字&#xff0c;少则数十位&#xff0c;大则几万位&#xff0c;如何存储和计算大数就是本文的内容。 在C和C中&#xff0c;没有存储大数的数据结构&#xff0c;就算 unsigned long long也只能表示19位的数字  如果我们用d…

linux之缓冲区

行缓冲。在这种情况下&#xff0c;当在输入和输出中遇到换行符时&#xff0c;标准I/O库执行I/O操作。这允许我们一次输出一个字符&#xff0c;但只有在写了一行之后才进行实际I/O操作。当流涉及一个终端时&#xff0c;通常使用行缓冲。 第一个例子&#xff1a;&#xff08;he…

linux之地址空间

程序&#xff1a;一组指令的有效集合。它是静态的&#xff0c;不具有任何的运行意义。程序最终转换为二进制文件。 进程&#xff1a;程序的执行就是进程。可以把它看成独立的程序&#xff0c;在内存中有其对应的代码空间和数据空间。一个进程所拥有的数据和代码只属于自己。进…

C语言随机数生成超详解

1.首先来看一段简单的代码 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h>int main(void) {int i;printf(" %6d\n", rand());system("pause"); }printf(" %6d\n", rand());sys…

模板

模板是泛型编程的基础&#xff0c;即与类型无关的逻辑代码。 利用模板机制可以显著减少冗余信息&#xff0c;能大幅度地节约程序代码&#xff0c;进一步提高面向对象程序的可重用性和可维护性。 模板是实现代码重用机制的一种工具&#xff0c;它可以实现类型参数化&#xff1b;…

linux-----强大的find

我又回来了。哈哈。今天我们来说一下linux中的另一个强大的find命令&#xff0c;灰常重要&#xff0c;灰常重要&#xff0c;灰常重要。显而易见&#xff0c;find就是对某一个文件或者目录的查找喽。但是它的一个显著的特点就是&#xff1a;一般放在后台执行&#xff0c;从整个文…

C语言模拟实现标准库函数之strcmp()

strcmp() C/C函数&#xff0c;比较两个字符串 设这两个字符串为str1&#xff0c;str2&#xff0c; 若str1str2&#xff0c;则返回零&#xff1b; 若str1<str2&#xff0c;则返回负数&#xff1b; 若str1>str2&#xff0c;则返回正数。 char * my_strcmp(char *key,…