如何计算秒数,然后在条件句中使用它们
本文关键字:条件 然后 何计算 计算 | 更新日期: 2023-09-27 17:53:03
我是一个新手程序员,我已经尝试处理这个问题超过2个小时了。我想让程序做的是计算秒数,如果它超过了第二秒(什么?),做一些事情,例如显示"游戏结束"或类似的东西。问题是,在这2秒过去之后,程序没有做任何事情。问题是什么?
编辑:好吧,这是这背后的全部信息。用户必须在2秒内按下屏幕上显示的字符对应的键。如果用户没有在2秒内按下按键,或者按错了按键,那么游戏就结束了,但它并没有像预期的那样运行lol
下面是到目前为止的全部代码(是的,我知道goto很糟糕,稍后我会用循环修改它):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
using System.Threading;
using System.Diagnostics;
class Game
{
static void Main()
{
Start:
Console.CursorVisible = false;
Random rnd = new Random();
int row = rnd.Next(1, 80);
int col = rnd.Next(1, 25);
int chars = rnd.Next(0, 62);
string lettersAndChars = "";
lettersAndChars = lettersAndChars.ToUpper();
Console.SetCursorPosition(row, col);
if (chars <= 10)
{
lettersAndChars += (char)(chars + '0');
}
else
{
lettersAndChars += (char)(chars + 'A');
}
lettersAndChars = lettersAndChars.ToUpper();
Console.WriteLine(lettersAndChars);
DateTime endTime = DateTime.Now.AddSeconds(2);
var keyPress = Console.ReadKey();
string keyPressString = keyPress.KeyChar.ToString();
keyPressString = keyPressString.ToUpper();
if (keyPressString == lettersAndChars && DateTime.Now < endTime)
{
Console.Clear();
goto Start;
}
else if (keyPressString != lettersAndChars || DateTime.Now > endTime)
{
Console.Clear();
Console.WriteLine("Game Over");
}
}
}
我不会使用定时器。您可以执行以下操作:
DateTime endTime = DateTime.Now.AddSeconds(2);
while (!Console.KeyAvailable && DateTime.Now < endTime)
Thread.Sleep(1);
if (Console.KeyAvailable)
{
var keyPress = Console.ReadKey();
string keyPressString = keyPress.KeyChar.ToString();
keyPressString = keyPressString.ToUpper();
if (keyPressString == lettersAndChars)
{
Console.Clear();
goto Start;
}
}
Console.Clear();
Console.WriteLine("Game Over");
@Ulugbek Umirov的答案起作用了!谢谢!下面是它现在的样子(我也从以前改变了很多代码):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
using System.Threading;
using System.Diagnostics;
class Game
{
static void Main()
{
bool isTrue = true;
while (isTrue == true)
{
Console.BufferHeight = 25;
Console.BufferWidth = 80;
Console.CursorVisible = false;
Random rnd = new Random();
int row = rnd.Next(1, 80);
int col = rnd.Next(1, 25);
int numbers = rnd.Next(0,9);
int chars = rnd.Next(0, 25);
string lettersAndChars = "";
Console.SetCursorPosition(row, col);
int choose = rnd.Next(1,3);
while (choose == 1)
{
lettersAndChars += (int)(numbers);
break;
}
while (choose == 2)
{
lettersAndChars += (char)(chars + 'A');
break;
}
lettersAndChars = lettersAndChars.ToUpper();
Console.WriteLine(lettersAndChars);
DateTime endTime = DateTime.Now.AddSeconds(2);
while (!Console.KeyAvailable && DateTime.Now < endTime)
Thread.Sleep(1);
if (Console.KeyAvailable)
{
var keyPress = Console.ReadKey();
string keyPressString = keyPress.KeyChar.ToString();
keyPressString = keyPressString.ToUpper();
if (keyPressString == lettersAndChars)
{
Console.Clear();
continue;
}
}
Console.Clear();
int leftOffSet = (Console.WindowWidth / 2) -3;
int topOffSet = (Console.WindowHeight / 2) -2;
Console.SetCursorPosition(leftOffSet, topOffSet);
Console.WriteLine("Game Over");
leftOffSet = (Console.WindowWidth / 2) - 25;
topOffSet = (Console.WindowHeight / 2);
Console.SetCursorPosition(leftOffSet, topOffSet);
Console.WriteLine("Press '"R'" to start again or '"ESC'" to exit the game...");
var resOrExit = Console.ReadKey();
Console.Clear();
if ((char)resOrExit.Key == 'R')
{
continue;
}
else if (resOrExit.Key == ConsoleKey.Escape)
{
Environment.Exit(0);
}
}
}
}