绘制细胞区域Sudoku

时间:2016-12-05 19:57:14

标签: android algorithm cell paint sudoku

我想绘制所选数字库所属的方格。

此代码用于打印行和列:

              //Pintem la fila del nombre seleccionat
            for (int i = 0; i < parent.getChildCount(); i++) {
                TextView child = (TextView) parent.getChildAt(i);
                if ((i/9)==x) {
                    //child.setBackgroundColor(Color.parseColor("#75FFEE"));
                    child.setBackground(getDrawable(R.drawable.contornfonsblau));
                }
            }

            //Pintem la columna del nombre seleccionat
            for (int i = 0; i < parent.getChildCount(); i++) {
                TextView child = (TextView) parent.getChildAt(i);
                if ((i%9)==y) {
                    //child.setBackgroundColor(Color.parseColor("#75FFEE"));
                    child.setBackground(getDrawable(R.drawable.contornfonsblau));
                }
            }

我想和广场一样。

EXAMPLE

1 个答案:

答案 0 :(得分:0)

你可以通过使用整数除法将小方块的x和y坐标除以3来找到一个数字所属的大方块,因为大方块是3x3小方块。

所以,做同样的比较,但事先将双方除以3。您还需要同时检查x和y:

for (int i = 0; i < parent.getChildCount(); i++) {
    TextView child = (TextView) parent.getChildAt(i);
    if ((((i/9)/3)==(x/3)) && (((i%9)/3)==(y/3))) {
       child.setBackground(getDrawable(R.drawable.contornfonsblau));
    }
}

当然,(i/9)/3可以简化为i/27,但是否更具可读性是值得商榷的。

您可以将所有3个测试组合成一个for循环:

for (int i = 0; i < parent.getChildCount(); i++) {
    TextView child = (TextView) parent.getChildAt(i);
    if(((i/9)==x) ||
       ((i%9)==y) ||
       ((((i/9)/3)==(x/3)) && (((i%9)/3)==(y/3)))) {
       child.setBackground(getDrawable(R.drawable.contornfonsblau));
    }
}