
在学习j*ascript并尝试构建一个简单的“剪刀石头布”游戏时,开发者常常会利用confirm和prompt等浏览器内置函数与用户进行交互。然而,这些函数在特定场景下的行为特性,如果处理不当,可能会导致一些意料之外的问题。本教程将针对两个常见问题进行深入分析和修复,以帮助您构建一个更健壮、更完整的游戏。
原始代码在用户点击prompt对话框的“确定”按钮但未输入任何内容时,以及点击“取消”按钮时,都未能正确地引导用户或处理输入。具体表现为:
问题分析:
prompt函数在不同操作下的返回值有所不同:
在J*aScript中,null和空字符串 "" 都被认为是“假值”(falsy values)。因此,原始代码中的 if (startgame) 条件在用户点击“确定”但未输入,或者点击“取消”时,都会被评估为 false,导致逻辑分支未能按预期执行。
解决方案:
我们需要区分用户是点击了“取消”还是点击了“确定”但输入为空。
我们可以通过检查 startgame !== null 来判断用户是否点击了“取消”,然后进一步检查 playerchoice 是否为空或无效。
示例代码:
let playgame = confirm("Do you want to play game?");
if (playgame) {
let startgame = prompt("Choose from r, p, s?");
// 检查用户是否点击了“取消”
if (startgame !== null) { // 用户没有点击“取消”
let playerchoice = startgame.trim().toLowerCase(); // 清除空格并转小写
// 检查玩家输入是否有效
if (playerchoice === "r" || playerchoice === "s" || playerchoice === "p") {
// 游戏核心逻辑
// ... (此处省略,将在问题二中详细说明)
} else {
// 用户输入无效(包括空字符串)
alert("你没有选择 r, p, s");
}
} else {
// 用户点击了“取消”
alert("改变主意了?没关系");
}
} else {
alert("下次再玩吧!");
}注意事项:
原始代码在判断游戏结果时,只覆盖了平局和部分玩家获胜的情况,导致许多对战组合未能正确判定胜负,有时甚至需要重复输入才能看到结果。
Picit AI
免费AI图片编辑器、滤镜与设计工具
172
查看详情
问题分析:
剪刀石头布游戏有九种可能的对战组合(玩家出拳3种 × 电脑出拳3种):
| 玩家出拳 | 电脑出拳 | 结果 |
|---|---|---|
| r (石头) | r (石头) | 平局 |
| r (石头) | p (布) | 电脑获胜 |
| r (石头) | s (剪刀) | 玩家获胜 |
| p (布) | r (石头) | 玩家获胜 |
| p (布) | p (布) | 平局 |
| p (布) | s (剪刀) | 电脑获胜 |
| s (剪刀) | r (石头) | 电脑获胜 |
| s (剪刀) | p (布) | 玩家获胜 |
| s (剪刀) | s (剪刀) | 平局 |
原始代码只处理了平局,以及 playerchoice === "p" && computer === "r" 和 playerchoice === "s" && computer === "p" 这两种玩家获胜的情况。它错误地将 playerchoice === "r" && computer === "s" 判断为电脑获胜,并且遗漏了所有电脑获胜的情况。
解决方案:
我们需要使用 if...else if...else 结构来确保所有可能的对战结果都被正确覆盖,并且逻辑是互斥的。
示例代码:
// ... (接问题一的输入处理代码)
if (playerchoice === "r" || playerchoice === "s" || playerchoice === "p") {
// 电脑随机选择
let compchoiceNum = Math.floor(Math.random() * 3); // 0, 1, 2
let computer;
if (compchoiceNum === 0) {
computer = "r";
} else if (compchoiceNum === 1) {
computer = "p"; // 修正:原来是s,应该对应p
} else { // compchoiceNum === 2
computer = "s"; // 修正:原来是p,应该对应s
}
// 提示电脑的选择
alert(`玩家选择了: ${playerchoice.toUpperCase()}\n电脑选择了: ${computer.toUpperCase()}`);
// 判断胜负
if (playerchoice === computer) {
alert("平局!");
} else if (
(playerchoice === "r" && computer === "s") || // 石头胜剪刀
(playerchoice === "p" && computer === "r") || // 布胜石头
(playerchoice === "s" && computer === "p") // 剪刀胜布
) {
alert("玩家获胜!");
} else {
// 其他所有情况都是电脑获胜
alert("电脑获胜!");
}
} else {
alert("你没有选择 r, p, s");
}
// ... (接问题一的输入处理代码)代码修正说明:
将上述两部分的修复合并,可以得到一个更完善的剪刀石头布游戏代码:
let playgame = confirm("你想玩游戏吗?");
if (playgame) {
let isValidInput = false;
let playerchoice;
// 使用循环确保玩家输入有效
while (!isValidInput) {
let startgame = prompt("请选择:r (石头), p (布), s (剪刀)");
if (startgame === null) { // 用户点击了“取消”
alert("改变主意了?没关系,下次再玩。");
playgame = false; // 退出游戏
break; // 退出循环
}
playerchoice = startgame.trim().toLowerCase();
if (playerchoice === "r" || playerchoice === "s" || playerchoice === "p") {
isValidInput = true; // 输入有效,退出循环
} else {
alert("无效输入。请选择 r, p, 或 s。");
}
}
if (playgame) { // 只有当用户没有取消游戏时才继续
// 电脑随机选择
const compchoiceNum = Math.floor(Math.random() * 3); // 0, 1, 2
let computer;
if (compchoiceNum === 0) {
computer = "r";
} else if (compchoiceNum === 1) {
computer = "p";
} else {
computer = "s";
}
// 提示玩家和电脑的选择
alert(`你选择了: ${playerchoice.toUpperCase()}\n电脑选择了: ${computer.toUpperCase()}`);
// 判断胜负
if (playerchoice === computer) {
alert("平局!");
} else if (
(playerchoice === "r" && computer === "s") || // 石头胜剪刀
(playerchoice === "p" && computer === "r") || // 布胜石头
(playerchoice === "s" && computer === "p") // 剪刀胜布
) {
alert("恭喜你,玩家获胜!");
} else {
alert("很遗憾,电脑获胜!");
}
}
} else {
alert("下次再玩吧!");
}通过本教程,我们解决了J*aScript剪刀石头布游戏中常见的两个问题:prompt输入处理的健壮性以及游戏胜负判断逻辑的完整性。关键在于理解prompt在不同用户操作下的返回值,并利用if...else if...else结构确保所有游戏逻辑分支都被正确覆盖。此外,引入输入验证循环和清晰的提示信息,能够显著提升用户体验和代码的可靠性。这些改进不仅修复了现有问题,也为构建更复杂的交互式Web应用奠定了基础。
以上就是J*aScript剪刀石头布游戏:优化prompt输入处理与完善胜负判断逻辑的详细内容,更多请关注其它相关文章!
# 没关系
# 吉林抖音seo推广外包
# 邢台拼多多网站推广简介
# 大朗塘厦网站建设
# 厦门网站高端建设
# 营销案例推广建议
# 潍坊网站seo技巧
# 怎么找新推广的网站
# 桦南seo推广
# 小狗营销账号怎么做推广
# wordpress seo怎么写
# 请选择
# 将是
# javascript
# 重构
# 为空
# 下次再
# 有什么
# 选择了
# 出拳
# 对战
# 常见问题
# 电脑
# 浏览器
# java
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
tiktok国际版入口_tiktok官网网页版链接
J*aScript对象中深度嵌套URL键的查找与更新策略
Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改
CSS布局中意外顶部空白的调试与解决:深入理解padding-top
Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法
芒果TV官网登录入口 芒果TV官方网站登录入口
J*aScript:从子元素中批量移除特定CSS类
J*aScript实现网页表单实时输入字段比较与验证教程
iPhone14无法连接蓝牙设备如何解决
夸克浏览器资源嗅探怎么用 夸克浏览器网页资源下载技巧【教程】
抖音号已注销怎么解绑企业认证?不解绑企业认证会怎样?
中大网校app做题记录清除方法
英雄联盟争者留名活动介绍
《雅迪智行》用手机开锁方法
解决J*aScript动态图片上传中ID重复问题:在同一页面显示多张独立图片
海棠阅读网页版_进入海棠网页版在线阅读中心
如何通过settings.json个性化您的VS Code体验
《随手记》关闭首页消息推送方法
百度网盘网页入口链接分享 百度网盘官网入口网页登录
火柴人战争网页版在线玩
暴风影音官网正式版_暴风影音手机版官网下载安卓
c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化
Python实战:高效处理实时数据流中的最小/最大值
网易云音乐闹钟铃声设置教程
金牛福袋获取攻略
抖音作品被限流怎么办 抖音内容优化与流量恢复方法
中通快递官网指定查询 中通快递单号查询平台入口
AO3永久镜像入口开放_AO3最新网址兼容所有浏览器
OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南
优酷下载视频的清晰度怎么选_优酷缓存清晰度设置与选择指南
微博网页版访问入口 微博网页版网页端使用指南
Excel如何设置动态下拉菜单_Excel表格下拉选项快速方法
《下一站江湖2》心法融合技巧
在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享
微信客户端如何找回密码_微信客户端忘记密码找回方法
快手缓存清理方法
J*aScript桌面应用_Electron多进程架构实战
猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法
edge浏览器怎么修改语言为中文_Edge界面语言切换教程
《友玩*》创建群聊方法
荣耀Magic7拍照夜景噪点处理_荣耀Magic7相机优化
KFC邀请码怎么使用领额外优惠_KFC邀请码输入方式与额外优惠代码获取方法
汽车之家网页版免费登录_汽车之家官网首页直接进入
小红书如何引流到私信?引流到私信有用吗?
英国搜索:多数英国人认为语言搜索是未来搜索
Python模块化编程:避免循环导入与共享函数的最佳实践
Bootstrap 5导航栏折叠功能失效:数据属性迁移指南
QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务
J*a中的值传递到底指什么_值传递模型在参数传递中的真正含义说明
PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略
2025-09-30
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。