Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 蝙蝠游戏。使用set/p添加计时器_Batch File - Fatal编程技术网

Batch file 蝙蝠游戏。使用set/p添加计时器

Batch file 蝙蝠游戏。使用set/p添加计时器,batch-file,Batch File,我正在制作一个.bat游戏,目前在输入命令时,代码是 set /p command= 我想知道的是,你是否有输入命令的时间限制。例如,如果你与一名警卫作战,而你在5秒钟内没有下达命令,警卫就会攻击你 这不是什么迫切需要的东西,我只是想知道更多关于我的限制,我想我知道答案无论如何(答案是你不能) 谢谢可以将批处理文件与其他文件(例如c#)混合使用。现在几乎所有的windows pc都安装了.net,这应该不是什么大问题 在下面的示例中,有3秒的延迟,用户可以输入一些输入。如果未输入任何内容,程序

我正在制作一个.bat游戏,目前在输入命令时,代码是

set /p command=
我想知道的是,你是否有输入命令的时间限制。例如,如果你与一名警卫作战,而你在5秒钟内没有下达命令,警卫就会攻击你

这不是什么迫切需要的东西,我只是想知道更多关于我的限制,我想我知道答案无论如何(答案是你不能)


谢谢

可以将批处理文件与其他文件(例如c#)混合使用。现在几乎所有的windows pc都安装了.net,这应该不是什么大问题

在下面的示例中,有3秒的延迟,用户可以输入一些输入。如果未输入任何内容,程序将继续,但
%result%
将为空

/* 2>NUL
@echo off 
REM cls
set WinDirNet=%WinDir%\Microsoft.NET\Framework
IF EXIST "%WinDirNet%\v2.0.50727\csc.exe" set csc="%WinDirNet%\v2.0.50727\csc.exe"
IF EXIST "%WinDirNet%\v3.5\csc.exe" set csc="%WinDirNet%\v3.5\csc.exe"
IF EXIST "%WinDirNet%\v4.0.30319\csc.exe" set csc="%WinDirNet%\v4.0.30319\csc.exe"
%csc% /nologo /out:"%~0.exe" %0



echo enter some text:

set result=
for /F "tokens=*" %%a in ('"%~0.exe"') do set result=%%a

echo you have entered:%result%




del "%~0.exe"
goto :eof
*/
using System;
using System.Text;
using System.IO;
using System.Threading;

class Program
{
    static void Main (string[] args)
    {
        byte[] buffer=new byte[80];

        using (Stream s = Console.OpenStandardInput ()) {
            ManualResetEvent e=new ManualResetEvent(false);
            s.BeginRead (buffer, 0, buffer.Length, x => e.Set(), null);

            e.WaitOne (3000);
        }

        Console.WriteLine (Encoding.UTF8.GetString (buffer));
    }
}
通过这种方式,您可以对批处理文件进行编程,并将c#用于批处理文件中不可能的所有内容。注意,此代码可能有一些改进

有关c#代码的改进,请参阅


也可以仅通过批处理完成

您可以使用
start/b

如果此线程使用
set/p
等待用户输入,则主线程不受影响。
如果用户输入文本并将其移动到文件中,则此示例将等待5秒钟,以便第一个线程可以访问它

@echo off
setlocal EnableDelayedExpansion
if "%1" NEQ "" goto %1

del enter.tmp 2>nul >nul
start /b cmd /c %0 :secondThread

:FirstThread
set n=0
echo Enter Text (5 seconds timeout):

:loop
set /a n+=1
ping -n 2 localhost > nul
if !n! LSS 5 (
    if not exist entER.tmp goto :loop
    < Enter.tmp (
        set /p input=
    )
    echo !input!
) ELSE (
    echo Timeout for input
)

exit /b

:secondThread
set /p var=
> enter.tmp echo !var!
exit /b
@echo关闭
setlocal EnableDelayedExpansion
如果“%1”NEQ“转到%1
del enter.tmp 2>nul>nul
开始/b命令/c%0:第二个线程
:第一个线程
设置n=0
回显输入文本(5秒超时):
:循环
设置/a n+=1
ping-n2 localhost>nul
如果!NLSS 5(
如果不存在,则输入.tmp转到:循环
enter.tmp echo!瓦尔!
退出/b

批处理文件功能可以借助辅助程序来增加,如果用汇编语言编写,其中一些程序可能非常简单:

@ECHO OFF
(
ECHO A100
ECHO MOV AH,B
ECHO INT 21
ECHO MOV AH,4C
ECHO INT 21
ECHO/
ECHO RCX
ECHO 8
ECHO W
ECHO Q
) | DEBUG CHKKEY.COM
上一个批处理文件创建8字节长的CHKKEY.COM辅助程序,用于检查是否按下某个键,如果按下,则返回255的错误级别,如果没有,则返回零。例如:

:waitforkey
echo Waiting for a key to be pressed...
chkkey
if not errorlevel 1 goto waitforkey
echo A key was pressed!
如果您没有DEBUG.COM程序,您可以在web上获得它。这样,要等待钥匙5秒钟:

for /F "tokens=3 delims=:." %%a in ("%time%") do set /A second=%%c+5
if %second% geq 60 set /A second-=60
:waitforkey
for /F "tokens=3 delims=:." %%a in ("%time%") do if %%c == %second% goto timeexceeded
chkkey
if not errorlevel 1 goto waitforkey
set /P command=

如果在MOV AH,B指令中将B值更改1,则会读取一个键,并以ERRORLEVEL返回其ASCII码;此功能允许读取单个击键并立即进行处理。如果值为8,则屏幕上不显示按键读取;这允许处理键盘的任意键,甚至是返回两个值的功能键和特殊键:第一个值为零(表示特殊键),第二个值表示按下的键。例如,F1键返回0和59。

< P>如果命令有一个独特的起始字母,也许你可以考虑使用这个命令?(在Windows 7中再次可用)

如果仅使用批处理脚本,则不可用。解决这个问题的方法是让批处理脚本调用一个不是用MS批处理脚本编写的计时器程序?2011年,你正在制作一个批处理文件游戏?@Greg是的,我正在制作,而且进展顺利。请随便提建议。哦,它会在你杀了守卫后崩溃,因为这不是我给你的努力道具。但是,仍然可能有更好的编程语言…此方法的问题是第二个线程接收输入焦点,因此要结束它必须读取输入。如果第一个线程在5秒后继续并执行另一个START/B,则将创建第三个线程,该线程将接收输入焦点(使第二个线程无法终止),依此类推。