我想创建一个函数。我希望它在第一次调用时为 return "X",在第二次调用时为 "O"
I want to create a function. I want it to return "X" on first invocation and "O" on second invocation
我正在尝试制作XOX游戏。
我想创建一个函数,而不是分别为每个按钮编写代码。我希望它在第一次调用时为 return X
,在第二次调用时为 O
。
我试过这个:
string player = "X";
private void changePlayer()
{
XO.Text = player;
if (player == "X")
{
player = "O";
}
if (player == "O")
{
player = "X";
}
}
这是做同样事情的另一种方法:
int value = 1;
private void changePlayer(){
if (value == 1) {
XO.Text = "X";
} else {
XO.Text = "O";
}
value *= -1;
}
我想做一些像这样简单的事情:
private string CurrentPlayer { get; set; } = "X";
private string ChangePlayer() =>
this.CurrentPlayer = this.CurrentPlayer == "X" ? "O" : "X";
此代码:
Console.WriteLine(this.CurrentPlayer);
Console.WriteLine(this.ChangePlayer());
Console.WriteLine(this.ChangePlayer());
Console.WriteLine(this.ChangePlayer());
Console.WriteLine(this.ChangePlayer());
Console.WriteLine(this.CurrentPlayer);
...输出:
X
O
X
O
X
X
ChangePlayer
从 void
到 string
的更改允许代码的更多功能使用。它允许内联使用而不需要两次调用来获取当前播放器。
此外,我更改了方法的大小写以符合 C# 标准。
老实说,我可能会这样做以避免对玩家造成任何可能的不良价值。
private Player CurrentPlayer { get; set; } = Player.X;
private Player ChangePlayer() =>
this.CurrentPlayer = this.CurrentPlayer == Player.X ? Player.O : Player.X;
public enum Player { X, O }
您的代码唯一的问题是它在第二个 if
之前缺少一个 else
值为 X,第一个 if
为真,因此将 X 变为 O。然后测试第二个 if
,现在为真(事实并非如此,当该方法已启动,但第一个 if
执行的操作使其为真)因此它立即将 O 再次变回 X。
连续两个条件“相反”的if不一定与if/else
相同
我试过了,效果很好
int counter = 0;
private void changePlayer()
{
if (counter % 2 == 0)
{
player = "O";
}
else
{
player = "X";
}
counter += 1;
XO.Text = player;
}
我正在尝试制作XOX游戏。
我想创建一个函数,而不是分别为每个按钮编写代码。我希望它在第一次调用时为 return X
,在第二次调用时为 O
。
我试过这个:
string player = "X";
private void changePlayer()
{
XO.Text = player;
if (player == "X")
{
player = "O";
}
if (player == "O")
{
player = "X";
}
}
这是做同样事情的另一种方法:
int value = 1;
private void changePlayer(){
if (value == 1) {
XO.Text = "X";
} else {
XO.Text = "O";
}
value *= -1;
}
我想做一些像这样简单的事情:
private string CurrentPlayer { get; set; } = "X";
private string ChangePlayer() =>
this.CurrentPlayer = this.CurrentPlayer == "X" ? "O" : "X";
此代码:
Console.WriteLine(this.CurrentPlayer);
Console.WriteLine(this.ChangePlayer());
Console.WriteLine(this.ChangePlayer());
Console.WriteLine(this.ChangePlayer());
Console.WriteLine(this.ChangePlayer());
Console.WriteLine(this.CurrentPlayer);
...输出:
X
O
X
O
X
X
ChangePlayer
从 void
到 string
的更改允许代码的更多功能使用。它允许内联使用而不需要两次调用来获取当前播放器。
此外,我更改了方法的大小写以符合 C# 标准。
老实说,我可能会这样做以避免对玩家造成任何可能的不良价值。
private Player CurrentPlayer { get; set; } = Player.X;
private Player ChangePlayer() =>
this.CurrentPlayer = this.CurrentPlayer == Player.X ? Player.O : Player.X;
public enum Player { X, O }
您的代码唯一的问题是它在第二个 if
else
值为 X,第一个 if
为真,因此将 X 变为 O。然后测试第二个 if
,现在为真(事实并非如此,当该方法已启动,但第一个 if
执行的操作使其为真)因此它立即将 O 再次变回 X。
连续两个条件“相反”的if不一定与if/else
相同我试过了,效果很好
int counter = 0;
private void changePlayer()
{
if (counter % 2 == 0)
{
player = "O";
}
else
{
player = "X";
}
counter += 1;
XO.Text = player;
}