上期我們測完了橫行的連線,這次要來偵測直行啦~~直行感覺上會比橫行還要難一些。
以第三層為例,之前是0、1、2,3、4、5,6、7、8,但現在要變成0、3、6,1、4、7,2、5、8,第一個for迴圈不用動,第二個的j一開始預設為等於i,再來每次都要增加j+層數,
ex:層數一樣假設為3,在第0層的時候,i=0 , j就會等於0,0+3=3,3+3=6。
這樣就可以達到我們要的效果了,結果如下:
弄完了直行跟橫行,兩條斜線就比較簡單啦~這邊依樣以層數為3舉例,仔細觀察會發現左上往右下的斜線是0、4、8,也就是層數+1後去加前一個數字(從0開始)
而右上往左下的斜線是2、4、6,這邊就變成層數-1後去加前一個數字(從層數-1開始)
就是這個樣子:
private void checkLine() {
int iButtonCheck = 0; //確定幾顆按鈕被點擊,(當整排按鈕被點擊數=層數時)=連線
int iline = 0;
//橫排
for (int i = 0; i < m_iSize; i++) {
iButtonCheck = 0;
for (int j = i * m_iSize; j < m_iSize * (i + 1); j++) {
if (m_alBingoButtons.get(j).isSelected() == false) {//有任一格false就連線失敗
break;
} else if (m_alBingoButtons.get(j).isSelected() == true) {
iButtonCheck++;
}
}
if (iButtonCheck == m_iSize) {
iline++;
}
}
//直排
for (int i = 0; i < m_iSize; i++) {
iButtonCheck = 0;
for (int j = i; j < m_iSize * (m_iSize - 1) + i + 1; j = j + m_iSize) {
if (m_alBingoButtons.get(j).isSelected() == false) {//有任一格false就連線失敗
break;
} else if (m_alBingoButtons.get(j).isSelected() == true) {
iButtonCheck++;
}
}
if (iButtonCheck == m_iSize) {
iline++; //加線
}
}
//斜線-左上往右下
iButtonCheck = 0;
for (int i = 0; i < m_iSize * m_iSize; i = i + m_iSize + 1) {
if (m_alBingoButtons.get(i).isSelected() == false) {//有任一格false就連線失敗
break;
} else if (m_alBingoButtons.get(i).isSelected() == true) {
iButtonCheck++;
}
}
if (iButtonCheck == m_iSize) {
iline++; //加線
}
//斜線-右上往左下
iButtonCheck = 0;
for (int i = m_iSize - 1; i <= m_iSize * (m_iSize - 1); i = i + m_iSize - 1) {
if (m_alBingoButtons.get(i).isSelected() == false) {//有任一格false就連線失敗
break;
} else if (m_alBingoButtons.get(i).isSelected() == true) {
iButtonCheck++;
}
}
if (iButtonCheck == m_iSize) {
iline++; //加線
}
Log.i("LogTest", "連線數:" + String.valueOf(iline));
}
這樣就可以偵測所有的連線數啦~