日期:2014-05-18  浏览次数:20808 次

请教一个,4*4方格游戏的算法问题
1 2 3 4
  5 6 7 8
  9 10 11 12
  13 14 15 16

这样的一个 4×4方格,当点击其中一个方格的时候,周围的方格变红色,被点击的方格为绿色!
比如点1,就是2,5,6,变红色,1变绿色,
点6就是1,2,3,5,7,9,10,11,变绿色,6变红色~
应该怎么写算法啊?
最好用C#实现~

------解决方案--------------------
只能想到一个比较笨的办法,不能说是算法,期待学习,盼高手现身!
C# code

int c = 所点数字;
int x = c % 4; //取所在列
int y = Math.Ceiling(c / 4); //取所在行

int[] r;
r[0] = ((y - 2) * 4) + x; //上数
r[1] = ((y - 0) * 4) + x; //下数
r[2] = ((y - 1) * 4) + x - 1; //左数
r[3] = ((y - 1) * 4) + x + 1; //右数
r[4] = ((y - 2) * 4) + x - 1; //上左数
r[5] = ((y - 2) * 4) + x + 1; //上右数
r[6] = ((y - 0) * 4) + x - 1; //下左数
r[7] = ((y - 0) * 4) + x + 1; //下右数

for (int i = 0; i < r.Length; i++)
{
    if (r[i] % 4 != 0 && (r[i] - 1) % 4 != 0 && r[i] > 0 && r[i] < 16)
    {
        // 设置r[i]的颜色
    }
}

------解决方案--------------------
C# code

static void Main(string[] args)
{
    Console.WriteLine(fun(2, 3));
}
static string fun(int x, int y)
{
    string s = null;
    int[,] a = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 } };
    for(int i = x - 1;i < x + 2;i++)
        for (int j = y - 1; j < y + 2; j++)
        {
            if (i < 0 || j < 0 || i > 3 || j > 3)
                continue;
            if (i == x && j == y)
                s += a[i, j] + " = red\n";
            else
                s += a[i, j] + " = green\n";
        }
    return s;
}