【问题标题】:Tic-tac-toe code help improve井字游戏代码有助于改进
【发布时间】:2016-03-18 03:20:31
【问题描述】:

这是我必须检查玩家赢得井字游戏的代码。这是一个很长的 if 语句,可以改进。该板由 9 个图片框组成。我是 C# 初学者。

pBox.Image = Player.players[Player.playerTurn].getImage();
//check for wins


if (pbxSquare0.Image == Player.players[Player.playerTurn].getImage() && //horizontal
    pbxSquare1.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare2.Image == Player.players[Player.playerTurn].getImage()

    ||
    pbxSquare3.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare4.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare5.Image == Player.players[Player.playerTurn].getImage()

    ||
    pbxSquare6.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare7.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare8.Image == Player.players[Player.playerTurn].getImage()

    ||
    pbxSquare0.Image == Player.players[Player.playerTurn].getImage() && //vertical
    pbxSquare3.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare6.Image == Player.players[Player.playerTurn].getImage()

    ||
    pbxSquare1.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare4.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare7.Image == Player.players[Player.playerTurn].getImage() 

    ||
    pbxSquare2.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare5.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare8.Image == Player.players[Player.playerTurn].getImage()
    ||
    pbxSquare0.Image == Player.players[Player.playerTurn].getImage() && //diagnonal
    pbxSquare4.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare8.Image == Player.players[Player.playerTurn].getImage()
    ||
    pbxSquare2.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare4.Image == Player.players[Player.playerTurn].getImage() &&
    pbxSquare6.Image == Player.players[Player.playerTurn].getImage())

{
    //playerturn is the winner
    MessageBox.Show(playerturn + "wins");
}

【问题讨论】:

  • 如果您想对您的代码提出建议,请将其发布在 Code Review 上,而不是 Stack Overflow 上
  • 下载一份 Resharper 并对代码运行检查;它可能会给你一些很好的建议。

标签: c#


【解决方案1】:

您应该为您的游戏创建一个二维数组。可能是枚举类型。

 enum FieldState { Empty, Player1, Player2 };
private FieldState[,] _gameField = new FieldState[3,3];

如果有回合,请相应地更新您的游戏场。还要分配图片。 如果您将游戏状态保存在数组中,则更容易找到获胜条件,因为您可以循环。

private bool win(FieldState player){
   return winHorizontal(player) || winVertical(player) || winDiagonal(player);
}

private bool winHorizontal(FieldState player){
   for (int y = 0; y < 3; y++){
        bool win = true;
        for (int x = 0; x < 3; x++)
           win &= _gameField[x,y] == player;
        if (win) return true;
   }
   return false;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2015-06-12
    • 2023-03-20
    • 2015-01-08
    相关资源
    最近更新 更多