You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化Batch编写的石头剪刀布游戏的胜负判断逻辑?

优化Batch石头剪刀布游戏代码

这里提供一种更简洁且健壮的实现方案,解决你原代码中大量重复判断的问题:

@echo off
color f
setlocal enabledelayedexpansion
:: 定义选项与名称的映射
set "choice[0]=paper"
set "choice[1]=scissors"
set "choice[2]=rock"

echo welcome to rock paper scissors
:LOOP
cls
echo 0=(paper) 1=(scissors) 2=(rock)
set "input="
set /p input=select one of the 3: 

:: 输入合法性校验
if not defined input goto LOOP
echo %input% | findstr /r "^[0-2]$" >nul || (
    echo 请输入0、1或2中的有效数字!
    pause >nul
    goto LOOP
)

:: 生成电脑随机选择
set /a cpu=%random% %%3
echo 电脑选择了: !choice[%cpu%]!

:: 数学公式一键判断胜负
set /a result=(%input% - %cpu% + 3) %%3
if %result% equ 0 (
    echo 平局!
) else if %result% equ 1 (
    echo 你赢了!
) else (
    echo 你输了!
)

pause >nul
goto :LOOP

关键优化点说明

  • 简化胜负判定:
    利用数学运算(input - cpu + 3) %%3的结果直接判断:

    • 结果为0:双方选择相同,平局
    • 结果为1:玩家获胜(符合剪刀赢布、布赢石头、石头赢剪刀的规则)
    • 结果为2:玩家失败
      彻底替代原代码中6种胜负组合的重复if嵌套。
  • 严谨输入校验:

    • 清空input变量避免用户直接回车时的旧值残留
    • 使用findstr正则验证输入是否为0-2的纯数字,非法输入直接引导重新选择,解决原代码输入无效值时的逻辑混乱。
  • 模块化选项管理:
    用数组存储选项名称,电脑选择后直接通过变量索引输出,避免重复的if判断,后续修改选项名称或扩展规则更便捷。

  • 延迟扩展支持:
    开启enabledelayedexpansion确保代码块中动态变量(如!choice[%cpu%]!)能正确读取。

内容的提问来源于stack exchange,提问作者Cip0llø

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:45:29