C# 我的代码在接受输入时出现问题,并且在按下按钮两次之前不会开始递增或递减,我的 >><= 语句也无法正常工作

C# My code has a problem taking input and will not start incrementing or decrementing until a button is hit twice nor are my ><= statements working

这是正在发生的事情。

第一期是:

我需要按方向按钮两次才能开始递增 and/or 递减 x 和 y 变量。

如果我为前任改变方向

从右到左,x 变量将在开始递减之前再次递增。

第二期:

我有时间基于玩家当前的 x 和 y。

然而,当我超过 2000 时,时间直到 2001 年才改变。

如果我回到 1999 年,时间直到 1998 年才改变...

即使我的代码说的是同样的事情

if(y>=0 && y< 2000) 这是同样的问题,我认为拿 2000 年并把它变成 1999 会解决这个问题,但事实并非如此。

我不知道是什么导致了这些问题,我已经尝试弄清楚...如果有人知道为什么会这样,我很想知道。

int x = 1995;
int y = 0;
int time = 0;

Console.WriteLine("X: 0Y: 0Time: 0");

while(true){
   ConsoleKey key = Console.ReadKey().Key;
   Console.SetCursorPosition(Console.CursorLeft, Console.CursorTop -1);
   Console.WriteLine($"X: {x,6} Y:{y,6} Time: {time,3}");
   Console.SetCursorPosition(Console.CursorLeft, Console.CursorTop +1);
   //Change Timezones
   if (x >=0 && x< 1999){
      time=0;
   }
   else if (x>=2000 && x< 3999){
      time=1;
   }
   ....
   //Movement   
   if (key == ConsoleKey.LeftArrow){
      x=x-1;
   }
   else if (key == ConsoleKey.RightArrow){
      x=x+1;
   }

   ....
}

问题 1“从右到左,x 变量将在开始递减之前再次递增。

那是因为您打印的是上一次迭代的值,而不是新值。将您的 Console.WriteLine 移动到脚本的末尾,它会向您显示更新后的值

问题 2“然而,当我超过 2000 时,时间直到 2001 年才改变。

这很可能是由与问题 1 相同的原因引起的。这也可能是由于您可能会在 运行 更改时区代码块之后更改 x 的值。确保您的逻辑顺序正确。

问题 3“如果我回到 1999 年,时间直到 1998 年才改变

您的逻辑值之间存在差距。您的第一个时区代码块中有 x < 1999,第二个时区代码块中有 x >= 2000。这意味着如果你从 2003 开始,然后数值下降,时间只会在你到达 1998 时改变,因为 x < 1999 部分。有一个值在递减或递增时都不会触发变化,1999

问题 1:

Console.SetCursorPosition(Console.CursorLert, Console.CursorTop, -1);

无法编译,因为它必须是 Console.CursorLeft

问题 2:

SetCursorPosition() 的重载没有接受 3 个参数。也许你想要

Console.CursorTop -1

问题 3:

变量xytime没有初始化,所以不能在行

中使用
Console.WriteLine($"X: {x,6} Y:{y,6} Time: {time,3}");

问题 4:

C# 中的比较需要行两边的变量

else if (x>=2000 && < 3999){

尝试

else if (x>=2000 && x<3999){

问题 5:

您的定义有误:

x< 1999 // ... 1997, 1998
x>=2000 // 2000, 2001, ...

所以你漏掉了 1999