我正在与Xna一起制作TicTac Toe以更加牢固地掌握c#编程,但我无法弄清楚如何解决这个问题:我检查在布尔数组中有一个获胜的patern用于第一和第二的玩家如果是这样,游戏必须停止,但如果有一排x和o,它也会停止。然而,当图案是垂直的时,这不适用。 :代码(我使用的是一些texture2d的一个是十字架是“o”,两个是鼠标形式,一个是背景
LOD
非常感谢 一个年轻的程序员
答案 0 :(得分:0)
当我重新格式化代码时,看起来某些胜利条件会重复出现。
(playerOne[0, 0] && playerOne[1, 0] && playerOne[2, 0]) || // here
(playerOne[0, 1] && playerOne[1, 1] && playerOne[2, 1]) ||
(playerOne[0, 2] && playerOne[1, 2] && playerOne[2, 2]) ||
(playerOne[0, 0] && playerOne[1, 0] && playerOne[2, 0]) || // and here
(playerOne[0, 1] && playerOne[1, 1] && playerOne[2, 1]) ||
(playerOne[0, 2] && playerOne[1, 2] && playerOne[2, 2]) ||
(playerOne[0, 0] && playerOne[1, 1] && playerOne[2, 2]) ||
(playerOne[0, 2] && playerOne[1, 1] && playerOne[2, 0]))
同时查看其他重复获胜条件。
答案 1 :(得分:0)
欢迎来到广泛的编程世界,LC大师!
您必须检查获胜者的代码才有效。您在代码中遇到的问题是playerOne
和playerTwo
之间目前没有区别。虽然看起来你已经为这些变量创建了两个独立的布尔数组,但你在这一行上犯了一个错误:
playerOne = playerTwo = total = new bool[3, 3] { {false,false,false }, { false, false, false }, { false, false, false } };
这行代码的问题在于您将playerOne
分配给与playerTwo
完全相同的布尔数组。执行该行代码后,playerOne
和playerTwo
成为内存中完全相同数据的别名(同样适用于total
),这意味着它们是同一个布尔数组的两个不同名称。这就好像有很多人打电话给你的昵称。你的名字可能是" Thomas"有些朋友可能会打电话给你" T.J。",但无论如何," Thomas"和" T.J。"是指完全相同的人的名字;您!由于这个问题,任何一名球员所做的任何动作都将被视为由两名球员同时完成。
要解决您的问题,您需要将playerOne
和playerTwo
的分配分开(我会对总数进行相同的分配),如下面的代码所示:
playerOne = new bool[3, 3];
playerTwo = new bool[3, 3];
现在playerOne
和playerTwo
都有自己的布尔数组。应用此代码后,您可能需要对代码进行其他更改,以便考虑这两个拥有自己的布尔数组的玩家(例如,您不希望允许两个玩家在同一位置玩游戏)。< / p>
最后一点,请注意,在上面的代码中创建playerOne
和playerTwo
时,我没有明确地将数组的值分配给false
,因为它&#39;没有必要。创建布尔数组时,数组的值将默认为false,如提供的表here所示。
同样,此解决方案可能无法修复您的程序,但它会让您更接近完成项目。快乐的编码!