我有一个单元格矩阵(在我的情况下是按钮),如果我点击一个按钮,我需要检查附近的(加上形状)单元格是否为空,如果单元格是空的(只有一个可以) ,我需要交换两个单元格(空单元格和单击单元格)。 我现在做的是:
if(j < 3)
if (!fbarr[i, j + 1].Visible)
swap(fbarr[i, j], fbarr[i, j + 1]);
if(j > 0)
if (!fbarr[i, j - 1].Visible)
swap(fbarr[i, j], fbarr[i, j - 1]);
if(i < 3)
if (!fbarr[i + 1, j].Visible)
swap(fbarr[i, j], fbarr[i + 1, j]);
if(i > 0)
if (!fbarr[i - 1, j].Visible)
swap(fbarr[i, j], fbarr[i - 1, j]);
现在个人认为这很丑陋 有没有更好的方法来做到这一点? (如果重要的话,这是C#)
由于
答案 0 :(得分:1)
你目前的技术并不一定是坏的,它不够干。您还可以通过将偏移量转换为某种数据结构来使搜索空间更加明确。以下是使用元组的示例:
var offsets = new List<Tuple<int, int>>
{
Tuple.Create(0, 1),
Tuple.Create(0, -1),
Tuple.Create( 1, 0),
Tuple.Create(-1, 0)
};
foreach (var offset in offsets) {
int newI = i + offset.Item1;
int newJ = j + offset.Item2;
// New position must be within range
if (newI >= 0 && newI <= 3 && newJ >= 0 && newJ <= 3) {
if (!fbarr[newI, newJ].Visible) {
swap(fbarr[i, j], fbarr[newI, newJ]);
}
}
}