我正在制作名为'Pogo Painter'的迷你游戏,我需要一些数学解决方案。下面是一个图像(用Paint制作)来说明它的全部内容。
每个不同颜色的四名球员必须要求平方才能获得积分。迷你游戏将与此类似:http://www.youtube.com/watch?v=rKCQfAlaRrc,但略有不同。玩家将被允许在操场周围跑动并声明任何方格,并且在模式关闭时收集点数。例如,在A3上声明蓝色方块将创建一个封闭的蓝色图案。
我应该声明什么样的变量以及如何检查模式是否已关闭?
如果您有解决方案,请回答:)
答案 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属于哪些玩家。
这就是你的例子中的内容
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