我想创建一个函数。我希望它在第一次调用时为 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

ChangePlayervoidstring 的更改允许代码的更多功能使用。它允许内联使用而不需要两次调用来获取当前播放器。

此外,我更改了方法的大小写以符合 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;
    }