Мой первый код выполняется, и после того, как я делаю свой ход, компьютер всегда пытается получить правый нижний пятно бордюрной доски Tic Tac:C# - Почему выполнение этих разных кодов дает мне тот же результат?
private void ComputersTurn()
{
Control.ControlCollection coll = this.Controls;
foreach (Control c in coll)//for each button in form
{
if ((c != null) && (c is Button))//if c is a button and c has a value
{
if ((c.Name != "btnNewGame") && (c.Name != "btnExit")) // if the button isnt btn new game or exit
{
if (c.Enabled == true) //if a button has an X
{
c.Text = "O"; //place an O
c.Enabled = false; //in a empty button
CheckComputerWinner(); //check if it wins
return; //return result
}//end of if
}//end of if 2
}//end of if 1
}//end of foreach
}//end of ComputersTurn
Второй код, который я получил помощь с .. .does точно такой же вещи:
private void ComputersTurn()
{
Control.ControlCollection coll = this.Controls;
foreach (Control c in coll)//for each button in form
{
if ((c != null) && (c is Button))//if c is a button and c has a value
{
if ((c.Name != "btnNewGame") && (c.Name != "btnExit")) // if the button isnt btn new game or exit
{
gamefield = new Button[] { btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9 };
int freeCount = gamefield.Count(b => b.Text != "X");
int offset = RandomGenerator.GenRand(0 - 8, freeCount - 1);
Button target = gamefield.Where(b => b.Text != "X").Skip(offset).FirstOrDefault(); ;
if (target != null)//if target has an X
{
// check it
if (c.Enabled == true)
{
c.Text = "O"; //O will be inside the button
c.Enabled = false; //button can no long be used
CheckComputerWinner(); //check if it finishes task
return;
}
}
}
}
}
}//end of ComputersTurn
генератор случайных
public static class RandomGenerator
{
private static readonly Random _random = new Random();
public static int GenRand(int x, int y)
{
return _random.Next(x, y);
}
}
Я не понимаю, почему. Второй предназначен для того, чтобы компьютер был случайным, первый из которых настроен на предсказуемость. Почему они оба делают то же самое?
Как определить 'c'? И что вы подразумеваете под «тем же результатом»? – antonijn
Потому что как-то код нарушается? «непредсказуемый» означает, что он может работать :-) –
Трудно сказать, почему он не дает случайный результат, когда код, генерирующий случайное значение, недоступен :( – Evelie