这是一款经典游戏。想用我自己的话解释游戏,但维基做得更好,
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
类似于我应该做的事情。
答案 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阵列中。