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:
变量x
、y
和time
没有初始化,所以不能在行
中使用
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
这是正在发生的事情。
第一期是:
我需要按方向按钮两次才能开始递增 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:
变量x
、y
和time
没有初始化,所以不能在行
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