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@4:0e01cbb95434, 2019-03-23 (annotated)
- Committer:
- kocemax
- Date:
- Sat Mar 23 12:07:33 2019 +0000
- Revision:
- 4:0e01cbb95434
- Parent:
- 3:fe856d0890ee
- Child:
- 5:12c179da4788
Added a reset feature, if button A is pressed after the game is over. Need to find a way to draw the targets for the game.
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 | 3:fe856d0890ee | 8 | int g_counterx = 1; |
| kocemax | 3:fe856d0890ee | 9 | int g_countery = 1; |
| kocemax | 2:006a2ddfabb6 | 10 | |
| kocemax | 2:006a2ddfabb6 | 11 | // Constructor |
| kocemax | 2:006a2ddfabb6 | 12 | Ball::Ball() |
| kocemax | 2:006a2ddfabb6 | 13 | { |
| kocemax | 3:fe856d0890ee | 14 | |
| kocemax | 2:006a2ddfabb6 | 15 | } |
| kocemax | 2:006a2ddfabb6 | 16 | |
| kocemax | 2:006a2ddfabb6 | 17 | // Destructor |
| kocemax | 2:006a2ddfabb6 | 18 | Ball::~Ball() |
| kocemax | 2:006a2ddfabb6 | 19 | { |
| kocemax | 2:006a2ddfabb6 | 20 | |
| kocemax | 2:006a2ddfabb6 | 21 | } |
| kocemax | 2:006a2ddfabb6 | 22 | |
| kocemax | 2:006a2ddfabb6 | 23 | void Ball::drawBall(N5110 &lcd) |
| kocemax | 2:006a2ddfabb6 | 24 | { |
| kocemax | 4:0e01cbb95434 | 25 | lcd.drawRect(g_xBall,g_yBall,1,1,FILL_BLACK); |
| kocemax | 2:006a2ddfabb6 | 26 | } |
| kocemax | 2:006a2ddfabb6 | 27 | |
| kocemax | 2:006a2ddfabb6 | 28 | void Ball::moveBall() |
| kocemax | 2:006a2ddfabb6 | 29 | { |
| kocemax | 2:006a2ddfabb6 | 30 | |
| kocemax | 3:fe856d0890ee | 31 | g_xBall += g_counterx; |
| kocemax | 3:fe856d0890ee | 32 | g_yBall -= g_countery; |
| kocemax | 2:006a2ddfabb6 | 33 | |
| kocemax | 4:0e01cbb95434 | 34 | if (g_xBall > 83) |
| kocemax | 2:006a2ddfabb6 | 35 | { |
| kocemax | 3:fe856d0890ee | 36 | g_counterx = -1; |
| kocemax | 3:fe856d0890ee | 37 | } |
| kocemax | 3:fe856d0890ee | 38 | else if(g_xBall < 1) |
| kocemax | 3:fe856d0890ee | 39 | { |
| kocemax | 3:fe856d0890ee | 40 | g_counterx = 1; |
| kocemax | 2:006a2ddfabb6 | 41 | } |
| kocemax | 3:fe856d0890ee | 42 | if (g_yBall < 1) |
| kocemax | 3:fe856d0890ee | 43 | { |
| kocemax | 3:fe856d0890ee | 44 | g_countery = -1; |
| kocemax | 3:fe856d0890ee | 45 | } |
| kocemax | 4:0e01cbb95434 | 46 | else if (g_yBall > 47) |
| kocemax | 2:006a2ddfabb6 | 47 | { |
| kocemax | 3:fe856d0890ee | 48 | g_countery = 1; |
| kocemax | 2:006a2ddfabb6 | 49 | } |
| kocemax | 3:fe856d0890ee | 50 | } |
| kocemax | 3:fe856d0890ee | 51 | |
| kocemax | 3:fe856d0890ee | 52 | void Ball::hitPad(Gamepad &pad) |
| kocemax | 3:fe856d0890ee | 53 | { |
| kocemax | 3:fe856d0890ee | 54 | Vector2D posBall = get_ballPos(pad); |
| kocemax | 3:fe856d0890ee | 55 | Vector2D posPad = pl.get_padPos(pad); |
| kocemax | 4:0e01cbb95434 | 56 | if (posBall.y == posPad.y - 1 && (posBall.x >= posPad.x && posBall.x <= posPad.x + 12)) |
| kocemax | 3:fe856d0890ee | 57 | { |
| kocemax | 3:fe856d0890ee | 58 | g_countery = !g_countery; |
| kocemax | 3:fe856d0890ee | 59 | 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 | 60 | } |
| kocemax | 3:fe856d0890ee | 61 | |
| kocemax | 3:fe856d0890ee | 62 | |
| kocemax | 2:006a2ddfabb6 | 63 | } |
| kocemax | 2:006a2ddfabb6 | 64 | |
| kocemax | 2:006a2ddfabb6 | 65 | Vector2D Ball::get_ballPos(Gamepad &pad) |
| kocemax | 2:006a2ddfabb6 | 66 | { |
| kocemax | 3:fe856d0890ee | 67 | Vector2D posBall = {g_xBall,g_yBall}; |
| kocemax | 2:006a2ddfabb6 | 68 | return posBall; |
| kocemax | 2:006a2ddfabb6 | 69 | } |
| kocemax | 2:006a2ddfabb6 | 70 | |
| kocemax | 4:0e01cbb95434 | 71 | void Ball::endCondition(Gamepad &pad, N5110 &lcd) |
| kocemax | 2:006a2ddfabb6 | 72 | { |
| kocemax | 2:006a2ddfabb6 | 73 | Vector2D posBall = get_ballPos(pad); |
| kocemax | 2:006a2ddfabb6 | 74 | Vector2D posPad = pl.get_padPos(pad); |
| kocemax | 3:fe856d0890ee | 75 | if (posBall.y > posPad.y) |
| kocemax | 2:006a2ddfabb6 | 76 | { |
| kocemax | 4:0e01cbb95434 | 77 | while (1) |
| kocemax | 4:0e01cbb95434 | 78 | { |
| kocemax | 4:0e01cbb95434 | 79 | lcd.clear(); |
| kocemax | 4:0e01cbb95434 | 80 | lcd.printString("You Lost",17,2); |
| kocemax | 4:0e01cbb95434 | 81 | lcd.printString("Press A",20,3); |
| kocemax | 4:0e01cbb95434 | 82 | lcd.printString("to restart",12,4); |
| kocemax | 4:0e01cbb95434 | 83 | wait(0.1); |
| kocemax | 4:0e01cbb95434 | 84 | lcd.refresh(); |
| kocemax | 4:0e01cbb95434 | 85 | if (pad.check_event(Gamepad::A_PRESSED) == true) |
| kocemax | 4:0e01cbb95434 | 86 | { |
| kocemax | 4:0e01cbb95434 | 87 | resetGame(); |
| kocemax | 4:0e01cbb95434 | 88 | break; |
| kocemax | 4:0e01cbb95434 | 89 | } |
| kocemax | 4:0e01cbb95434 | 90 | } |
| kocemax | 2:006a2ddfabb6 | 91 | } |
| kocemax | 4:0e01cbb95434 | 92 | } |
| kocemax | 4:0e01cbb95434 | 93 | |
| kocemax | 4:0e01cbb95434 | 94 | void Ball::resetGame() |
| kocemax | 4:0e01cbb95434 | 95 | { |
| kocemax | 4:0e01cbb95434 | 96 | g_xBall = WIDTH/2; |
| kocemax | 4:0e01cbb95434 | 97 | g_yBall = HEIGHT - GAP - 2; |
| kocemax | 4:0e01cbb95434 | 98 | g_counterx = 1; |
| kocemax | 4:0e01cbb95434 | 99 | g_countery = 1; |
| kocemax | 4:0e01cbb95434 | 100 | g_xBall += g_counterx; |
| kocemax | 4:0e01cbb95434 | 101 | g_yBall -= g_countery; |
| kocemax | 4:0e01cbb95434 | 102 | pl.padReset(); |
| kocemax | 2:006a2ddfabb6 | 103 | } |