C# 带固定字符数量限制的4x4网格随机填充实现示例
完整实现示例
using System; class GridFillDemo { static void Main() { // 全局仅实例化一次随机数生成器,避免重复生成相同随机值 Random rand = new Random(); // 初始化4*4网格 string[,] board = new string[4, 4]; for (int y = 0; y < 4; y++) { for (int x = 0; x < 4; x++) { board[x, y] = "."; } } // 生成E的随机坐标并赋值 int eX = rand.Next(4); int eY = rand.Next(4); board[eX, eY] = "E"; // 生成T的随机坐标,循环判断确保和E的坐标不重复 int tX, tY; do { tX = rand.Next(4); tY = rand.Next(4); } while (tX == eX && tY == eY); board[tX, tY] = "T"; // 填充剩余格子为随机N/L string[] normalValues = {"N", "L"}; for (int y = 0; y < 4; y++) { for (int x = 0; x < 4; x++) { // 跳过已经放置E、T的格子 if (board[x, y] == "E" || board[x, y] == "T") { continue; } // 每个格子单独生成随机索引,保证值的随机性 int index = rand.Next(normalValues.Length); board[x, y] = normalValues[index]; } } // 测试输出网格(可选) for (int y = 0; y < 4; y++) { for (int x = 0; x < 4; x++) { Console.Write(board[x, y] + " "); } Console.WriteLine(); } } }
原写法问题说明
- 仅生成了一次随机索引
index,所有格子复用同一个值,导致填充的N/L全部相同 - 缺少E、T的放置逻辑,也没有做坐标去重处理,不符合规则要求
内容的提问来源于stack exchange,提问作者Skye Smith
相关产品推荐
相关产品推荐

