通過PieceManager獲得的一個9*9的二維方塊Piece類的數組,其中我們值繪製1-8的格子,因為最外層的格子我們將會用來,畫線,效果如
現在我們可以通過這個數組來繪製基本的介面了
我們會使每一塊的小方塊之間有6個像素點的距離
繪製的代碼如下
protected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawBitmap(background, 0, 0, null);for (int i = 0; i < 8; i++) {for (int j = 0; j < 8; j++) {if(pieces[i][j] != null){Bitmap curImage = pieces[i][j].getImage();canvas.drawBitmap(curImage, startX + betweenLength/2 + i * (pieceWidth + betweenLength),startY + betweenLength/2 + j * (pieceHeight + betweenLength), null);}}}
現在主要就是判斷,我們到底點擊的是哪一個圖片了,首先我們根據點擊的範圍獲得點擊的方塊是數組中的哪一個元素,並對該點擊的方塊進行一系列的處理。我們會用一個長度為2的一維數組lastClick記錄我們上一次點擊的方塊在我們的二維數組中的腳標,如果我們是剛開局,或是已經消去了兩個時,我們會把上次點擊的記錄lastClick設定成初始化的值,lastClick中的兩個元素的值均為-1,否則,就把我們剛才點擊的方塊的腳標賦值給lastClick,當我們再次點擊一個方塊地區時,我們會根據此次點擊的地區的腳標來擷取在這個位置上Piece以擷取該位置片的Id,然後對比上次點擊的方塊地區中的圖片Id是否和本次的Id一樣,如果一樣,就消去,否則,lastClick就變為當前點擊的位置
public boolean onTouchEvent(MotionEvent event) {float touchX = event.getX();float touchY = event.getY();//當點擊在圖片地區才會有響應if(touchX > startX && touchX < startX+(pieceWidth+betweenLength)*columnNum && touchY > startY && touchY < startY+(pieceHeight+betweenLength)*rowNum){int x = (int)((touchX-startX)/(pieceWidth+betweenLength));int y = (int)((touchY-startY)/(pieceHeight+betweenLength));//首先判斷點擊的位置不是已經消失了的圖片的位置if(pieces[x][y] != null){//如果是剛開始玩或者已經銷毀了一對if(lastClick[0] == -1 && lastClick[1] == -1){lastClick[0] = x;lastClick[1] = y;}else{//兩次點擊的不是同一張圖片if(x != lastClick[0] || y != lastClick[1]){//若果兩個圖片相同if(pieces[x][y].getId() == pieces[lastClick[0]][lastClick[1]].getId()){pieces[x][y] = null;pieces[lastClick[0]][lastClick[1]] = null;lastClick[0] = -1;lastClick[1] = -1;invalidate();}//如果兩次點擊的圖片不相同,則把此次點擊的方塊的位置賦值給lastClickelse if(pieces[x][y].getId() != pieces[lastClick[0]][lastClick[1]].getId()){lastClick[0] = x;lastClick[1] = y;}}}}}elseSystem.out.println("哥們點跑偏了!... ...");return super.onTouchEvent(event);}