我一直试图在我的RPG中使用一个按钮混搭迷你游戏,但是我没有设法使其正常工作。这是我创建的代码:
using System;
namespace CounterAttack
{
class Program
{
public static int n = 0;
public static int buttonmash = 0;
public static string buttonpressed;
public static void CounterAttack()
{
n = 0;
while (n < 4000)
{
buttonpressed = Console.ReadKey().ToString();
System.Threading.Thread.Sleep(1);
n = n + 1;
if (buttonpressed == " ")
{
buttonmash = buttonmash + 1;
buttonpressed = "a";
}
else
{
buttonpressed = "a";
}
}
Console.WriteLine($"You pressed spacebar {buttonmash} times ");
}
static void Main(string[] args)
{
CounterAttack();
System.Threading.Thread.Sleep(1000);
Console.ReadKey();
}
}
}
由于我未知的原因,该程序将不会退出while循环。这意味着我无法检查代码的其他部分是否可以正常工作。
所以我的问题是:如何更改此代码以读取空格键在4秒钟内被按下的次数?
答案 0 :(得分:1)
“我一直试图在我的RPG中使用按钮混搭迷你游戏,但是我没有设法使其正常工作。”
您正在控制台应用程序中执行此操作。因此,答案是从“不容易”到“简单不可能”的范围。我希望其他人可以在该轴上为您提供更精确的答案。
游戏开发和GUI技术不能很好地融合在一起。那个旧的纸牌游戏几乎是您可以在其中进行的游戏的上限。控制台甚至比它匹配 less 。
所有严肃的游戏开发都是在游戏循环附带的任何环境中完成的。 XNA有点过时,但是对于.NET Core,有一些选择:https://www.microsoft.com/net/apps/gaming
答案 1 :(得分:1)
尝试一下:
class Program
{
private static int numSpaces = 0;
static void Main(string[] args)
{
Thread th = new Thread(CheckSpace);
th.Start();
th.Join();
Console.WriteLine($"You pressed space {numSpaces} times");
Console.Read();
}
private static void CheckSpace()
{
Stopwatch sw = new Stopwatch();
sw.Start();
while (true)
{
if (Console.KeyAvailable)
{
if (Console.ReadKey().Key == ConsoleKey.Spacebar)
{
numSpaces++;
}
}
if (sw.ElapsedMilliseconds>= 4000)
{
break;
}
Thread.Sleep(10);
}
}
}
答案 2 :(得分:1)
@auberg的解决方案很好,但是您实际上不需要第二个线程。是的,在主线程上调用Thread.Sleep()
是一个坏主意,但是在这么短的时间内执行它还是不明显的。
尝试一下:
public static void CountKeyPresses()
{
Console.WriteLine("OK, start pressing the space bar");
var numPresses = 0;
var stopWatch = new Stopwatch();
stopWatch.Start();
while (stopWatch.ElapsedMilliseconds < 4000)
{
if (Console.KeyAvailable && Console.ReadKey().Key == ConsoleKey.Spacebar)
{
++numPresses;
}
System.Threading.Thread.Sleep(10);
}
Console.WriteLine($"\r\nYou pressed the spacebar {numPresses} times");
}
答案 3 :(得分:0)
这种排序有效,只要您在4秒钟计时器启动后按空格键即可。
static void Main(string[] args)
{
var startTime = DateTime.Now;
var n = 0;
while (DateTime.Now < startTime.AddSeconds(4))
{
var key = Console.ReadKey();
System.Threading.Thread.Sleep(1);
if (key.Key == ConsoleKey.Spacebar) n = n + 1;
}
Console.WriteLine($"You pressed spacebar {n} times ");
}