我搜索了这个网站以寻找我的问题,但我找不到解决问题的方法。
系统为玩家和计算机提供一个随机数,从2到12。
如果X大于Y,如果X小于Y,并且X与Y相同,则有3个部分。
当我启动.bat
时,它运行良好,我选择Play Game
,我输入投注(例如20),但是当我开始此过程时,窗口关闭,我可以'读它写的东西。我可以看到一些闪烁的文字,我看到了'你的'和'语法',但它消失得很快。
我确信它有效,因为当我删除3 if if if
件事时,它显示我的钱,赌注,统计数据和所有内容,我甚至可以通过我写的'作弊'来减少或增加它。
所以,这是:
set /p setbet=Please type a number to select bet:
if "%setbet%"=="1" set bet=20
if "%setbet%"=="2" set bet=50
if "%setbet%"=="3" set bet=100
if "%setbet%"=="4" set bet=150
if "%setbet%"=="5" set bet=200
if "%setbet%"=="6" set bet=250
if "%setbet%"=="7" set bet=300
echo.
echo Your bet is %bet%.
echo.
pause
cls
set /a money-=bet
set /a playernum=%random% %%12 +2
set /a enemynum=%random% %%12 +2
echo.
echo You roll: %playernum%
echo Enemy rolls: %enemynum%
echo.
if %playernum% LSS %enemynum%
(
echo Enemy wins. Please try again.
echo Your current money is %money%.
echo You lost %bet% money.
echo.
pause
goto INTRO
)
if %enemynum% LSS %playernum%
(
set /a money+=bet*2
echo You win.
echo Your current money is %money%.
echo You won %bet% money.
echo.
pause
goto INTRO
)
if %enemynum% EQU %playernum%
(
set /a money+=bet
echo It's a tie.
echo You won the bet (%bet%), but your money didn't changed.
echo Your money is now %money%.
echo.
pause
goto INTRO
谢谢!
答案 0 :(得分:3)
1)您忘记关闭最后一个括号
2)语法错误在这里:
if %enemynum% EQU %playernum%
(
应该是:if %enemynum% EQU %playernum% (
3)显示money变量的值时会出错。
这是由两个事实造成的: - >在FOR或IF中,变量在命令执行之前“扩展”,而不是在命令执行期间。 (expanded =变量由其值重新计算)
为了更改变量的值并在同一循环中使用它,您应该使用延迟表达式。
您必须在代码的开头编写SETLOCAL ENABLEDELAYEDEXPANSION,并且应该延迟扩展的变量应该用感叹号代替百分号。
因此echo Your current money is %money%.
成为echo Your current money is !money!.
4)如果是平局,你必须逃避括号:
echo You won the bet ^(%bet%^) but your money didn't changed.
5)您没有放置标签INTRO,因此goto INTRO
将失败
答案 1 :(得分:0)
你应该搜索delayed expansion
(setlocal enabledelayedexpansion
)并计算你的括号:每个开括号需要一个结束(我知道有例外,但不是这里)。 if
之后的左括号必须与if
位于同一行。 if
解析器将在此处停止:%bet%)
,因为这是最后一次打开后的第一个结束括号。