2016-12-01 54 views
1

我一直在編程一個基於文本的口袋妖怪戰鬥,它不斷告訴我我有一個失蹤的操作員。這裏是腳本縮小到。缺少批量操作員,不知道爲什麼

set /a attacks=%random% * 3/32768 + 1 
if %attacks%==1 set /a %ph%==%ph% - %random% * 10/32768 + 1 
if %attacks%==2 set /a %ph%==%ph% - %random% * 30/32768 + 1 
if %attacks%==3 set /a %ph%==%ph% - %random% * 50/32768 + 1 
if %attacks%==3 echo Squirtle used water bolt! 
if %attacks%==2 echo Squirtle used Tackle! 
if %attacks%==1 echo Squirtle used Water Pulse! 

任何幫助表示讚賞!謝謝!

+4

而不是'set/a%ph%=='你應該有'set/a ph =' – SomethingDark

+1

@SomethingDark:這比看起來更重要。即使'ph'有一個值,數字或字符串,通常'set/a%var%='似乎是無效的,所以你顯然不能使用間接的'set/a',儘管它是邏輯上的一個有效的操作。 – Magoo

+1

@Magoo:如果'var'變量包含一個有效的變量名,那麼'set/a%var%= ...'是一個完全有效的操作。 – Aacini

回答

0

正如SomethingDark所說,你會想要使用set /a ph=。請注意,有一個等號表示「獲取值」,而不是兩個等號,與if一起使用,意思是「等於?」。 (作爲比較)。另外,通過設置%ph%=...,您正在設置的變量的變量ph的名稱相同。換句話說,如果ph設置爲1,那麼您將爲數學運算的結果設置一個名爲1的變量。或者,如果ph是空的,那麼您可能會丟失操作數(我認爲這就是您的意思)。無論哪種方式,我肯定這不是你想要的。

這種格式將工作:

if %attacks%==1 set /a ph=%ph% - %random% * 10/32768 + 1 

我有一對夫婦更多的建議。首先,它可能是一種風格選擇,但我喜歡使用隨機的mod(%)運算符。它使閱讀更容易。像這樣:

set /a ph=%ph% - %random% %% 10 + 1 

這(該%% 10一部分)拾取0和9之間的一個數,然後+ 1使得它爲1〜10,使用模運算(這是除以數,然後返回餘數)。閱讀IMO更容易。請注意,您只需要批處理文件中的雙重%%。在cmd中,只需使用%

其次,當與if進行比較時,如果其中一個操作數爲空,它將終止您的腳本。相反,用引號包圍操作數,所以即使是一個空變量也不會破壞腳本。如果你的變量永遠不是空的,那麼它就不是必須的,但可能值得去做。

if "%attacks%"=="3" echo Squirtle used water bolt! 

我希望有幫助。