private void ClearEmptyCells(GraphicsBalloon[,] board) { int row; int col; Queue<GraphicsBalloon> baloonsToPop = new Queue<GraphicsBalloon>(); for (col = 7; col >= 0; col--) { for (row = 7; row >= 0; row--) { if (!board[row, col].IsPopped) { baloonsToPop.Enqueue(board[row, col]); board[row, col].Pop(); } } row = 7; while (baloonsToPop.Count > 0) { board[row, col] = baloonsToPop.Dequeue(); board[row, col].Unpop(); Grid.SetRow(board[row, col], row); Grid.SetColumn(board[row, col], col); row--; } baloonsToPop.Clear(); } }
public void Pop(int row, int col, GraphicsBalloon[,] board) { if (board == null) { throw new ArgumentNullException("board"); } PopBalloons(row, col, board, board[row, col].Value, 8); ClearEmptyCells(board); }
protected override void PopBalloons(int row, int col, GraphicsBalloon[,] board, int cellValue, int boardSize) { if ((row >= 0 && row < boardSize && col >= 0 && col < boardSize) && board[row, col].Value == cellValue && !board[row, col].IsPopped) { board[row, col].Pop(); PopBalloons(row - 1, col, board, cellValue, boardSize); // Up PopBalloons(row + 1, col, board, cellValue, boardSize); // Down PopBalloons(row, col + 1, board, cellValue, boardSize); // Left PopBalloons(row, col - 1, board, cellValue, boardSize); // Right } }
protected override void PopBalloons(int row, int col, GraphicsBalloon[,] board, int cellValue, int boardSize) { int upperRow = row; int lowerRow = row; int leftCol = col; int rightCol = col; if (row > 0) upperRow--; if (row < boardSize - 1) lowerRow++; if (col > 0) leftCol--; if (col < boardSize - 1) rightCol++; for (int currentRow = upperRow; currentRow <= lowerRow; currentRow++) { for (int currentCol = leftCol; currentCol <= rightCol; currentCol++) { board[currentRow, currentCol].Pop(); } } }
protected abstract void PopBalloons(int row, int col, GraphicsBalloon[,] board, int cellValue, int boardSize);