C# 方法中的变量添加被忽略
前提是根据角色选择的方向和掷骰子的值,在网格周围移动角色 正在C# 方法中的变量添加被忽略,c#,function,procedures,C#,Function,Procedures,前提是根据角色选择的方向和掷骰子的值,在网格周围移动角色 正在PrepareMove中调用函数CalculateMove。在CalculateMove中,变量finishX或finishY被添加或减去diceValue的值 所有与finalX或CalculateMove中finalY有关的内容都被忽略,即使在if语句外部写入+=3。 有什么想法吗,伙计们( 谢谢,您正在通过值传递finishX和finishY,因此当您在CalculateMove方法中更改它们的值时,您正在更改Calcula
PrepareMove
中调用函数CalculateMove
。在CalculateMove中,变量finishX
或finishY
被添加或减去diceValue
的值
所有与finalX或CalculateMove中finalY有关的内容都被忽略,即使在if语句外部写入+=3。
有什么想法吗,伙计们(
谢谢,您正在通过值传递
finishX
和finishY
,因此当您在CalculateMove
方法中更改它们的值时,您正在更改CalculateMove
方法的本地副本的值,而不是原始变量
您需要通过如下引用传递finishX
和finishY
:
static void CalculateMove(
string playerMoveDirection,
string[,] board,
int diceValue, int startX, int startY,
ref int finishX, ref int finishY)
{
...
}
public class Coordinates
{
public int X {get;set;}
public int Y {get;set;}
}
finish_coordinates.X = ...
您还需要对PrepareMove
方法执行相同的操作
顺便说一句,如果您创建一个类来保存X和Y值(如下所示)会更好:
static void CalculateMove(
string playerMoveDirection,
string[,] board,
int diceValue, int startX, int startY,
ref int finishX, ref int finishY)
{
...
}
public class Coordinates
{
public int X {get;set;}
public int Y {get;set;}
}
finish_coordinates.X = ...
然后对该方法进行以下定义:
static void CalculateMove(
string playerMoveDirection,
string[,] board,
int diceValue,
Coordinates start_coordinates,
Coordinates finish_coordinates)
{
...
}
然后你可以像这样访问坐标:
static void CalculateMove(
string playerMoveDirection,
string[,] board,
int diceValue, int startX, int startY,
ref int finishX, ref int finishY)
{
...
}
public class Coordinates
{
public int X {get;set;}
public int Y {get;set;}
}
finish_coordinates.X = ...
这将使您的代码更具可读性,并且您不必通过引用来传递它
您也应该对其他方法执行同样的操作。您正在通过值传递
finishX
和finishY
,因此当您在CalculateMove
方法中更改它们的值时,您正在更改CalculateMove
方法的本地副本的值,而不是原始变量
您需要通过如下引用传递finishX
和finishY
:
static void CalculateMove(
string playerMoveDirection,
string[,] board,
int diceValue, int startX, int startY,
ref int finishX, ref int finishY)
{
...
}
public class Coordinates
{
public int X {get;set;}
public int Y {get;set;}
}
finish_coordinates.X = ...
您还需要对PrepareMove
方法执行相同的操作
顺便说一句,如果您创建一个类来保存X和Y值(如下所示)会更好:
static void CalculateMove(
string playerMoveDirection,
string[,] board,
int diceValue, int startX, int startY,
ref int finishX, ref int finishY)
{
...
}
public class Coordinates
{
public int X {get;set;}
public int Y {get;set;}
}
finish_coordinates.X = ...
然后对该方法进行以下定义:
static void CalculateMove(
string playerMoveDirection,
string[,] board,
int diceValue,
Coordinates start_coordinates,
Coordinates finish_coordinates)
{
...
}
然后你可以像这样访问坐标:
static void CalculateMove(
string playerMoveDirection,
string[,] board,
int diceValue, int startX, int startY,
ref int finishX, ref int finishY)
{
...
}
public class Coordinates
{
public int X {get;set;}
public int Y {get;set;}
}
finish_coordinates.X = ...
这将使您的代码更具可读性,并且您不必通过引用来传递它
您还应该对其他方法执行相同的操作。在函数退出后,您需要对参数使用“ref int finishX”和“ref int finishY”来保留值
函数退出后,您需要对参数使用“ref int finishX”和“ref int finishY”来保留值