我尝试用C ++实现游戏Trax。 对于那些不知道的人:http://www.traxgame.com/about_rules.php
到目前为止,我已经建立了这个板,并创建了规则,我可以放置下一个Tile,以及允许设置哪个。 但现在,我正在努力赢得胜利的条件。 如你所见,我需要一行至少8个瓷砖..
我的第一个解决方案尝试包括许多if条件。这根本不可能。 所以我需要实现一个合适的算法..
我使用比特板的尝试非常复杂,所以我的问题是如果有一个更简单的方法,我现在只是想念。
Greets,MC
答案 0 :(得分:0)
我可以建议你使用递归。我可以误解你,但无论如何:
bool isWin(int i, int j, int length) {
if (length >= 8)
return true;
if (canMoveTo(i + 1, j)) {
if (isWin(i + 1, j, length + 1))
return true;
}
if (canMoveTo(i - 1, j)) {
if (isWin(i - 1, j, length + 1))
return true;
}
if (canMoveTo(i, j + 1)) {
if (isWin(i, j + 1, length + 1))
return true;
}
if (canMoveTo(i, j - 1)) {
if (isWin(i, j - 1, length + 1))
return true;
}
return false;
}
bool isWin(int i, int j) {
int length = 0;
isWin(i, j, length);
}
..
main() {
for (int i = 0; i < HEIGHT; ++i) {
for (int j = 0; j < WIDTH; ++j) {
if (isTilePresent(i, j)) {
if (isWin(i, j)) {
if (isRed(i, j))
std::cout << "Red is won!" << std::endl;
else
std::cout << "White is won!" << std::endl;
}
}
}
}
}
答案 1 :(得分:0)
对于这种游戏的东西为了方便起见,我会在图块表示中添加一个小位图
创建平铺地图
能够代表所有瓷砖的最小分辨率
我认为也可能 3x3 分辨率。你需要4种颜色:
从切片位图创建纸板位图,并使用A*从最后编辑的切片开始(也可能是4个邻居),并为每个玩家/路径起点(黄色)执行路径。当A *完成后,然后分析地图数据(橙色),找到地图中的最大数字(绿色中点)。这是A *填充停止的点(不需要搜索它)。然后重建最短路径回到起点(棕色)设置使用的地图点不可用。然后尝试再次重建路径,如果可以,然后闭环存在
计算已使用点的边界框,因此您需要min,max
x,y坐标x0,x1,y0,y1
(在图块中)。从这个if循环中你知道:
columns = x1-x0+1
rows = y1-y0+1
所以胜利条件只是来自
if
醇>
希望这有帮助,我在 Carcassonne 游戏中开发了这种闭环路径寻找/计数技术