Stap 8: Hoe werken de bal positie
De updateBallPosition() is ontslagen uit de owerflow interrupt van de timer 1 en wordt gebruikt voor het bijwerken van de positie van de bal.
Hier zijn we:
//change ball position depending on the ball directionballY = ballCurrentPosition[0] + ballDirection[0];ballX = ballCurrentPosition[1] + ballDirection[1];
deze instructies werken de twee variabelen ballX en ballY volgens de ballDirection -variabele.
Zoals hierboven uiteengezet, kan de ballDirection deze waarden aannemen:
Direction//Y: 0 = STOP, -1 = UP, 1 = down //X: 0 = STOP, 1 = RIGHT, -1 = LEFT int ballDirection[2] = {1, 0};//Y, X indicates the direction where the ball is going
Dus, in eerste instantie voegen we de huidige positie van de bal aan de bal richting.
Dit maakt ze eenvoudiger manier om de bal richting omdat de matrix rij, bijvoorbeeld, van 0 tot en met 5 van boven naar beneden , gaat terwijl de matrix COL van 0 tot en met 6 van gaat van links naar rechts.
Dit betekent dat als de ballDirection is d'Ancona(A4-0104/95) naar {-1,0},
ballY = ballCurrentPosition[0] + ballDirection[0];//ballCurrentPosition[0] + 1 = ball goes downballX = ballCurrentPosition[1] + ballDirection[1];//ballCurrentPosition[1] + 0 = ball takes is vertical position.
We hebben nu bijgewerkt de variabelen BallX en BallY , maar niet de feitelijk positie van de bal in de matrix.
Dit omdat we willen dat eerst om te zien als de bal enkele botsing met de matrix grens of de bar.
//checkCollision if (ballY >= MATRIX_ROW - 1) { // ball touched bottom ballY = MATRIX_ROW - 1; if (ballX >= MATRIX_COL - 1) { ballX = MATRIX_COL - 1; } if (ballX <= 0) { ballX = 0; } if (ballX == barCurrentPosition[0][1] || ballX == barCurrentPosition[1][1]) { //ball touched bar ballDirection[0] = -1; ballDirection[1] = random(-1, 2); score++; } else { //ball touched bottom = END //END GAME ballDirection[0] = 0; ballDirection[1] = 0; gameStarted = false; }
} else if (ballY <= 0) { //ball touch top ballY = 0; if (ballX >= MATRIX_COL - 1) { ballX = MATRIX_COL - 1; } if (ballX <= 0) { ballX = 0; } ballDirection[0] = 1; ballDirection[1] = random(-1, 2); } else if (ballX >= MATRIX_COL) { //ball touched right ballX = MATRIX_COL - 1; if (ballY >= MATRIX_ROW - 1) { ballY = MATRIX_ROW - 1; } if (ballY <= 0) { ballY = 0 ; } ballDirection[1] = -1;
} else if (ballX <= 0) { //ball touched left ballX = 0; if (ballY >= MATRIX_ROW - 1) { ballY = MATRIX_ROW - 1; } if (ballY <= 0) { ballY = 0; } ballDirection[1] = 1; }
Deze functies komen overeen met de positie van de bal aan de grenzen van de matrix.
Als de ballen raakt de bovenste en linker- of rechterrand, stuiteren de ballen omdat wij zijn richting veranderen.
Nu bijwerken we de matrixState met de nieuwe positie van de bal op deze manier:
//update position ballNewPosition[0] = ballY;ballNewPosition[1] = ballX;//delete current ball PositionmatrixState[ballCurrentPosition[0]][ballCurrentPosition[1]] = 0; //set current bar position to new positionballCurrentPosition[0] = ballNewPosition[0];ballCurrentPosition[1] = ballNewPosition[1];//show new bar PositionmatrixState[ballNewPosition[0]][ballNewPosition[1]] = 1;
We schakelt de vorige positie van de bal eerst door te schakelen haar positie in de matrix matrixState.
Vervolgens stellen we de nieuwe bal positie in de matrixState.