'Pogo Painter'迷你游戏的算法

时间:2013-06-25 13:25:37

标签: arrays algorithm math mathematical-optimization

我正在制作名为'Pogo Painter'的迷你游戏,我需要一些数学解决方案。下面是一个图像(用Paint制作)来说明它的全部内容。

每个不同颜色的四名球员必须要求平方才能获得积分。迷你游戏将与此类似:http://www.youtube.com/watch?v=rKCQfAlaRrc,但略有不同。玩家将被允许在操场周围跑动并声明任何方格,并且在模式关闭时收集点数。例如,在A3上声明蓝色方块将创建一个封闭的蓝色图案。

enter image description here

我应该声明什么样的变量以及如何检查模式是否已关闭?

如果您有解决方案,请回答:)

2 个答案:

答案 0 :(得分:2)

这是另一种(离散优化)方法来模拟您的问题。

<强>符号

将您的网格视为具有n ^ 2个节点的“图形”,并且长度为1的边(边缘连接两个相邻节点。)让节点编号为1:n ^ 2。 (为了便于表示,如果您愿意,可以使用双数组(x,y)表示每个节点。)

决策变量

有k种颜色,每个玩家一个(1到4)。 0是无人认领的细胞(白色)

X_ik = 1 if player k has claimed node i.  0 otherwise.

开始

X_i0 = 1 for all nodes i. 

所有节点都以白色(0)开头。

相邻集:如果两个节点i和j彼此相邻,则它们是“邻居”。 (任何给定的节点我最多可以有4个邻居:向上和向下向上。)

边缘变量: 我们现在可以定义一组新的边变量Y_ijk,它们用相同的颜色k连接两个相邻的节点(i和j)。

Y_ijk = 1 if neighboring nodes i and j are both of color k. 0 Otherwise.
(That is, X_ik = X_jk) for non-zero k.

我们现在有一个无向图。检查“关闭模式”与检测周期相同。

检测周期:

A simple DFS搜索会做,因为我们有无向周期。从每个彩色节点i开始,检查周期。如果路径引导您返回受访节点,则存在循环。您可以相应地奖励积分。

最后,在设计游戏时提出一个建议。您可以根据您检测到的“最长周期”奖励积分。最短周期得到4个点,每个边缘一个点(或者周期中每个节点一个点),哪个最适合你。

1 1
1 1    scores 4 points

1 1 1
1 1 1 scores 6 points

1 1 1
1 1 1
1 1    scores 8 points 

希望有所帮助。

答案 1 :(得分:0)

好,
这是很多文字,但很简单。

N-by-N square将作为游戏板满足。

  • 每次玩家声称一个正方形时,
    • 如果广场未附加到该玩家的任何方格,则必须为该方格指定唯一ID。
    • 如果附有方形,
      • 计算每个ID的邻居数量。 (参见下面的演示,看看这意味着什么)
      • 每组
        • patterns_count + = group_size - 1
      • 如果组数大于1
        • 更改该组的ID以及与其相关的每个其他方块,以便它们共享相同的ID

您必须记住哪些ID属于哪些玩家。

这就是你的例子中的内容

1 1 1 0 0 0 0 2 2
1 0 0 0 1 3 3 0 0
1 1 0 0 3 3 0 0 0
0 1 0 0 4 5 0 0 0
0 0 0 6 4 0 0 0 0
7 7 0 0 0 0 8 8 8 
0 7 7 0 9 8 8 0 8
A A 7 0 9 8 0 0 8
A 0 7 0 0 0 8 8 8

这就像蓝色抓住A-3

之后的结果
1 1 1 0 0 0 0 2 2
1 0 0 0 1 3 3 0 0
1 1 0 0 3 3 0 0 0
0 1 0 0 4 5 0 0 0
0 0 0 6 4 0 0 0 0
7 7 0 0 0 0 8 8 8 
0 7 7 0 9 8 8 0 8
A A 7 0 9 8 0 0 8
A 0 7 0 0 8 8 8 8

使用中的算法的更多示例

1 1 1 0
1 0 1 0 
1 1   0
0 0 0 0
  2 neighbours. 2x'1'
  1x closed pattern.
1 1 1 0 
1 0 1 0
1 1 1 0
0 0 0 0

--

1 1 1 0 0
1 0 1 0 0
1 1   0 0
1 0 1 0 0
1 1 1 0 0
  3 neighbours: 3x'1'
  2x closed patterns
1 1 1 0 0
1 0 1 0 0
1 1 1 0 0
1 0 1 0 0
1 1 1 0 0

--

1 1 1 0 0
1 0 1 0 0
1 1   2 2
0 0 2 0 2
0 0 2 2 2
  4 neighbours: 2x'1', 2x'2'
  2 Closed patterns
1 1 1 0 0
1 0 1 0 0
1 1 1 1 1
0 0 1 0 1
0 0 1 1 1

但我也认为这是一个封闭的模式。你没有给出任何关于什么应该被认为是什么以及什么不应该被描述的描述。

1 1 0
1 1 0
0 0 0

1 1 1
1 1 1
0 0 0

1 1 1
1 1 1
1 1