我一直在尝试批量制作石头剪刀布游戏。到目前为止,脚本运行,我可以让它与自己对战或与我对战(我需要将 B var 从 /A 和随机数更改为 /P 并有用户输入)。
问题是,在几轮(每次不同的数量)之后,脚本崩溃了,我没有时间阅读最后一行文本(这将帮助我找到错误)。我尝试过 ECHO ON 和 OFF,我还尝试从不同的 DOS 窗口运行“RPS.bat >> log.txt”(选择了正确的目录)。这确实记录了所有内容,直到它崩溃,也没有得到最后一行。
我已经翻了好几次了,但我找不到错误... :(
我用 PHP 制作了同样的游戏,目前没有错误......(我知道这是一种完全不同的语言)
所以这是我的脚本:
@ECHO OFF
:TOP
SET /A AWON=0
SET /A BWON=0
SET /A NWON=0
:GAME
SET /A A=%RANDOM% %% 3 + 1
SET /P B=Number from 1 to 3
IF %A% EQU 1 (
GOTO A1
) ELSE IF %A% EQU 2 (
GOTO A2
) ELSE IF %A% EQU 3 (
GOTO A3
) ELSE (
GOTO GAME
)
:A1
IF %B% EQU 1 (
GOTO DRAW
) ELSE IF %B% EQU 2 (
GOTO BWIN
) ELSE IF %B% EQU 3 (
GOTO AWIN
) ELSE (
GOTO GAME
)
:A2
IF %B% EQU 1 (
GOTO ARAW
) ELSE IF %B% EQU 2 (
GOTO DRAW
) ELSE IF %B% EQU 3 (
GOTO BWIN
) ELSE (
GOTO GAME
)
:A3
IF %B% EQU 1 (
GOTO BWIN
) ELSE IF %B% EQU 2 (
GOTO AWIN
) ELSE IF %B% EQU 3 (
GOTO DRAW
) ELSE (
GOTO GAME
)
:AWIN
SET /A AWON=%AWON% + 1
ECHO -------------------------------------------------------------------------------
ECHO A won this round!
ECHO ---
ECHO A won: %AWON%
ECHO B won: %BWON%
ECHO Draw: %NWON%
PAUSE
GOTO GAME
:BWIN
SET /A BWON=%BWON% + 1
ECHO -------------------------------------------------------------------------------
ECHO B won this round!
ECHO ---
ECHO A won: %AWON%
ECHO B won: %BWON%
ECHO Draw: %NWON%
PAUSE
GOTO GAME
:DRAW
SET /A NWON=%NWON% + 1
ECHO -------------------------------------------------------------------------------
ECHO This round was a draw!
ECHO ---
ECHO A won: %AWON%
ECHO B won: %BWON%
ECHO Draw: %NWON%
PAUSE
GOTO GAME
感谢格雷帮助我解决我的愚蠢错误^^
还要感谢您的脚本,但如果我在这里没有遗漏什么,那就不太正确了。
@ECHO OFF
:GAME
SET /P A=A:
SET /P B=B:
SET /A WINNER=(%A%-%B%) %% 3
ECHO %A% - %B% = %WINNER%
IF %WINNER% EQU 1 (
echo A WON!
) ELSE (
IF %WINNER% EQU 0 (
echo DRAW!
) ELSE (
echo B WON!
))
PAUSE
GOTO GAME
运行该脚本(格雷脚本的“缩短”版本)。使用我的“表格”中的变量,您可以看到通过选择 1(摇滚),A 无法获胜(A=1 vs B=3 应该是:A WON)。您对如何解决此问题有任何想法吗?我猜是“硬编码”?A=1 和 B=3 时的解决方案最好?(我的意思是当这些是值时,“正常”脚本不适用,而是一个特殊的代码给出了结果)。
在我的表格中,如果最后一个符号是“+”,则脚本给出正确答案,如果最后一个符号是“-”,则脚本给出错误答案。
ITEM VALUE
ROCK 1
PAPER 2
SCISSORS 3
A - B = WINNER
1 - 1 = 0 DRAW +
1 - 2 = -1 B WON +
1 - 3 = -2 A WON -
2 - 1 = 1 A WON +
2 - 2 = 0 DRAW +
2 - 3 = -1 B WON +
3 - 1 = 2 B WON +
3 - 2 = 1 A WON +
3 - 3 = 0 DRAW +
另外,如果您有任何关于如何保持脚本更整洁和使用更少行代码来完成相同工作的提示,我很乐意倾听!
提前致谢!- 埃斯彭