2012-12-17 101 views
1

我目前有一个网格和线条,将在网格中的点之间绘制一个程序。它使用标准绘制。我希望限制线条的长度,以便它们只能从相邻点出发,但不知道如何做到这一点。标准绘制线的限制长度

感谢

StdDraw.setCanvasSize(400, 400); 
StdDraw.setXscale(0, 10); 
StdDraw.setYscale(0, 10);  

//dots 
double radius = .15; 
double spacing = 2.0; 

for (int i = 0; i <= 4; i++) { 
    for (int j = 0; j <= 4; j++) { 
     StdDraw.setPenColor(StdDraw.GRAY); 
     StdDraw.filledCircle(i * spacing, j * spacing, radius); 
    } 
} 
StdDraw.setPenColor(StdDraw.BLUE); 
StdDraw.text(0, 9.5, player1_name); 
StdDraw.setPenColor(StdDraw.RED); 
StdDraw.text(5, 9.5, player2_name); 
int turn = 1; 
    for (int i = 0; i <= 40; i++) { 
     if (turn % 2 == 0) 
      StdDraw.setPenColor(StdDraw.RED); 
     else 
      StdDraw.setPenColor(StdDraw.BLUE); 

     while(!StdDraw.mousePressed()) { } 
     double x = StdDraw.mouseX(); 
     double y = StdDraw.mouseY(); 
    System.out.println(x + " " + y); 
     StdDraw.setPenRadius(.01); 
     StdDraw.show(200); 
       while(!StdDraw.mousePressed()) { } 
       double x2 = StdDraw.mouseX(); 
       double y2 = StdDraw.mouseY(); 
       StdDraw.show(200); 
double xround = Math.round(x); 
double yround = Math.round(y); 
double x2round = Math.round(x2); 
double y2round = Math.round(y2); 
    int xroundb = (int) xround; 
    int yroundb = (int) yround; 
    int x2roundb = (int) x2round; 
    int y2roundb = (int) y2round; 
StdDraw.line(xround, yround, x2round, y2round); 
System.out.println("Line Drawn"); 
StdDraw.show(); 
+0

@RohitJain我的经验是,当代码被破坏时,人们很少知道哪个部分是相关的。这就是为什么我通常会建议:“为了更好地帮助,请发布[SSCCE](http://sscce.org/)。” –

回答

1

啊,我得到它。你不是问实际工作的line方法,你需要逻辑,如果没有选择相邻点,line不会被调用。那么,首先我们需要知道哪些相邻连接是允许的。那是我们可以有Vertical吗?水平?对角线?我会解释每一个以防万一

所以你有spacing = 2.0。那么,这应该足以检查邻接关系。

if (Math.abs(x2round - xround) > spacing) { 
    // don't draw 
} else if (Math.abs(y2round - yround) > spacing)) { 
    // don't draw 
} else if (Math.abs(y2round - yround) > 0.0) && Math.abs(x2round - xround) > 0.0) { 
    // don't draw if diagonal connections are forbidden 
    // if diagonal is allowed, remove this else if condition 
} else { 
    StdDraw.line(xround, yround, x2round, y2round); 
} 

所以如果你不绘制,那么你必须执行你的游戏逻辑。也许玩家没有回合。也许玩家有机会选择相邻的点。它是由你决定。由于四舍五入,比较双倍总是有点疯狂,所以不是使用0.0,而是选择一个非常小的epsilon double值来确保捕获所有情况。