我正在用Windows BATCH進行RPG遊戲,血液是一個變量。我想增加流血,但不知道如何去做。是否有可能讓變量每秒鐘都下降/上升?
我可以做出什麼改變來使%血%每秒下降?
:BLEEDINGHUNGERANDTHIRST
if /a %bleeding% equ 1 set %blood% = 5500 -=1
(我知道,這是錯誤的)
我正在用Windows BATCH進行RPG遊戲,血液是一個變量。我想增加流血,但不知道如何去做。是否有可能讓變量每秒鐘都下降/上升?
我可以做出什麼改變來使%血%每秒下降?
:BLEEDINGHUNGERANDTHIRST
if /a %bleeding% equ 1 set %blood% = 5500 -=1
(我知道,這是錯誤的)
Assumming bleeding
是0(無出血)或1(出血),更(戈爾)或更小(癒合)
set /a "blood-=bleeding"
,使之發生每秒取決於的代碼的其餘部分以及何時和如何調用您的例程。
一個骯髒的方式可能是
:BLEEDINGHUNGERANDTHIRST
if not %bleeding%==0 for /f "tokens=3 delims=:,. " %%a in ("%time::0=:%") do (
if not defined lastBleedingTime (
set "lastBleedingTime=%%a"
set /a "blood-=%bleeding%"
) else (
if not %lastBleedingTime%0==%%a0 (
setlocal enabledelayedexpansion
if !lastBleedingTime! gtr %%a (
set /a "gap=60-lastBleedingTime+%%a"
) else (
set /a "gap=%%a-lastBleedingTime"
)
for /f %%b in ("!gap!") do (
endlocal
set /a "lastBleedingTime=%%a", "blood-=%bleeding%*%%b"
)
)
)
)
這將使用最後一次通話和現在之間的時間差。取決於最後一次檢查所用的秒數,出血量會從計數器中減去。爲此,您需要確保您在一分鐘內(最好至少每秒)多次致電該程序,並在玩家停止出血時使用set "lastBleedingTime="
。
是的,這是可能的,但你需要了解高級批處理編程一些knowlegde。
您只需啓動兩個線程。
一個線程用於等待並接受用戶輸入,第二個線程用於計算出血等事情。
對於同步,你應該看看dbenham的技術。
參見參考遊戲SNAKE.BAT An arcade style game using pure batch
'if/a'不是有效的語法,並且'set%blood%= 5500 - = 1'絕對是錯誤的 – jeb
批處理是一個糟糕的平臺,用於開發任何複雜的遊戲,但它可能是一個有趣的挑戰。任何值得玩的角色扮演遊戲都是一項複雜的計劃,需要大量精心策劃。批量處理使得任務變得更加困難,需要大量的奧術知識和大量的信息。批量實時RPG在理論上是可行的,但從實際角度來看,我認爲你不應該嘗試它。如果你堅持用批量開發RPG,那麼我強烈建議你做一個基於回合的遊戲,而不是實時的。 – dbenham