以下是正在发生的事情。
第一个问题是:
我需要按两次方向按钮来开始递增和/或递减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
开始并降低值,则由于x < 1999
部分的原因,只有当您到达1998
时,时间才会发生变化。有一个值在递减或递增时都不会触发更改,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年