Java 2D绘制双陆棋棋盘:仅用drawLine实现网格的难题
问题:单循环结合drawLine绘制双陆棋棋盘网格
需要仅通过drawLine方法绘制双陆棋的9×9网格,要求避免分开处理水平/垂直线时的坐标变量干扰,且不能使用矩形绘制。当前代码通过两个独立循环分别绘制水平线和竖直线,期望实现边长160px、单元格20px的网格。
现有代码:
int x = 25; int y = 25; for (int i = 0; i <=8; i++) { g2d.drawLine(x, y, x+160, y); y+=20; } x = 25; y = 25; for (int i = 0; i <=8; i++) { g2d.drawLine(x, y, x, y+160); x+=20; }
解决方案
Java的drawLine每次只能绘制单条直线,因此必须多次调用,但可以将水平和垂直线的绘制合并到同一个循环中,避免重复初始化坐标变量,消除坐标干扰问题:
int startX = 25; int startY = 25; final int CELL_SIZE = 20; final int GRID_LENGTH = 160; // 8个单元格 × 20px for (int i = 0; i <= 8; i++) { // 绘制第i条水平线 g2d.drawLine(startX, startY + i * CELL_SIZE, startX + GRID_LENGTH, startY + i * CELL_SIZE); // 绘制第i条垂直线 g2d.drawLine(startX + i * CELL_SIZE, startY, startX + i * CELL_SIZE, startY + GRID_LENGTH); }
说明
- 借助循环变量
i计算每条线的偏移量,无需手动维护x/y变量的递增,避免了变量重置和干扰问题 - 用常量定义单元格大小和网格长度,代码更易读、易维护
- 单个循环完成所有网格线的绘制,逻辑更紧凑
内容的提问来源于stack exchange,提问作者Muhammed Argun
相关产品推荐
相关产品推荐

