如何在C#控制台应用绘制的正方形内分4个区域写入不同文本
C#控制台正方形分区写入文本实现方案
核心思路
你当前已经实现了外正方形绘制,只需要补充3部分逻辑即可:
- 移除原绘制方法末尾的阻塞逻辑,保证后续代码可执行
- 绘制十字分隔线将正方形内部划分为4个独立区域
- 计算每个区域的坐标范围,定位光标后写入对应文本
代码实现
1. 优化后的正方形绘制方法
static void DrawSquare(int l, int h, int x, int y) { string tvkant = "\x250C"; // 左上角 string thkant = "\x2510"; // 右上角 string bvkant = "\x2514"; // 左下角 string bhkant = "\x2518"; // 右下角 string vside = "\x2502"; // 竖边 string hside = "\x2502"; // 竖边 string top = "\x2500"; // 横边 string bund = "\x2500"; // 横边 // 绘制上下横边 for (int i = 1; i < l; i++) { Console.SetCursorPosition(x + i, y); Console.Write(top); Console.SetCursorPosition(x + i, y + h); Console.Write(bund); } // 绘制左右竖边 for (int i = 1; i < h; i++) { Console.SetCursorPosition(x, y + i); Console.Write(vside); Console.SetCursorPosition(x + l, y + i); Console.Write(hside); } // 绘制四个角 Console.SetCursorPosition(x, y); Console.Write(tvkant); Console.SetCursorPosition(x + l, y); Console.Write(thkant); Console.SetCursorPosition(x, y + h); Console.Write(bvkant); Console.SetCursorPosition(x + l, y + h); Console.Write(bhkant); }
2. 新增分区绘制与文本写入方法
// 绘制十字分隔线,划分4个区域 static void DrawSplitLine(int l, int h, int x, int y) { string cross = "\x253C"; // 十字交叉点 string hLine = "\x2500"; // 水平分隔线 string vLine = "\x2502"; // 垂直分隔线 int splitX = x + l / 2; int splitY = y + h / 2; // 绘制垂直分隔线 for (int i = 1; i < h; i++) { Console.SetCursorPosition(splitX, y + i); Console.Write(vLine); } // 绘制水平分隔线 for (int i = 1; i < l; i++) { Console.SetCursorPosition(x + i, splitY); Console.Write(hLine); } // 绘制交叉点 Console.SetCursorPosition(splitX, splitY); Console.Write(cross); } // 向指定区域写入文本 static void WriteTextToArea(int areaIndex, string text, int l, int h, int x, int y) { int areaWidth = l / 2 - 1; // 单个区域宽度,减去边框和分隔线占位 int areaHeight = h / 2 - 1; // 单个区域高度 int startX = 0, startY = 0; // 根据区域编号计算起始坐标,默认从左上开始顺时针编号1-4 switch (areaIndex) { case 1: // 左上 startX = x + 1; startY = y + 1; break; case 2: // 右上 startX = x + l / 2 + 1; startY = y + 1; break; case 3: // 左下 startX = x + 1; startY = y + h / 2 + 1; break; case 4: // 右下 startX = x + l / 2 + 1; startY = y + h / 2 + 1; break; } // 文本超出区域宽度自动截断,也可自行实现换行逻辑 if (text.Length > areaWidth) text = text.Substring(0, areaWidth); Console.SetCursorPosition(startX, startY); Console.Write(text); }
3. Main方法调用示例
static void Main(string[] args) { // 初始参数和你之前的调用一致:宽20,高24,左上角坐标(16,20) int width = 20, height = 24, left = 16, top = 20; Console.CursorVisible = false; // 隐藏光标更美观 // 1. 绘制外框 DrawSquare(width, height, left, top); // 2. 绘制分隔线 DrawSplitLine(width, height, left, top); // 3. 向四个区域写入不同文本 WriteTextToArea(1, "左上区域文本", width, height, left, top); WriteTextToArea(2, "右上区域文本", width, height, left, top); WriteTextToArea(3, "左下区域文本", width, height, left, top); WriteTextToArea(4, "右下区域文本", width, height, left, top); Console.ReadKey(); }
可选优化点
- 如果需要文本居中展示,只需要计算对应区域的中心坐标,调整
startX和startY即可 - 可以自定义分隔线的位置,不需要严格对半分,修改
splitX和splitY的计算逻辑即可 - 如果需要多行文本,可以按行循环设置光标Y坐标逐行写入,注意不要超过区域高度
内容的提问来源于stack exchange,提问作者Coral
相关产品推荐
相关产品推荐

