泡泡消除游戏难题

3
我被分配了一个任务,需要解决Bubble Breaker益智游戏的问题。这个游戏有两个部分:1.用户玩家;2.CPU玩家。我已经编写了用户玩家的代码,但是不知道CPU玩家应该如何玩才能获得最高分并完全清空棋盘。请问有人可以帮助我吗?
当游戏开始时,它会加载一个包含介于1和3之间整数的文件。1代表红色,2代表绿色,3代表黄色。
1111111111
2323333132
1131123222
2222222113
1111111111
1111111111
1111111111
1111111111

相邻的颜色应该被删除。

这个游戏。 请帮我通过给出提示来帮助我获得最高分的CPU玩家。 提前致谢。


1
你熟悉Alpha-Beta剪枝吗? - Greg Hewgill
这个游戏也被称为Poppit。(只是为了增加讨论)你对输入有任何限制吗?我认为最简单的解决方案是分支定界法。 - Stefan Mai
1
我不清楚这是否是一个编程问题。 - Gabe
您希望得到最佳解决方案吗?(例如,最少的步骤来解决它?) - st0le
3个回答

2
如果你只需要一个“好”的分数而不是完美的分数,你可以使用蒙特卡罗技术。基本思想是:随机选择一个位置进行点击,直到没有可能移除任何球为止。记住得分和点击位置。重复这个过程10000次,你就可以在大多数人中表现良好了。
如果你仍然需要更好的AI玩家,你可以将上面获得的最高分数作为下限。然后估计从某个位置可以达到的最大点数,如果这个数字小于“最佳随机分数”,你可以取消那个特定的尝试。

0
你可以将网格视为二维数组。
11...
23...

意思是

arr[0][0]=1; 
arr[0][1]=1; 
arr[1][0]=2; 
arr[1][1]=3; 

你可以通过以下方式检查相同颜色的存在:

//using arr[0][0] as the base point
if ( (arr[0][0])==(arr[0][1])) //look in your right
{
   //explode
}
if ( (arr[0][0])==(arr[1][0])) //look below
{
   //explode
}
if ( (arr[0][0])==(arr[1][1])) //look at lower right (diagonal)
{
   //explode
}

0
为了获得最佳分数,必须计算许多可能性。影响这些可能性的因素包括:
  1. 需要多少相邻的气泡才能爆炸?是3个气泡一排?4个气泡一排?还是5个?

  2. 另一个因素是您的气泡形成了多少种形式才能爆炸?仅水平形式?仅垂直形式?是否包括对角线?

  3. 第三个因素是您的网格大小。它有多大?

因此,在考虑这些因素后,将会有大量的可能性。

但是让我们尝试分析一个简单的例子。假设是2x2的网格,仅具有水平和垂直形式,需要2个气泡才能爆炸:

[a][b]
[c][d]

可能性有:a-b、c-d、a-c、b-d = 4种可能性。

它已经给出了4种可能性。

因此,使用一个4x4的网格,垂直和水平排列,并且要爆炸3个气泡,将会产生巨大的计算量。


气泡在4个可能的方向(N,S,W,E)中的一个或多个相邻。对角线附近的气泡不被视为相邻。 - devoidfeast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接