算法解决点和线问题?

时间:2011-07-07 05:56:14

标签: java android algorithm graph

这是一款经典游戏。想用我自己的话解释游戏,但维基做得更好,

http://en.wikipedia.org/wiki/Dots_and_Boxes

我正在尝试将此游戏创建为2人游戏,因此到目前为止还不需要AI。

但是对于使用什么数据结构和算法感到困惑, 我将所有点都保存为数组中的坐标, 例如 [X1,Y1,X2,Y2,X3,Y3,X4,Y4,...] 其中x1,y1成对并协调,

我使用的是java(Android),存储坐标的更好方法是什么? 上面的方法似乎太基础了,以后会使事情变得复杂。

规划对象数组,其中每个对象包含x,y坐标和其他一些信息 在对象中。

我应该用什么算法检查周期,即知道,
由玩家移动已经关闭了积分。这是一个图形问题吗?

我必须寻找解决此类问题的任何提示。

PS:这是现在的2人游戏,因此不担心计算机移动,
但更关心的是决定最后一步是否与点数有关 (基本上创建了一个循环?,关闭框)

我查了一下,
http://en.wikipedia.org/wiki/Flood_fill

类似于我应该做的事情。

3 个答案:

答案 0 :(得分:0)

您可以使用方形类,并在二维方形对象数组上拥有所有游戏结构。

public class Square {
     boolean up;
     boolean right;
     boolean down;
     boolean left;

    private boolean isClosed() {
        return up && right && down && left;
    }
}

private static final int TABLE_SIZE = 5;

Square [][] table = new Square[TABLE_SIZE][TABLE_SIZE];

所有移动影响2平方(外线除外),将其状态设置为真,并且方形控制也关闭;

 // draw line  
 table[1][1].right = true;
 table[2][1].left = true;

 // Check for closed
 table[1][1].isClosed();
 table[2][1].isClosed();

我的代码不是很好,是为了显示算法而编写的。

答案 1 :(得分:0)

电路板的关键元素是 box lines 。我认为,这些点只是视觉标记,特别是当你用笔和纸玩时。

模型电路板和方框(方块)。盒子的可视化是(1)四个点,(2)到两个不同颜色的线/边框和(3)中心的一个字母。

Board类的实例有一些(4,6,9)Box个实例。 Box的二维数组将是足够的。这样一个阵列的优点是很容易识别相邻的盒子(如果玩家绘制一行,你可能需要它,因为它可能影响两个盒子)

同样,不要模拟点。 BoxPainter可以在屏幕上绘制它们。

什么时候关闭一个框? - 当它的所有四个边框都标记为时。向isFilled()类添加一个简单的Box方法,并在每个玩家移动后在所有Box个实例上调用该方法。

答案 2 :(得分:0)

只需跟踪线条的位置即可。正如安德烈亚斯所提到的那样,除了作为画线的视觉辅助之外,这些圆点没有用处。

每当玩家划线时,你应该检查是否有一个盒子。您可以跟踪数组中的框,也可以不跟踪。对于游戏,您可能希望跟踪它们以及作为UI的一部分得分的玩家。但就游戏而言,没有必要存放盒子。

可以轻松地将线存储在2D阵列中。