2014-12-19 70 views
0

我正在用Windows BATCH進行RPG遊戲,血液是一個變量。我想增加流血,但不知道如何去做。是否有可能讓變量每秒鐘都下降/上升?

我可以做出什麼改變來使%血%每秒下降?

:BLEEDINGHUNGERANDTHIRST 
if /a %bleeding% equ 1 set %blood% = 5500 -=1 

(我知道,這是錯誤的)

+0

'if/a'不是有效的語法,並且'set%blood%= 5500 - = 1'絕對是錯誤的 – jeb

+1

批處理是一個糟糕的平臺,用於開發任何複雜的遊戲,但它可能是一個有趣的挑戰。任何值得玩的角色扮演遊戲都是一項複雜的計劃,需要大量精心策劃。批量處理使得任務變得更加困難,需要大量的奧術知識和大量的信息。批量實時RPG在理論上是可行的,但從實際角度來看,我認爲你不應該嘗試它。如果你堅持用批量開發RPG,那麼我強烈建議你做一個基於回合的遊戲,而不是實時的。 – dbenham

回答

2

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="

+1

不錯,但隨後會有用戶輸入 – jeb

+1

@jeb,'選擇'與超時和默認隱藏選項的小問題?第二個線程?,...我不知道OP代碼是如何工作的或者它是從用戶請求的。這個例子只是做了基本的計算。我沒有這個問題所需的知識。無論如何,好點。 –

+0

@MCND我不知道如何讓它實時下降,我想這就是我想要的。它不會真的要求輸入,只是在沒有用戶做任何事情的情況下下降。 – lolwut22

1

是的,這是可能的,但你需要了解高級批處理編程一些knowlegde。

您只需啓動兩個線程。
一個線程用於等待並接受用戶輸入,第二個線程用於計算出血等事情。

對於同步,你應該看看dbenham的技術。
參見參考遊戲SNAKE.BAT An arcade style game using pure batch

+1

恩 - 這對於那些已經在'set'失敗的人來說很難。^^ – Stephan

+1

@Stephan是的,確實如此。因此,我提到「你需要一些knowlegde」部分:-) – jeb

+0

@Stephan我用這種語言幾乎失敗了所有的東西,不知道爲什麼我想用它做RPG。一切似乎工作,雖然...奇怪 – lolwut22

相關問題