Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Ball/Ball.cpp@5:12c179da4788, 2019-03-26 (annotated)
- Committer:
- kocemax
- Date:
- Tue Mar 26 09:16:35 2019 +0000
- Revision:
- 5:12c179da4788
- Parent:
- 4:0e01cbb95434
- Child:
- 6:39bda45efeed
Made a struct to store centerpoints, from which I can generate the map by storing the x and y in a struct within a vector. Now need to introduce collision between bricks and ball.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kocemax | 2:006a2ddfabb6 | 1 | #include "Ball.h" |
kocemax | 2:006a2ddfabb6 | 2 | #include "PlayerControl.h" |
kocemax | 2:006a2ddfabb6 | 3 | |
kocemax | 4:0e01cbb95434 | 4 | PlayerControl pl; |
kocemax | 4:0e01cbb95434 | 5 | |
kocemax | 3:fe856d0890ee | 6 | int g_xBall = WIDTH/2; // draw ball in the middle of the columns initially |
kocemax | 3:fe856d0890ee | 7 | int g_yBall = HEIGHT - GAP - 2; // draw ball close to the bottom of the LCD |
kocemax | 2:006a2ddfabb6 | 8 | |
kocemax | 2:006a2ddfabb6 | 9 | // Constructor |
kocemax | 2:006a2ddfabb6 | 10 | Ball::Ball() |
kocemax | 2:006a2ddfabb6 | 11 | { |
kocemax | 5:12c179da4788 | 12 | _counterx = 1; |
kocemax | 5:12c179da4788 | 13 | _countery = 1; |
kocemax | 2:006a2ddfabb6 | 14 | } |
kocemax | 2:006a2ddfabb6 | 15 | |
kocemax | 2:006a2ddfabb6 | 16 | // Destructor |
kocemax | 2:006a2ddfabb6 | 17 | Ball::~Ball() |
kocemax | 2:006a2ddfabb6 | 18 | { |
kocemax | 2:006a2ddfabb6 | 19 | |
kocemax | 2:006a2ddfabb6 | 20 | } |
kocemax | 2:006a2ddfabb6 | 21 | |
kocemax | 2:006a2ddfabb6 | 22 | void Ball::drawBall(N5110 &lcd) |
kocemax | 2:006a2ddfabb6 | 23 | { |
kocemax | 4:0e01cbb95434 | 24 | lcd.drawRect(g_xBall,g_yBall,1,1,FILL_BLACK); |
kocemax | 2:006a2ddfabb6 | 25 | } |
kocemax | 2:006a2ddfabb6 | 26 | |
kocemax | 2:006a2ddfabb6 | 27 | void Ball::moveBall() |
kocemax | 2:006a2ddfabb6 | 28 | { |
kocemax | 2:006a2ddfabb6 | 29 | |
kocemax | 5:12c179da4788 | 30 | g_xBall += _counterx; |
kocemax | 5:12c179da4788 | 31 | g_yBall -= _countery; |
kocemax | 2:006a2ddfabb6 | 32 | |
kocemax | 4:0e01cbb95434 | 33 | if (g_xBall > 83) |
kocemax | 2:006a2ddfabb6 | 34 | { |
kocemax | 5:12c179da4788 | 35 | _counterx = -1; |
kocemax | 3:fe856d0890ee | 36 | } |
kocemax | 3:fe856d0890ee | 37 | else if(g_xBall < 1) |
kocemax | 3:fe856d0890ee | 38 | { |
kocemax | 5:12c179da4788 | 39 | _counterx = 1; |
kocemax | 2:006a2ddfabb6 | 40 | } |
kocemax | 3:fe856d0890ee | 41 | if (g_yBall < 1) |
kocemax | 3:fe856d0890ee | 42 | { |
kocemax | 5:12c179da4788 | 43 | _countery = -1; |
kocemax | 3:fe856d0890ee | 44 | } |
kocemax | 4:0e01cbb95434 | 45 | else if (g_yBall > 47) |
kocemax | 2:006a2ddfabb6 | 46 | { |
kocemax | 5:12c179da4788 | 47 | _countery = 1; |
kocemax | 2:006a2ddfabb6 | 48 | } |
kocemax | 3:fe856d0890ee | 49 | } |
kocemax | 3:fe856d0890ee | 50 | |
kocemax | 3:fe856d0890ee | 51 | void Ball::hitPad(Gamepad &pad) |
kocemax | 3:fe856d0890ee | 52 | { |
kocemax | 3:fe856d0890ee | 53 | Vector2D posBall = get_ballPos(pad); |
kocemax | 3:fe856d0890ee | 54 | Vector2D posPad = pl.get_padPos(pad); |
kocemax | 4:0e01cbb95434 | 55 | if (posBall.y == posPad.y - 1 && (posBall.x >= posPad.x && posBall.x <= posPad.x + 12)) |
kocemax | 3:fe856d0890ee | 56 | { |
kocemax | 5:12c179da4788 | 57 | _countery = !_countery; |
kocemax | 5:12c179da4788 | 58 | //printf("\nball x = %f, ball y = %f \n pad x = %f, pad y = %f ",posBall.x, posBall.y, posPad.x, posPad.y); |
kocemax | 2:006a2ddfabb6 | 59 | } |
kocemax | 3:fe856d0890ee | 60 | |
kocemax | 3:fe856d0890ee | 61 | |
kocemax | 2:006a2ddfabb6 | 62 | } |
kocemax | 2:006a2ddfabb6 | 63 | |
kocemax | 2:006a2ddfabb6 | 64 | Vector2D Ball::get_ballPos(Gamepad &pad) |
kocemax | 2:006a2ddfabb6 | 65 | { |
kocemax | 3:fe856d0890ee | 66 | Vector2D posBall = {g_xBall,g_yBall}; |
kocemax | 2:006a2ddfabb6 | 67 | return posBall; |
kocemax | 2:006a2ddfabb6 | 68 | } |
kocemax | 2:006a2ddfabb6 | 69 | |
kocemax | 4:0e01cbb95434 | 70 | void Ball::endCondition(Gamepad &pad, N5110 &lcd) |
kocemax | 2:006a2ddfabb6 | 71 | { |
kocemax | 2:006a2ddfabb6 | 72 | Vector2D posBall = get_ballPos(pad); |
kocemax | 2:006a2ddfabb6 | 73 | Vector2D posPad = pl.get_padPos(pad); |
kocemax | 3:fe856d0890ee | 74 | if (posBall.y > posPad.y) |
kocemax | 2:006a2ddfabb6 | 75 | { |
kocemax | 4:0e01cbb95434 | 76 | while (1) |
kocemax | 4:0e01cbb95434 | 77 | { |
kocemax | 4:0e01cbb95434 | 78 | lcd.clear(); |
kocemax | 4:0e01cbb95434 | 79 | lcd.printString("You Lost",17,2); |
kocemax | 4:0e01cbb95434 | 80 | lcd.printString("Press A",20,3); |
kocemax | 4:0e01cbb95434 | 81 | lcd.printString("to restart",12,4); |
kocemax | 4:0e01cbb95434 | 82 | wait(0.1); |
kocemax | 4:0e01cbb95434 | 83 | lcd.refresh(); |
kocemax | 4:0e01cbb95434 | 84 | if (pad.check_event(Gamepad::A_PRESSED) == true) |
kocemax | 4:0e01cbb95434 | 85 | { |
kocemax | 4:0e01cbb95434 | 86 | resetGame(); |
kocemax | 4:0e01cbb95434 | 87 | break; |
kocemax | 4:0e01cbb95434 | 88 | } |
kocemax | 4:0e01cbb95434 | 89 | } |
kocemax | 2:006a2ddfabb6 | 90 | } |
kocemax | 4:0e01cbb95434 | 91 | } |
kocemax | 4:0e01cbb95434 | 92 | |
kocemax | 4:0e01cbb95434 | 93 | void Ball::resetGame() |
kocemax | 4:0e01cbb95434 | 94 | { |
kocemax | 4:0e01cbb95434 | 95 | g_xBall = WIDTH/2; |
kocemax | 4:0e01cbb95434 | 96 | g_yBall = HEIGHT - GAP - 2; |
kocemax | 5:12c179da4788 | 97 | _counterx = 1; |
kocemax | 5:12c179da4788 | 98 | _countery = 1; |
kocemax | 5:12c179da4788 | 99 | g_xBall += _counterx; |
kocemax | 5:12c179da4788 | 100 | g_yBall -= _countery; |
kocemax | 4:0e01cbb95434 | 101 | pl.padReset(); |
kocemax | 2:006a2ddfabb6 | 102 | } |