我正在制作一个基于C#控制台文本的游戏,因为我希望它看起来更老派,我添加了一个效果,以便任何文本(描述,教程,对话)看起来都像是在输入,并且它看起来像这样:
public static int pauseTime = 50;
class Writer
{
public void WriteLine(string myText)
{
int pauseTime = MainClass.time;
for (int i = 0; i < myText.Length; i++)
{
Console.Write(myText[i]);
System.Threading.Thread.Sleep(pauseTime);
}
Console.WriteLine("");
}
}
但后来我认为这可能很烦人,我想添加一个选项来跳过效果并立即显示所有文本。所以我选择了Enter键作为“跳过”键,它会立即显示文本,但按下回车键也会创建一个新的文本行,加扰文本。
所以我想以某种方式禁用用户输入,这样用户就无法在控制台中写任何东西。有没有办法,例如,禁用命令提示符(并通过命令提示符,我不是指cmd.exe,而是闪烁的“_”下划线符号)?
答案 0 :(得分:2)
我认为你想要的是from models import Project
from rest_framework import serializers
class ProjectSerializer(serializers.ModelSerializer):
"""
Serializes the Project model to send and receive valid JSON data.
"""
action = serializers.CharField()
class Meta:
model = Project
fields = ('action', 'title', 'id', 'endDate', 'startDate', 'product')
,它会截取按下的键并且不会显示它。
{"action": "createproject"}
来源:MSDN Article
答案 1 :(得分:0)
您可以使用此类(suggested here)监听键输入,而不只是在Writes之间休眠:
class Reader {
private static Thread inputThread;
private static AutoResetEvent getInput, gotInput;
private static ConsoleKeyInfo input;
static Reader() {
getInput = new AutoResetEvent(false);
gotInput = new AutoResetEvent(false);
inputThread = new Thread(reader);
inputThread.IsBackground = true;
inputThread.Start();
}
private static void reader() {
while (true) {
getInput.WaitOne();
input = Console.ReadKey();
gotInput.Set();
}
}
public static ConsoleKeyInfo ReadKey(int timeOutMillisecs) {
getInput.Set();
bool success = gotInput.WaitOne(timeOutMillisecs);
if (success)
return input;
else
return null;
}
}
在你的循环中:
Console.Write(myText[i]);
if (pauseTime > 0)
{
var key = Reader.ReadKey(pauseTime);
if (key != null && key.Key == ConsoleKey.Enter)
{
pauseTime = 0;
}
}
我刚刚手写了这个并没有检查过,所以如果它不起作用,请告诉我