HTML+JS谁是卧底游戏

先说一句:一段时间没发文章,好多僵尸粉关注我,这CSDN😠

主要功能

  1. 玩家设置:在游戏开始前,输入总人数、卧底人数和白板人数。系统会自动计算出剩下的平民人数,并随机分配身份。

  2. 身份查看:在游戏开始后,所有玩家的身份都会以卡片形式呈现。你可以点击卡片来查看自己的身份,内容会显示“你是白板”或者对应的词语。

  3. 判决系统:所有玩家看完自己的身份后,可以通过“判决”按钮来猜测谁是卧底或白板。你输入认为是卧底或白板的玩家编号,无论猜测正确与否,都会减少一次判决机会。

  4. 剩余机会提示:每次判决后,系统会自动计算并提示你剩余的判决机会

  5. 胜负判定:如果你在机会用完前成功找出了所有的卧底和白板,游戏会提示平民获胜。如果机会用尽而卧底或白板还没被全部找出,游戏会提示失败。

效果图

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

源代码

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>谁是卧底</title><style>body {font-family: Arial, sans-serif;display: flex;flex-direction: column;align-items: center;justify-content: center;height: 100vh;margin: 0;background-color: #1c1c2b;color: white;}.input-container {background-color: #2d2d44;padding: 20px;border-radius: 15px;box-shadow: 0 10px 25px rgba(0,0,0,0.3);margin-bottom: 20px;text-align: center;}h1 {margin-bottom: 15px;font-size: 24px;font-weight: bold;}label {display: block;margin-bottom: 10px;font-size: 18px;}input[type="number"] {width: 100px;padding: 8px;margin-bottom: 15px;border-radius: 10px;border: none;box-shadow: 0 5px 15px rgba(0,0,0,0.1);text-align: center;}button {padding: 10px 20px;border: none;border-radius: 15px;background-color: #007BFF;color: white;font-size: 16px;cursor: pointer;box-shadow: 0 5px 15px rgba(0,0,0,0.3);}.card-container {position: relative;width: 200px;height: 300px;perspective: 1000px;}.card {width: 100%;height: 100%;background-color: orange;border-radius: 15px;box-shadow: 0 5px 15px rgba(0,0,0,0.3);position: absolute;top: 0;left: 0;transition: transform 0.6s;transform-style: preserve-3d;cursor: pointer;}.card.flipped {transform: rotateY(180deg);}.card-content {position: absolute;width: 100%;height: 100%;backface-visibility: hidden;display: flex;align-items: center;justify-content: center;font-size: 24px;color: white;}.card-content.back {transform: rotateY(180deg);background-color: #FFEB3B;border-radius: 15px;}.judge-button {display: none;padding: 20px 40px;border: none;border-radius: 25px;background-color: #FFD700;color: black;font-size: 20px;cursor: pointer;margin-top: 20px;box-shadow: 0 5px 15px rgba(0,0,0,0.3);}</style>
</head>
<body><div class="input-container"><h1>谁是卧底游戏</h1><label for="totalPlayers">总人数 (2-10):</label><input type="number" id="totalPlayers" min="2" max="10"><label for="undercoverCount">卧底人数:</label><input type="number" id="undercoverCount" min="1"><label for="blankCount">白板人数:</label><input type="number" id="blankCount" min="0"><p></p><button onclick="startGame()">开始游戏</button></div><div class="card-container" id="cardContainer"><!-- 卡片将会在这里生成 --></div><button class="judge-button" id="judgeButton" onclick="judge()">判决</button><script>const wordsPairs = [['苹果', '香蕉'],['水泥', '瓷砖'],['博客园', 'CSDN']];let totalPlayers, undercoverCount, blankCount, civilians, undercovers, blanks;let remainingChances;let cardsFlipped = 0;function startGame() {totalPlayers = parseInt(document.getElementById('totalPlayers').value);undercoverCount = parseInt(document.getElementById('undercoverCount').value);blankCount = parseInt(document.getElementById('blankCount').value);if (isNaN(totalPlayers) || isNaN(undercoverCount) || isNaN(blankCount) || totalPlayers < 2 || totalPlayers > 10 || undercoverCount > totalPlayers || blankCount > totalPlayers ||blankCount > undercoverCount || (undercoverCount + blankCount) > totalPlayers) {alert('请检查输入,确保所有数值合理!');return;}civilians = totalPlayers - undercoverCount - blankCount;// 设置判决机会 = 白板数 + 卧底数 + 1remainingChances = blankCount + undercoverCount + 1;const wordPair = wordsPairs[Math.floor(Math.random() * wordsPairs.length)];undercovers = Array(undercoverCount).fill(wordPair[1]);blanks = Array(blankCount).fill('白板');const civiliansArr = Array(civilians).fill(wordPair[0]);const words = [...undercovers, ...blanks, ...civiliansArr].sort(() => Math.random() - 0.5);document.querySelector('.input-container').style.display = 'none';generateCards(words);}function generateCards(words) {const cardContainer = document.getElementById('cardContainer');cardContainer.innerHTML = '';words.forEach((word, index) => {const card = document.createElement('div');card.className = 'card';card.setAttribute('data-word', word);card.onclick = () => flipCard(card, index);const front = document.createElement('div');front.className = 'card-content front';front.innerText = '点击查看';const back = document.createElement('div');back.className = 'card-content back';back.innerText = word === '白板' ? '你是白板' : word;card.appendChild(front);card.appendChild(back);cardContainer.appendChild(card);card.style.zIndex = words.length - index;card.style.top = `${index * 5}px`;card.style.left = `${index * 5}px`;});}function flipCard(card, index) {if (card.classList.contains('flipped')) return;card.classList.add('flipped');cardsFlipped++;setTimeout(() => {card.style.display = 'none';if (cardsFlipped === totalPlayers) {document.getElementById('judgeButton').style.display = 'block';}}, 1500);}function judge() {const guess = prompt('请输入你认为的卧底或白板编号(1-' + totalPlayers + '):');const guessIndex = parseInt(guess) - 1;if (isNaN(guessIndex) || guessIndex < 0 || guessIndex >= totalPlayers) {alert('无效的编号,请重新输入!');return;}const word = document.querySelectorAll('.card')[guessIndex].getAttribute('data-word');if (word === '白板' || word === undercovers[0]) {alert(`你找到了${word === '白板' ? '白板' : '卧底'},他们被淘汰了!`);document.querySelectorAll('.card')[guessIndex].remove();if (word === '白板') {blanks.pop();} else {undercovers.pop();}} else {alert('你猜错了!');}remainingChances--;alert('剩余机会: ' + remainingChances);if (undercovers.length === 0 && blanks.length === 0) {alert('平民获胜!');resetGame();} else if (remainingChances === 0) {alert('游戏失败!');resetGame();}}function resetGame() {document.querySelector('.input-container').style.display = 'block';document.getElementById('cardContainer').innerHTML = '';document.getElementById('judgeButton').style.display = 'none';cardsFlipped = 0;}</script></body>
</html>

游戏规则

1. 角色分配

  • 平民:多数玩家会被分配到同一个词语,这些玩家就是平民。平民的目标是找出谁是卧底。
  • 卧底:少数玩家(通常只有一人)会被分配到一个与平民词语类似但不同的词语。卧底的目标是混淆视听,让自己不被平民发现。
  • 白板(可选):某些版本中还有“白板”角色,他们不会得到任何词语,只能靠别人的描述来猜测其他人的身份。

2. 游戏流程

  • 第一轮:描述词语 每个玩家依次用一句话描述自己的词语,注意不能太直白,也不能过于模糊。平民需要小心描述,确保卧底不会轻易发现他们的词语,但又要让其他平民认出自己是同伴。卧底则需要假装自己是平民,在描述时尽量不暴露自己的词语。
  • 讨论与投票 一轮描述结束后,玩家可以互相讨论,并试图找出谁的描述最可疑。然后,所有玩家进行投票,选出他们认为是卧底的玩家。得票最多的玩家会被淘汰,并揭示自己的身份。
  • 下一轮 剩下的玩家继续进行描述和投票,直到所有的卧底被找出(平民获胜)或平民人数与卧底人数相等(卧底获胜)。

3. 胜负判定

  • 平民获胜:如果所有的卧底被投票淘汰,平民获胜。
  • 卧底获胜:如果卧底成功存活到剩下人数与卧底人数相等,卧底获胜。

4. 游戏策略

  • 平民需要通过描述、观察和推理来识别卧底的微妙差异。
  • 卧底则需要运用策略来隐藏自己的身份,并尽量让平民之间互相怀疑。

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

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

相关文章

DHCP协议-CSP认证

文章目录 DHCP协议 DHCP协议 stringstream的用法 应用实践 #include<bits/stdc.h>using namespace std;signed main() {string s"wo shi wwl, also wlw";stringstream ss;ss<<s;while(ss>>s){if(s[s.size()-1],) s[s.size()-1] ;cout<<s<…

授权cleanmymac访问全部磁盘 Mac授权访问权限 cleanmymac缺少权限

CleanMyMac是Mac系统下的一款专业的苹果电脑清理软件&#xff0c;同时也是一款优秀的电脑系统管理软件。它能有效清理系统垃圾&#xff0c;快速释放磁盘内存&#xff0c;缓解卡顿现象&#xff0c;保障系统顺畅地运行。 全磁盘访问权限&#xff0c;就好比机场内进行的安全检查。…

【AD9361 数字基带】多片基带内FPGA补偿 I/Q Rotation

I/Q 旋转 Rotation 在许多多通道射频系统中&#xff0c;如 AD-FMCOMMS5&#xff0c;甚至在 AD-FMCOMMS2、AD-FMCOMMS3 上&#xff0c;都需要测量或校正两个复数 &#xff08;I/Q&#xff09; RF 信号之间的相位差。 从纯粹的数学描述来看&#xff0c;单个正弦波没有相位&…

Godot《躲避小兵》实战之游戏开始界面制作

我们的游戏还需要用户可操作的界面&#xff0c;比如开始游戏&#xff0c;退出以及显示分数等UI界面。 创建新场景&#xff0c;点击“其他节点”按钮&#xff0c;然后添加一个 CanvasLayer 节点并命名为 HUD。“HUD”是“heads-up display”&#xff08;游戏信息显示&#xff0…

计算机网络——运输层(进程之间的通信、运输层端口,UDP与TCP、TCP详解)

运输层协议概述 进程之间的通信 运输层向它上面的应用层提供通信服务。 当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时&#xff0c;都要使用协议栈中的运输层&#xff1b;而网络核心部分中的路由器在转发分组时只用到下三层的功能。 Q1&#xff1a;我们…

最全Java集合分片处理!!! Java 中 List 分片的 7种方法

文章目录 Java 中 List 分片的 7种方法业务需求背景实现方法方法一&#xff1a;最基本的 for 循环实现方法二&#xff1a;利用 List 的 subList() 方法方法三&#xff1a;stream 流操作 filter 方法过滤方法四&#xff1a;使用 Google Guava 的 Lists.partition 方法方法五&…

【计算机三级-数据库技术】操作题大题(第六套)

第六套操作题 第46题 假定要建立一个学校科研项目管理的信息系统&#xff0c;需要管理如下信息&#xff1a; 教师&#xff1a;教师编号、教师姓名&#xff1b; 项目&#xff1a;项目编号、项目名称、资助额&#xff1a; 学生&#xff1a;学生编号、学生姓名、学位&#xff0c…

跟李沐学AI:转置卷积

定义 卷积不会增大输入的高宽&#xff0c;通常卷积层后高宽不变或减半。转置卷积则可以用来增大输入的宽高。 转置卷积是一种卷积&#xff0c;它将输入和核进行了重新排列&#xff0c;通常用作上采用。 如果卷积将输入从变为&#xff0c;同样超参数的情况下&#xff0c;转置…

集团数字化转型方案(十二)

集团数字化转型方案致力于通过构建一个集成化的数字平台&#xff0c;全面应用大数据分析、人工智能、云计算和物联网等前沿技术&#xff0c;推动业务流程、管理模式和决策机制的全面升级。该方案将从业务流程的数字化改造开始&#xff0c;优化资源配置&#xff0c;提升运营效率…

yolov8 出现loss 为nan

原因&#xff1a; 混合精度训练是一种通过同时使用 FP16 和 FP32 精度来加速深度学习训练的技术。它可以在不损失模型性能的情况下,显著减少训练时间和内存使用。下面是关于混合精度训练的一些解释: 1. 原理 混合精度训练利用了 FP16 (16位浮点)和 FP32 (32位浮点)的不同特性。…

每日一题——贪心算法

860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; 这道题目乍一看可能没有什么头绪&#xff0c;但是当你仔细想想就会明白一个道理&#xff0c;那就是&#xff0c;《论电子支付的重要性》哈哈哈哈&#xff0c;言归正传&#xff0c;其实很简单无非就是找钱&#xff0c;…

Alembic:python中数据库迁移的瑞士军刀

Alembic 简介 Alembic 是由 SQLAlchemy 的创始人 Mike Bayer 设计的一个数据库迁移工具。它不仅支持自动迁移脚本生成&#xff0c;还允许开发者手动编辑迁移脚本来满足特定的需求。Alembic 通过提供一个环境来跟踪数据库模式的变更历史&#xff0c;确保数据库的版本与应用代码…

linux内核 时间同步机理分析笔记

1 内核时间管理的相关组件 1.1 clocksource 和 clock_event_device 1.1.1 简介 外部时钟设备的主要作用是提供精确的计时功能和定期产生中断的功能&#xff0c;内部把提供精确计时的功能抽象为clocksource对象&#xff0c;把定期产生中断的功能抽象为clock_event_device对象…

《黑神话:悟空》全网互动量超1.8亿,百万天命人重走西游

四年磨一剑&#xff0c;一剑破长空。 8月20日10点&#xff0c;《黑神话&#xff1a;悟空》正式开服&#xff0c;同时轰动了国内外游戏圈子&#xff0c;冲顶国内各大社媒平台&#xff0c;一天包揽120个热搜。上线之后&#xff0c;《黑神话&#xff1a;悟空》火速登顶Steam热销游…

克服编程学习中的挫折感:从心态到策略的全方位指南

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《热点时事》 期待您的关注 目录 引言 一、心态调整&#xff1a;积极乐观&#xff0c;合理期望 二、学习方法&#xff1a;有效策…

一起学Java(3)-Java项目构建工具Gradle和Maven场景定位和优缺点对比

在第一步创建的项目&#xff08;java-all-in-one&#xff09;项目里&#xff0c;我们提到了使用Gradle作为项目构建工具。看到这里&#xff0c;不知道你是否有疑惑&#xff0c;什么是项目构建工具。Java项目常用构建工具有哪些&#xff1f;都有什么特点&#xff1f; 带着疑惑&…

【教程】Ubuntu给pycharm添加侧边栏快捷方式

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 以下教程不仅限于pycharm&#xff0c;其他软件也是一样操作 1、进入到pycharm的目录&#xff0c;先通过命令行打开pycharm&#xff1a; ./bin/pycharm…

[Leetcode 61][Medium]-旋转链表

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题链接 二、整体思路 首先发现这样的规律&#xff1a;当k大于等于链表中节点总数n时&#xff0c;会发现此时旋转后的链表和kk%n时的旋转后的链表一样。同时对于特殊情况n0和n1时&#xff0c;无论k的值为多少都可以…

论文翻译:Universal and Transferable Adversarial Attacks on Aligned Language Models

Universal and Transferable Adversarial Attacks on Aligned Language Models https://arxiv.org/pdf/2307.15043v2 通用且可转移的对抗性攻击对齐语言模型 文章目录 通用且可转移的对抗性攻击对齐语言模型摘要1 引言2 一个针对LLMs的通用攻击2.1 产生肯定回应2.2 贪婪坐标梯…

Prometheus Alertmanager告警之邮件、钉钉群、企业微信群机器人报警

文章目录 一、部署alertmanager相关组件1.alertmanager-config2.alertmanager-message-tmpl3.alertmanager 二、调试邮件告警三、钉钉群/企业微信群 报警3.1添加钉钉群机器人3.2添加企业微信群机器人3.3部署alertmanager-webhook-adaptermessage-tmplalertmanager-webhook-adap…