是否有可能使变量每秒下降/上升?

时间:2014-12-19 12:31:21

标签: batch-file windows-8

我正在使用Windows BATCH进行RPG游戏,血液是一个变量。我想补充出血,但我真的不知道如何做到这一点。

我可以做些什么来让%blood%每秒下降?

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

(我知道,这是错的)

2 个答案:

答案 0 :(得分:2)

假设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 :(得分:1)

是的,这是可能的,但您需要一些关于高级批处理编程的知识。

你只需要开始两个主题 一个线程用于等待和接受用户输入,第二个线程用于计算诸如流血之类的事情。

对于同步,你应该看看dbenham的技术 查看参考游戏SNAKE.BAT An arcade style game using pure batch