Batch file 为什么我的CMD/批处理游戏不起作用?
如果要将此代码放到批处理文件中:Batch file 为什么我的CMD/批处理游戏不起作用?,batch-file,cmd,Batch File,Cmd,如果要将此代码放到批处理文件中: 它不会选择一个随机数(或者如果它选择了,它总是有相同的结果) 如果你选择战斗,似乎不会输赢 我一直在自学编码,这是我第一次参加论坛,所以请对我放松:) 这是我的密码: @echo off title template color 0F pause :menu cls echo 1.start echo 2.instructions echo 3.exit set /p answer=Type the number of your option and pres
@echo off
title template
color 0F
pause
:menu
cls
echo 1.start
echo 2.instructions
echo 3.exit
set /p answer=Type the number of your option and press enter
if %answer%==1 goto start_1
if %answer%==2 goto instructions
if %answer%==3 goto exit
:exit
echo thanks for playing
pause
exit /b
:instructions
cls
echo instructions
echo.
echo This game is case-sensitive!
echo Just have fun with it!
pause
goto menu
:start_1
set /a s1=%random% * 3 / 32768 + 1
if %s1%==1 goto prefight_1
if %s1%==2 goto prefight_2
if %s1%==3 goto prefight_3
:prefight_1
cls
echo You have discovered 3 Turtles!
echo They dont see you!
set /p answer=would you like to (1)FIGHT or (2)RUN?
if %answer%==1 goto fight_1
if %answer%==2 goto run_1
:fight_1
set /a f1=%random% * 4 / 32768 + 1
if %f1%==1 goto lose_fight_1
if %f1%==2 goto win_fight_1
if %f1%==3 goto win_fight_1
if %f1%==4 goto win_fight_1
:prefight_2
cls
echo You have discovered 3 Turtles!
echo They see you!
set /p answer=would you like to (1)FIGHT or (2)RUN?
if %answer%==1 goto fight_2
if %answer%==2 goto run_1
:fight_2
set /a f2=%random% * 4 / 32768 + 1
if %f2% gtr 4 goto fight_2
if %f2% lss 1 goto fight_2
if %f2%==1 goto lose_fight_1
if %f2%==2 goto lose_fight_1
if %f2%==3 goto win_fight_1
if %f2%==4 goto win_fight_1
:prefight_3
cls
echo You have discovered 3 Turtles!
echo They see you!
echo They seem angry!
set /p answer=would you like to (1)FIGHT or (2)RUN?
if %answer%==1 goto fight_3
if %answer%==2 goto run_1
:fight_3
set /a f3=%random% * 4 / 32768 + 1
if %f3%==1 goto lose_fight_1
if %f3%==2 goto lose_fight_1
if %f3%==3 goto lose_fight_1
if %f3%==4 goto win_fight_1
:lose_fight_1
cls
echo Sorry,You LOST!
echo Thank you for playing!
echo made by: JEREMY
set /p answer==(1)continue or (2)quit?
if %answer%==1 goto start_1
if %answer%==2 goto menu
pause
:run_1
cls
echo You ran away
pause
goto start_1
伪随机--
我确认%random%由系统时钟驱动--
使用时钟MS获取1到1000之间的随机数
以下是获取毫秒的一种方法:
引入随机性的另一种可能性是启动游戏,然后等待用户输入,即“准备好开始了吗?”,当他们开始时,会在cmd.exe启动后的时间内引入一些随机性。我强烈怀疑您设置了一个变量
random
。如果您已经这样做了,那么您在环境中设置的值将覆盖magic变量
您可以通过set“random=“
通常的做法是在@echo关闭后使用setlocal
。这样,当批处理终止时,对环境所做的任何更改都将被撤消。如果没有它,所做的任何更改将一直保留,直到再次显式更改为止
就我个人而言,我更喜欢
设置/a值=%random%%%limit+1
生成一个值1..limit。如果没有其他原因,打字会更容易
setlocal
命令设置“本地”环境,该环境仅在批处理结束或遇到endlocal
命令之前存在
有关更多信息,请参见提示符中的setlocal/?
我添加了一个win\u-fight\u 1
例程后,您的批处理似乎工作正常
但是请注意,批处理将在set/p answer
=(1)继续或(2)退出?
上呕吐,但删除其中一个=将修复它
除此之外,只需观察您是想进入菜单
还是开始1
和
if %f2% gtr 4 goto fight_2
if %f2% lss 1 goto fight_2
将无效-当然,如果您使用了set/a f2=%random%%%4+1
首先,人类最好在“eq”而不是“==”时阅读。
set/p变量=在清除时更易于使用,因此请像这样使用echo:
:Jelly_Attack_1
cls
echo AH! There's a swarm of angry jellyfish!
echo Act fast!
echo.
echo You can (1) fight or (2) RUN
set /p VARIABLE=
if %VARIABLE% equ 1 goto Fight_Jelly_1
if %VARIABLE% equ 2 goto Run
if %VARIABLE% neq 1 goto TEST
战斗部分应如下所示:
:Fight_Jelly_1
cls
echo The jellyfish are more annoying than harmful!
echo You have a great advantage!
pause
set /a FIGHTNO=%random%
if %FIGHTNO% gtr 4 goto Fight_Jelly_1
if %FIGHTNO% lss 1 goto Fight_Jelly_1
if %FIGHTNO% equ 1 goto FAILED
if %FIGHTNO% equ 2 goto Fight_Jelly_1_Win
if %FIGHTNO% equ 3 goto Fight_Jelly_1_Win
if %FightNO% geq 4 goto Fight_Jelly_1_Win
然后,如果想在获胜时给予金牌或奖励,请执行以下操作:
:Fight_Jelly_1_Win
cls
echo The fight was easy and you found some gold!
pause
set gold=0 (if you didn't have a gold variable)
set /a gold=gold+5 (to add gold)
goto FRAMENAME
我希望我能帮忙 我猜自从控制台启动以来,%随机%种子本身就在时间上。几次cmd的发布和运行echo%random%会导致27000范围内的数字,这似乎奇怪地一致。那么我该怎么办呢?谢谢你的回答!你是说%random%不是真的而且不起作用?他们为什么要这样做!!!无论如何,我的下一步将是制作某种随机时间生成器,这将解决我的%random%问题,对吗?对不起,我是新来的…而且有点慢:帕尔计算机生成的随机数生成器是伪随机的。有时,这是一个优势(例如,为了再现模拟,它有助于操纵骰子),创建一系列真正的随机数而不隐藏由生成机制导致的模式是困难的。好的发电机通常依赖于物理事件,如将无线电静电转换成数字。伪随机通常是足够好的,除非你选择彩票号码,人们可能会投入大量的时间和金钱来寻找伪随机发生器!我不知道!为什么%random%%%限制+1有效?(不是粗鲁,只是好奇!!!)我该如何设置本地设置?另外,谢谢你,我将尝试你的建议:)使用我在开始代码上尝试的%random%%limit+1有效:)谢谢你关于为什么选择fight时它不起作用的任何建议?
:Fight_Jelly_1_Win
cls
echo The fight was easy and you found some gold!
pause
set gold=0 (if you didn't have a gold variable)
set /a gold=gold+5 (to add gold)
goto FRAMENAME