![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
more comments
Dependencies: TSI TextLCD mbed
Fork of CarGame by
main.cpp@1:d55966246784, 2013-05-03 (annotated)
- Committer:
- DanielOJ
- Date:
- Fri May 03 10:52:36 2013 +0000
- Revision:
- 1:d55966246784
- Parent:
- 0:0e59bc451a57
- Child:
- 2:f5abfdfe9e0b
CAR GAME LOLOLOL
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DanielOJ | 0:0e59bc451a57 | 1 | #include "mbed.h" |
DanielOJ | 0:0e59bc451a57 | 2 | #include "TextLCD.h" |
DanielOJ | 0:0e59bc451a57 | 3 | #include "TSISensor.h" |
DanielOJ | 0:0e59bc451a57 | 4 | |
DanielOJ | 0:0e59bc451a57 | 5 | TextLCD lcd(PTD1,PTD3,PTD2,PTD0,PTD5,PTA13); // rs, e, d4-d7 |
DanielOJ | 0:0e59bc451a57 | 6 | // number of seconds to wait between each frame movement |
DanielOJ | 0:0e59bc451a57 | 7 | float frameTime = 1; |
DanielOJ | 0:0e59bc451a57 | 8 | // number of frames since speed increase |
DanielOJ | 0:0e59bc451a57 | 9 | int steps = 0; |
DanielOJ | 0:0e59bc451a57 | 10 | // number of frames in total |
DanielOJ | 0:0e59bc451a57 | 11 | int score = 0; |
DanielOJ | 0:0e59bc451a57 | 12 | // size of course |
DanielOJ | 0:0e59bc451a57 | 13 | int courseSize = 48; |
DanielOJ | 0:0e59bc451a57 | 14 | |
DanielOJ | 0:0e59bc451a57 | 15 | int main() |
DanielOJ | 0:0e59bc451a57 | 16 | { |
DanielOJ | 0:0e59bc451a57 | 17 | // set up course |
DanielOJ | 0:0e59bc451a57 | 18 | char course[courseSize][2]; |
DanielOJ | 0:0e59bc451a57 | 19 | |
DanielOJ | 0:0e59bc451a57 | 20 | // blank course to start with |
DanielOJ | 0:0e59bc451a57 | 21 | for(int i = 0; i < courseSize; i++) { |
DanielOJ | 0:0e59bc451a57 | 22 | course[i][0] = ' '; |
DanielOJ | 0:0e59bc451a57 | 23 | course[i][1] = ' '; |
DanielOJ | 0:0e59bc451a57 | 24 | } |
DanielOJ | 0:0e59bc451a57 | 25 | |
DanielOJ | 0:0e59bc451a57 | 26 | // obstacles |
DanielOJ | 0:0e59bc451a57 | 27 | course[3][0] = '0'; |
DanielOJ | 0:0e59bc451a57 | 28 | course[6][1] = '0'; |
DanielOJ | 0:0e59bc451a57 | 29 | course[9][1] = '0'; |
DanielOJ | 0:0e59bc451a57 | 30 | course[12][0] = '0'; |
DanielOJ | 0:0e59bc451a57 | 31 | course[15][1] = '0'; |
DanielOJ | 0:0e59bc451a57 | 32 | course[16][1] = '0'; |
DanielOJ | 0:0e59bc451a57 | 33 | course[19][0] = '0'; |
DanielOJ | 0:0e59bc451a57 | 34 | course[21][1] = '0'; |
DanielOJ | 0:0e59bc451a57 | 35 | course[23][0] = '0'; |
DanielOJ | 0:0e59bc451a57 | 36 | course[24][0] = '0'; |
DanielOJ | 0:0e59bc451a57 | 37 | course[29][1] = '0'; |
DanielOJ | 0:0e59bc451a57 | 38 | course[33][0] = '0'; |
DanielOJ | 0:0e59bc451a57 | 39 | course[35][0] = '0'; |
DanielOJ | 0:0e59bc451a57 | 40 | course[37][0] = '0'; |
DanielOJ | 0:0e59bc451a57 | 41 | course[40][1] = '0'; |
DanielOJ | 0:0e59bc451a57 | 42 | course[43][0] = '0'; |
DanielOJ | 0:0e59bc451a57 | 43 | course[46][1] = '0'; |
DanielOJ | 0:0e59bc451a57 | 44 | |
DanielOJ | 0:0e59bc451a57 | 45 | // set up LED output |
DanielOJ | 0:0e59bc451a57 | 46 | PwmOut led(LED_GREEN); |
DanielOJ | 0:0e59bc451a57 | 47 | // set up touch sensor to control game |
DanielOJ | 0:0e59bc451a57 | 48 | TSISensor tsi; |
DanielOJ | 0:0e59bc451a57 | 49 | |
DanielOJ | 0:0e59bc451a57 | 50 | int gameover = 0; |
DanielOJ | 0:0e59bc451a57 | 51 | |
DanielOJ | 0:0e59bc451a57 | 52 | // game loop |
DanielOJ | 0:0e59bc451a57 | 53 | while(1) { |
DanielOJ | 0:0e59bc451a57 | 54 | |
DanielOJ | 0:0e59bc451a57 | 55 | // print current course on lcd |
DanielOJ | 0:0e59bc451a57 | 56 | for(int i = 15; i >= 0; i--) { |
DanielOJ | 0:0e59bc451a57 | 57 | lcd.locate(i,0); |
DanielOJ | 0:0e59bc451a57 | 58 | lcd.printf("%c",course[i][0]); |
DanielOJ | 0:0e59bc451a57 | 59 | lcd.locate(i,1); |
DanielOJ | 0:0e59bc451a57 | 60 | lcd.printf("%c",course[i][1]); |
DanielOJ | 0:0e59bc451a57 | 61 | } |
DanielOJ | 0:0e59bc451a57 | 62 | |
DanielOJ | 0:0e59bc451a57 | 63 | |
DanielOJ | 0:0e59bc451a57 | 64 | // create next frame of course |
DanielOJ | 0:0e59bc451a57 | 65 | // course loops round infinitely |
DanielOJ | 0:0e59bc451a57 | 66 | |
DanielOJ | 0:0e59bc451a57 | 67 | // these are rows that will be pushed off top of screen |
DanielOJ | 0:0e59bc451a57 | 68 | // save them so they can be put at bottom once finished |
DanielOJ | 0:0e59bc451a57 | 69 | char toprow1 = course[courseSize-1][0]; |
DanielOJ | 0:0e59bc451a57 | 70 | char toprow2 = course[courseSize-1][1]; |
DanielOJ | 0:0e59bc451a57 | 71 | |
DanielOJ | 0:0e59bc451a57 | 72 | // shift each row up 1 |
DanielOJ | 0:0e59bc451a57 | 73 | for(int i = courseSize-1; i >= 0; i--) { |
DanielOJ | 0:0e59bc451a57 | 74 | |
DanielOJ | 0:0e59bc451a57 | 75 | course[i][0] = course[i-1][0]; |
DanielOJ | 0:0e59bc451a57 | 76 | course[i][1] = course[i-1][1]; |
DanielOJ | 0:0e59bc451a57 | 77 | |
DanielOJ | 0:0e59bc451a57 | 78 | } |
DanielOJ | 0:0e59bc451a57 | 79 | |
DanielOJ | 0:0e59bc451a57 | 80 | // set bottom rows as the top rows that have been pushed off |
DanielOJ | 0:0e59bc451a57 | 81 | course[0][0] = toprow1; |
DanielOJ | 0:0e59bc451a57 | 82 | course[0][1] = toprow2; |
DanielOJ | 0:0e59bc451a57 | 83 | |
DanielOJ | 0:0e59bc451a57 | 84 | // game control |
DanielOJ | 0:0e59bc451a57 | 85 | // what to do if controller is on right |
DanielOJ | 1:d55966246784 | 86 | |
DanielOJ | 0:0e59bc451a57 | 87 | if (tsi.readPercentage() >= 0.5) { // if on one side of touchpad |
DanielOJ | 0:0e59bc451a57 | 88 | // go to column |
DanielOJ | 0:0e59bc451a57 | 89 | lcd.locate(15,1); |
DanielOJ | 0:0e59bc451a57 | 90 | // print game character |
DanielOJ | 0:0e59bc451a57 | 91 | lcd.printf("%c",'<'); |
DanielOJ | 0:0e59bc451a57 | 92 | |
DanielOJ | 0:0e59bc451a57 | 93 | // check whether there is collision |
DanielOJ | 0:0e59bc451a57 | 94 | if(course[15][1] == '0') |
DanielOJ | 0:0e59bc451a57 | 95 | { |
DanielOJ | 0:0e59bc451a57 | 96 | // clear screen |
DanielOJ | 0:0e59bc451a57 | 97 | lcd.cls(); |
DanielOJ | 0:0e59bc451a57 | 98 | // let user know game is over |
DanielOJ | 0:0e59bc451a57 | 99 | lcd.printf("Game Over!!\n Score %d", score); |
DanielOJ | 0:0e59bc451a57 | 100 | gameover = 1; |
DanielOJ | 0:0e59bc451a57 | 101 | } |
DanielOJ | 0:0e59bc451a57 | 102 | } |
DanielOJ | 0:0e59bc451a57 | 103 | |
DanielOJ | 0:0e59bc451a57 | 104 | // when controller is on left |
DanielOJ | 0:0e59bc451a57 | 105 | else { |
DanielOJ | 0:0e59bc451a57 | 106 | // go to column |
DanielOJ | 0:0e59bc451a57 | 107 | lcd.locate(15,0); |
DanielOJ | 0:0e59bc451a57 | 108 | // print game character |
DanielOJ | 0:0e59bc451a57 | 109 | lcd.printf("%c",'<'); |
DanielOJ | 0:0e59bc451a57 | 110 | |
DanielOJ | 0:0e59bc451a57 | 111 | // check whether there is collision |
DanielOJ | 0:0e59bc451a57 | 112 | if(course[15][0] == '0') |
DanielOJ | 0:0e59bc451a57 | 113 | { |
DanielOJ | 0:0e59bc451a57 | 114 | // clear screen |
DanielOJ | 0:0e59bc451a57 | 115 | lcd.cls(); |
DanielOJ | 0:0e59bc451a57 | 116 | // let user know game is over |
DanielOJ | 0:0e59bc451a57 | 117 | lcd.printf("Game Over!!\n Score %d", score); |
DanielOJ | 0:0e59bc451a57 | 118 | gameover = 1; |
DanielOJ | 0:0e59bc451a57 | 119 | } |
DanielOJ | 0:0e59bc451a57 | 120 | } |
DanielOJ | 0:0e59bc451a57 | 121 | |
DanielOJ | 0:0e59bc451a57 | 122 | // delay between each frame |
DanielOJ | 0:0e59bc451a57 | 123 | wait(frameTime); |
DanielOJ | 0:0e59bc451a57 | 124 | // add to steps |
DanielOJ | 0:0e59bc451a57 | 125 | steps++; |
DanielOJ | 0:0e59bc451a57 | 126 | // add to score |
DanielOJ | 0:0e59bc451a57 | 127 | score++; |
DanielOJ | 0:0e59bc451a57 | 128 | // check whether enough steps completed to speed game up |
DanielOJ | 0:0e59bc451a57 | 129 | if(steps > 5) { |
DanielOJ | 0:0e59bc451a57 | 130 | frameTime -= 0.05; |
DanielOJ | 0:0e59bc451a57 | 131 | // reset number of steps |
DanielOJ | 0:0e59bc451a57 | 132 | steps = 0; |
DanielOJ | 0:0e59bc451a57 | 133 | } |
DanielOJ | 0:0e59bc451a57 | 134 | |
DanielOJ | 0:0e59bc451a57 | 135 | if(gameover == 1) |
DanielOJ | 0:0e59bc451a57 | 136 | { |
DanielOJ | 0:0e59bc451a57 | 137 | wait(10); |
DanielOJ | 0:0e59bc451a57 | 138 | gameover = 0; |
DanielOJ | 0:0e59bc451a57 | 139 | score = 0; |
DanielOJ | 0:0e59bc451a57 | 140 | frameTime = 1; |
DanielOJ | 0:0e59bc451a57 | 141 | } |
DanielOJ | 0:0e59bc451a57 | 142 | } |
DanielOJ | 0:0e59bc451a57 | 143 | |
DanielOJ | 0:0e59bc451a57 | 144 | } |