Нужен пример рандомизации сетки с символами, которые имеют разное количество
Я хотел бы увидеть примеры того, как можно рандомизировать сетку с разными значениями. это оригинальная доска
string[,] board = new string[4, 4];
for (int y = 0; y < 4; y++)
{
for (int x = 0; x < 4; x++)
{
board[x, y] = ".";
}
}
Я пытаюсь придумать, как разместить случайные символы вместо "." проблема заключается в количестве каждого значения, которое необходимо заполнить. Например, должно быть заполнено 1 «E» и 1 «T», но остальная часть сетки должна быть «N» и «L», количество не имеет значения.
Я пробовал сделать это так, но это не сработало
string[] values{"N", "L"}
int index = rand.Next(values.Length);
board[0, 0] = values[index];
board[0, 1] = values[index];
board[0, 2] = values[index];
board[0, 3] = values[index];
//etc...```
Я огляделся и, кажется, не нашел ни одного примера того, что пытаюсь сделать.
2 ответа
Я бы сначала заполнил «N» и «L», а затем заменил бы две случайные позиции на «E» и «T».
string[,] board = new string[4, 4];
string[] nl = { "N", "L" };
for (int y = 0; y < 4; y++)
{
for (int x = 0; x < 4; x++)
{
board[x, y] = nl[rand.Next(2)];
}
}
Теперь у нас есть доска, полная букв "N" и "L". Давайте выберем две случайные позиции, чтобы заполнить букву «Е» и «Т».
int x = rand.Next(4);
int y = rand.Next(4);
board[x, y] = "E";
int x2, y2;
// Ensure that we don't place the "T" at the same place as the "E"
do {
x2 = rand.Next(4);
y2 = rand.Next(4);
} while (x2 == x && y2 == y);
board[x2, y2] = "T";
Вы можете попробовать следующий код:
private static Random random = new Random();
public static string RandomString(int length)
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[random.Next(s.Length)]).ToArray());
}