more comments

Dependencies:   TSI TextLCD mbed

Fork of CarGame by Dan James

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?

UserRevisionLine numberNew 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 }