Racing Cars game using N5110 LCD and thumb Joystick
Dependencies: N5110 PowerControl beep mbed
main.cpp@4:f9a899c6ac50, 2015-05-02 (annotated)
- Committer:
- el13gs
- Date:
- Sat May 02 17:32:04 2015 +0000
- Revision:
- 4:f9a899c6ac50
- Child:
- 5:243718c3cd8b
good working version 1;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el13gs | 4:f9a899c6ac50 | 1 | #include "N5110.h" |
el13gs | 4:f9a899c6ac50 | 2 | #include "mbed.h" |
el13gs | 4:f9a899c6ac50 | 3 | #include "PowerControl.h" |
el13gs | 4:f9a899c6ac50 | 4 | #include "beep.h" |
el13gs | 4:f9a899c6ac50 | 5 | |
el13gs | 4:f9a899c6ac50 | 6 | |
el13gs | 4:f9a899c6ac50 | 7 | // change this to alter tolerance of joystick direction |
el13gs | 4:f9a899c6ac50 | 8 | #define DIRECTION_TOLERANCE 0.05 |
el13gs | 4:f9a899c6ac50 | 9 | |
el13gs | 4:f9a899c6ac50 | 10 | // connections for joystick |
el13gs | 4:f9a899c6ac50 | 11 | DigitalIn button(p17); |
el13gs | 4:f9a899c6ac50 | 12 | DigitalIn select(p25); |
el13gs | 4:f9a899c6ac50 | 13 | InterruptIn start(p24); |
el13gs | 4:f9a899c6ac50 | 14 | |
el13gs | 4:f9a899c6ac50 | 15 | AnalogIn yPot(p18); |
el13gs | 4:f9a899c6ac50 | 16 | AnalogIn xPot(p19); |
el13gs | 4:f9a899c6ac50 | 17 | Beep buzzer(p21); |
el13gs | 4:f9a899c6ac50 | 18 | |
el13gs | 4:f9a899c6ac50 | 19 | |
el13gs | 4:f9a899c6ac50 | 20 | //nokia display connections |
el13gs | 4:f9a899c6ac50 | 21 | N5110 lcd(p7,p8,p9,p10,p11,p13,p26); |
el13gs | 4:f9a899c6ac50 | 22 | |
el13gs | 4:f9a899c6ac50 | 23 | // timer to regularly read the joystick |
el13gs | 4:f9a899c6ac50 | 24 | Ticker pollJoystick; |
el13gs | 4:f9a899c6ac50 | 25 | Ticker timer; |
el13gs | 4:f9a899c6ac50 | 26 | Ticker randomize; |
el13gs | 4:f9a899c6ac50 | 27 | |
el13gs | 4:f9a899c6ac50 | 28 | |
el13gs | 4:f9a899c6ac50 | 29 | // create enumerated type (0,1,2,3 etc. for direction) |
el13gs | 4:f9a899c6ac50 | 30 | // could be extended for diagonals etc. |
el13gs | 4:f9a899c6ac50 | 31 | enum DirectionName { |
el13gs | 4:f9a899c6ac50 | 32 | UP, |
el13gs | 4:f9a899c6ac50 | 33 | DOWN, |
el13gs | 4:f9a899c6ac50 | 34 | LEFT, |
el13gs | 4:f9a899c6ac50 | 35 | RIGHT, |
el13gs | 4:f9a899c6ac50 | 36 | CENTRE, |
el13gs | 4:f9a899c6ac50 | 37 | UNKNOWN |
el13gs | 4:f9a899c6ac50 | 38 | }; |
el13gs | 4:f9a899c6ac50 | 39 | |
el13gs | 4:f9a899c6ac50 | 40 | // struct for Joystick |
el13gs | 4:f9a899c6ac50 | 41 | typedef struct JoyStick Joystick; |
el13gs | 4:f9a899c6ac50 | 42 | struct JoyStick { |
el13gs | 4:f9a899c6ac50 | 43 | float x; // current x value |
el13gs | 4:f9a899c6ac50 | 44 | float x0; // 'centred' x value |
el13gs | 4:f9a899c6ac50 | 45 | float y; // current y value |
el13gs | 4:f9a899c6ac50 | 46 | float y0; // 'centred' y value |
el13gs | 4:f9a899c6ac50 | 47 | int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed) |
el13gs | 4:f9a899c6ac50 | 48 | DirectionName direction; // current direction |
el13gs | 4:f9a899c6ac50 | 49 | }; |
el13gs | 4:f9a899c6ac50 | 50 | // create struct variable |
el13gs | 4:f9a899c6ac50 | 51 | Joystick joystick; |
el13gs | 4:f9a899c6ac50 | 52 | |
el13gs | 4:f9a899c6ac50 | 53 | //flag pointers when interrupt comes in |
el13gs | 4:f9a899c6ac50 | 54 | int printFlag = 0; |
el13gs | 4:f9a899c6ac50 | 55 | int buttonFlag=0; |
el13gs | 4:f9a899c6ac50 | 56 | |
el13gs | 4:f9a899c6ac50 | 57 | //initial enemies Y positions (p,q,c) |
el13gs | 4:f9a899c6ac50 | 58 | int p=-20; |
el13gs | 4:f9a899c6ac50 | 59 | int q=-100; |
el13gs | 4:f9a899c6ac50 | 60 | int c=0; |
el13gs | 4:f9a899c6ac50 | 61 | int j=0; |
el13gs | 4:f9a899c6ac50 | 62 | |
el13gs | 4:f9a899c6ac50 | 63 | //enemies X positions (p,q,c) |
el13gs | 4:f9a899c6ac50 | 64 | int enemy1x=46; |
el13gs | 4:f9a899c6ac50 | 65 | int enemy2x=6; |
el13gs | 4:f9a899c6ac50 | 66 | int enemy3x=26; |
el13gs | 4:f9a899c6ac50 | 67 | |
el13gs | 4:f9a899c6ac50 | 68 | |
el13gs | 4:f9a899c6ac50 | 69 | //initial player's Car position and its dimensions(w,h) |
el13gs | 4:f9a899c6ac50 | 70 | int x=26; //x-position |
el13gs | 4:f9a899c6ac50 | 71 | int v=30; //y-position |
el13gs | 4:f9a899c6ac50 | 72 | int w=8; // width |
el13gs | 4:f9a899c6ac50 | 73 | int h=12; // height |
el13gs | 4:f9a899c6ac50 | 74 | |
el13gs | 4:f9a899c6ac50 | 75 | //initial Coin Xposition |
el13gs | 4:f9a899c6ac50 | 76 | int xPos=6; |
el13gs | 4:f9a899c6ac50 | 77 | |
el13gs | 4:f9a899c6ac50 | 78 | int lives=5; |
el13gs | 4:f9a899c6ac50 | 79 | int coins=0; |
el13gs | 4:f9a899c6ac50 | 80 | int round=1; |
el13gs | 4:f9a899c6ac50 | 81 | |
el13gs | 4:f9a899c6ac50 | 82 | float brightness=0.9; |
el13gs | 4:f9a899c6ac50 | 83 | int brightnessDisplay=9; |
el13gs | 4:f9a899c6ac50 | 84 | |
el13gs | 4:f9a899c6ac50 | 85 | int table[84][48]; |
el13gs | 4:f9a899c6ac50 | 86 | |
el13gs | 4:f9a899c6ac50 | 87 | // function prototypes |
el13gs | 4:f9a899c6ac50 | 88 | void calibrateJoystick(); |
el13gs | 4:f9a899c6ac50 | 89 | void updateJoystick(); |
el13gs | 4:f9a899c6ac50 | 90 | void ClearCar(int x,int v,int w,int h); |
el13gs | 4:f9a899c6ac50 | 91 | void gameInitial(); |
el13gs | 4:f9a899c6ac50 | 92 | void enemy1MovesDown(); |
el13gs | 4:f9a899c6ac50 | 93 | void enemy2MovesDown(); |
el13gs | 4:f9a899c6ac50 | 94 | void enemy3MovesDown(); |
el13gs | 4:f9a899c6ac50 | 95 | |
el13gs | 4:f9a899c6ac50 | 96 | void movePlayer(); |
el13gs | 4:f9a899c6ac50 | 97 | void initTable(); |
el13gs | 4:f9a899c6ac50 | 98 | void loose(); |
el13gs | 4:f9a899c6ac50 | 99 | void resetPlayer(); |
el13gs | 4:f9a899c6ac50 | 100 | void checkPlayerPos(); |
el13gs | 4:f9a899c6ac50 | 101 | void coinMoves(); |
el13gs | 4:f9a899c6ac50 | 102 | void drawCoin(int c); |
el13gs | 4:f9a899c6ac50 | 103 | void clearCoin(int c); |
el13gs | 4:f9a899c6ac50 | 104 | void randomizeCoin(); |
el13gs | 4:f9a899c6ac50 | 105 | void setCircleCells(int x0,int y0,int radius); |
el13gs | 4:f9a899c6ac50 | 106 | void clearCircleCells(int x0,int y0,int radius); |
el13gs | 4:f9a899c6ac50 | 107 | void buttonPressed(); |
el13gs | 4:f9a899c6ac50 | 108 | void clearCells(int x,int y); |
el13gs | 4:f9a899c6ac50 | 109 | void setCells(int x,int v,int w,int h); |
el13gs | 4:f9a899c6ac50 | 110 | |
el13gs | 4:f9a899c6ac50 | 111 | int gamePlays=1; |
el13gs | 4:f9a899c6ac50 | 112 | int coinAppear=1; |
el13gs | 4:f9a899c6ac50 | 113 | int enemiesMoving=1; |
el13gs | 4:f9a899c6ac50 | 114 | int optionsPointer=1; |
el13gs | 4:f9a899c6ac50 | 115 | int pointerSelect; |
el13gs | 4:f9a899c6ac50 | 116 | int sounds=1; |
el13gs | 4:f9a899c6ac50 | 117 | |
el13gs | 4:f9a899c6ac50 | 118 | float joystickCheckTime=1.0/30.0; |
el13gs | 4:f9a899c6ac50 | 119 | |
el13gs | 4:f9a899c6ac50 | 120 | |
el13gs | 4:f9a899c6ac50 | 121 | |
el13gs | 4:f9a899c6ac50 | 122 | int main() |
el13gs | 4:f9a899c6ac50 | 123 | |
el13gs | 4:f9a899c6ac50 | 124 | { |
el13gs | 4:f9a899c6ac50 | 125 | char soundString[3]; |
el13gs | 4:f9a899c6ac50 | 126 | sprintf(soundString,"%s","YES"); |
el13gs | 4:f9a899c6ac50 | 127 | calibrateJoystick(); // get centred values of joystick |
el13gs | 4:f9a899c6ac50 | 128 | pollJoystick.attach(&updateJoystick,joystickCheckTime); // read joystick 0 times per second |
el13gs | 4:f9a899c6ac50 | 129 | lcd.setXYAddress(0,0); |
el13gs | 4:f9a899c6ac50 | 130 | initTable(); |
el13gs | 4:f9a899c6ac50 | 131 | lcd.init(); |
el13gs | 4:f9a899c6ac50 | 132 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 133 | start.rise(&buttonPressed); |
el13gs | 4:f9a899c6ac50 | 134 | |
el13gs | 4:f9a899c6ac50 | 135 | |
el13gs | 4:f9a899c6ac50 | 136 | MainMenu: |
el13gs | 4:f9a899c6ac50 | 137 | buttonFlag=0; |
el13gs | 4:f9a899c6ac50 | 138 | pointerSelect=1; |
el13gs | 4:f9a899c6ac50 | 139 | clearCells(84,48); |
el13gs | 4:f9a899c6ac50 | 140 | lcd.drawCircle(22,19,2,1); //draw pointer around Play submenu when selected |
el13gs | 4:f9a899c6ac50 | 141 | lcd.drawCircle(53,19,2,1); //draw pointer around Play submenu when selected |
el13gs | 4:f9a899c6ac50 | 142 | lcd.printString("MAIN MENU",15,0); //print title |
el13gs | 4:f9a899c6ac50 | 143 | lcd.printString("Play",26,2); //print submenu title |
el13gs | 4:f9a899c6ac50 | 144 | lcd.printString("Options",20,3); //print submenu title |
el13gs | 4:f9a899c6ac50 | 145 | lcd.drawLine(15,9,65,9,1);//underline main menu title |
el13gs | 4:f9a899c6ac50 | 146 | |
el13gs | 4:f9a899c6ac50 | 147 | while(buttonFlag==0) { |
el13gs | 4:f9a899c6ac50 | 148 | |
el13gs | 4:f9a899c6ac50 | 149 | if (joystick.direction==DOWN) { |
el13gs | 4:f9a899c6ac50 | 150 | lcd.drawCircle(16,27,2,1); //draw pointer around Options submenu when selected |
el13gs | 4:f9a899c6ac50 | 151 | lcd.drawCircle(64,27,2,1); //draw pointer around Options submenu when selected |
el13gs | 4:f9a899c6ac50 | 152 | |
el13gs | 4:f9a899c6ac50 | 153 | lcd.clearCircle(53,19,2,1); |
el13gs | 4:f9a899c6ac50 | 154 | lcd.clearCircle(22,19,2,1); |
el13gs | 4:f9a899c6ac50 | 155 | |
el13gs | 4:f9a899c6ac50 | 156 | pointerSelect=2; |
el13gs | 4:f9a899c6ac50 | 157 | |
el13gs | 4:f9a899c6ac50 | 158 | } |
el13gs | 4:f9a899c6ac50 | 159 | wait(0.1); |
el13gs | 4:f9a899c6ac50 | 160 | if(joystick.direction==UP) { |
el13gs | 4:f9a899c6ac50 | 161 | lcd.drawCircle(22,19,2,1); //draw pointer around Play submenu when selected |
el13gs | 4:f9a899c6ac50 | 162 | lcd.drawCircle(53,19,2,1); //draw pointer around Play submenu when selected |
el13gs | 4:f9a899c6ac50 | 163 | |
el13gs | 4:f9a899c6ac50 | 164 | lcd.clearCircle(16,27,2,1); //draw pointer around Options submenu when selected |
el13gs | 4:f9a899c6ac50 | 165 | lcd.clearCircle(64,27,2,1); |
el13gs | 4:f9a899c6ac50 | 166 | pointerSelect=1; |
el13gs | 4:f9a899c6ac50 | 167 | } |
el13gs | 4:f9a899c6ac50 | 168 | |
el13gs | 4:f9a899c6ac50 | 169 | |
el13gs | 4:f9a899c6ac50 | 170 | |
el13gs | 4:f9a899c6ac50 | 171 | } |
el13gs | 4:f9a899c6ac50 | 172 | |
el13gs | 4:f9a899c6ac50 | 173 | switch(pointerSelect) { |
el13gs | 4:f9a899c6ac50 | 174 | |
el13gs | 4:f9a899c6ac50 | 175 | case 1: |
el13gs | 4:f9a899c6ac50 | 176 | //GameBegins: |
el13gs | 4:f9a899c6ac50 | 177 | |
el13gs | 4:f9a899c6ac50 | 178 | buttonFlag=0; |
el13gs | 4:f9a899c6ac50 | 179 | clearCells(84,48); |
el13gs | 4:f9a899c6ac50 | 180 | wait(2); |
el13gs | 4:f9a899c6ac50 | 181 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 182 | lcd.drawRect(x,v,w,h,0); |
el13gs | 4:f9a899c6ac50 | 183 | timer.attach(&movePlayer,0.1); |
el13gs | 4:f9a899c6ac50 | 184 | gameInitial(); |
el13gs | 4:f9a899c6ac50 | 185 | char buffer[1]; |
el13gs | 4:f9a899c6ac50 | 186 | sprintf(buffer,"%d",lives); |
el13gs | 4:f9a899c6ac50 | 187 | lcd.printString(buffer,74,1); |
el13gs | 4:f9a899c6ac50 | 188 | |
el13gs | 4:f9a899c6ac50 | 189 | |
el13gs | 4:f9a899c6ac50 | 190 | char buffer1[1]; |
el13gs | 4:f9a899c6ac50 | 191 | sprintf(buffer1,"%d",round); |
el13gs | 4:f9a899c6ac50 | 192 | lcd.printString(buffer1,74,3); |
el13gs | 4:f9a899c6ac50 | 193 | |
el13gs | 4:f9a899c6ac50 | 194 | char buffer2[2]; |
el13gs | 4:f9a899c6ac50 | 195 | sprintf(buffer2,"%d",coins); |
el13gs | 4:f9a899c6ac50 | 196 | lcd.printString(buffer2,72,5); |
el13gs | 4:f9a899c6ac50 | 197 | |
el13gs | 4:f9a899c6ac50 | 198 | |
el13gs | 4:f9a899c6ac50 | 199 | //int pointerSelect; |
el13gs | 4:f9a899c6ac50 | 200 | |
el13gs | 4:f9a899c6ac50 | 201 | while(gamePlays) { |
el13gs | 4:f9a899c6ac50 | 202 | |
el13gs | 4:f9a899c6ac50 | 203 | int a=select.read(); |
el13gs | 4:f9a899c6ac50 | 204 | if(a){ |
el13gs | 4:f9a899c6ac50 | 205 | gamePlays=0; |
el13gs | 4:f9a899c6ac50 | 206 | goto MainMenu;} |
el13gs | 4:f9a899c6ac50 | 207 | |
el13gs | 4:f9a899c6ac50 | 208 | enemiesMoving=1; |
el13gs | 4:f9a899c6ac50 | 209 | sprintf(buffer,"%d",lives); |
el13gs | 4:f9a899c6ac50 | 210 | lcd.printString(buffer,74,1); |
el13gs | 4:f9a899c6ac50 | 211 | |
el13gs | 4:f9a899c6ac50 | 212 | sprintf(buffer2,"%d",coins); |
el13gs | 4:f9a899c6ac50 | 213 | lcd.printString(buffer2,72,5); |
el13gs | 4:f9a899c6ac50 | 214 | |
el13gs | 4:f9a899c6ac50 | 215 | checkPlayerPos(); |
el13gs | 4:f9a899c6ac50 | 216 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 217 | enemy1MovesDown(); |
el13gs | 4:f9a899c6ac50 | 218 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 219 | enemy2MovesDown(); |
el13gs | 4:f9a899c6ac50 | 220 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 221 | enemy3MovesDown(); |
el13gs | 4:f9a899c6ac50 | 222 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 223 | coinMoves(); |
el13gs | 4:f9a899c6ac50 | 224 | } |
el13gs | 4:f9a899c6ac50 | 225 | break; |
el13gs | 4:f9a899c6ac50 | 226 | |
el13gs | 4:f9a899c6ac50 | 227 | case 2: |
el13gs | 4:f9a899c6ac50 | 228 | |
el13gs | 4:f9a899c6ac50 | 229 | int optionsMenu=1; |
el13gs | 4:f9a899c6ac50 | 230 | |
el13gs | 4:f9a899c6ac50 | 231 | buttonFlag=0; |
el13gs | 4:f9a899c6ac50 | 232 | |
el13gs | 4:f9a899c6ac50 | 233 | clearCells(84,48); |
el13gs | 4:f9a899c6ac50 | 234 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 235 | wait(0.02); |
el13gs | 4:f9a899c6ac50 | 236 | lcd.printString("OPTIONS",18,0); |
el13gs | 4:f9a899c6ac50 | 237 | lcd.printString("Exit",23,5); |
el13gs | 4:f9a899c6ac50 | 238 | lcd.printString("Brightness",6,3); |
el13gs | 4:f9a899c6ac50 | 239 | lcd.printString("Sound",6,2); |
el13gs | 4:f9a899c6ac50 | 240 | lcd.drawLine(15,8,61,8,1);//underline Options Menu title |
el13gs | 4:f9a899c6ac50 | 241 | |
el13gs | 4:f9a899c6ac50 | 242 | char buffer3[2]; |
el13gs | 4:f9a899c6ac50 | 243 | sprintf(buffer3,"%d",brightnessDisplay); |
el13gs | 4:f9a899c6ac50 | 244 | lcd.printString(buffer3,68,3); |
el13gs | 4:f9a899c6ac50 | 245 | |
el13gs | 4:f9a899c6ac50 | 246 | |
el13gs | 4:f9a899c6ac50 | 247 | lcd.printString(soundString,40,2); |
el13gs | 4:f9a899c6ac50 | 248 | |
el13gs | 4:f9a899c6ac50 | 249 | while(optionsMenu) { |
el13gs | 4:f9a899c6ac50 | 250 | char pointerbuffer[2]; |
el13gs | 4:f9a899c6ac50 | 251 | sprintf(pointerbuffer,"%d",optionsPointer); |
el13gs | 4:f9a899c6ac50 | 252 | lcd.printString(pointerbuffer,0,0); |
el13gs | 4:f9a899c6ac50 | 253 | |
el13gs | 4:f9a899c6ac50 | 254 | if (joystick.direction==UP) { |
el13gs | 4:f9a899c6ac50 | 255 | optionsPointer--; |
el13gs | 4:f9a899c6ac50 | 256 | if(optionsPointer==0) { |
el13gs | 4:f9a899c6ac50 | 257 | optionsPointer=1; |
el13gs | 4:f9a899c6ac50 | 258 | } |
el13gs | 4:f9a899c6ac50 | 259 | } |
el13gs | 4:f9a899c6ac50 | 260 | wait(0.1); |
el13gs | 4:f9a899c6ac50 | 261 | |
el13gs | 4:f9a899c6ac50 | 262 | if(joystick.direction==DOWN) { |
el13gs | 4:f9a899c6ac50 | 263 | optionsPointer++; |
el13gs | 4:f9a899c6ac50 | 264 | if(optionsPointer>3) { |
el13gs | 4:f9a899c6ac50 | 265 | optionsPointer=3; |
el13gs | 4:f9a899c6ac50 | 266 | } |
el13gs | 4:f9a899c6ac50 | 267 | |
el13gs | 4:f9a899c6ac50 | 268 | } |
el13gs | 4:f9a899c6ac50 | 269 | |
el13gs | 4:f9a899c6ac50 | 270 | |
el13gs | 4:f9a899c6ac50 | 271 | if (optionsPointer==1) { |
el13gs | 4:f9a899c6ac50 | 272 | lcd.drawCircle(2,19,2,1); |
el13gs | 4:f9a899c6ac50 | 273 | lcd.clearCircle(2,27,2,1); |
el13gs | 4:f9a899c6ac50 | 274 | lcd.clearCircle(19,44,2,1); |
el13gs | 4:f9a899c6ac50 | 275 | if(joystick.direction==LEFT) { |
el13gs | 4:f9a899c6ac50 | 276 | sounds=1; |
el13gs | 4:f9a899c6ac50 | 277 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 278 | sprintf(soundString,"%s","YES"); |
el13gs | 4:f9a899c6ac50 | 279 | lcd.printString(soundString,40,2); |
el13gs | 4:f9a899c6ac50 | 280 | } |
el13gs | 4:f9a899c6ac50 | 281 | if(joystick.direction==RIGHT) { |
el13gs | 4:f9a899c6ac50 | 282 | sounds=0; |
el13gs | 4:f9a899c6ac50 | 283 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 284 | sprintf(soundString,"%s","NO "); |
el13gs | 4:f9a899c6ac50 | 285 | lcd.printString(soundString,40,2); |
el13gs | 4:f9a899c6ac50 | 286 | } |
el13gs | 4:f9a899c6ac50 | 287 | |
el13gs | 4:f9a899c6ac50 | 288 | } |
el13gs | 4:f9a899c6ac50 | 289 | if (optionsPointer==2) { |
el13gs | 4:f9a899c6ac50 | 290 | lcd.drawCircle(2,27,2,1); |
el13gs | 4:f9a899c6ac50 | 291 | lcd.clearCircle(2,19,2,1); |
el13gs | 4:f9a899c6ac50 | 292 | lcd.clearCircle(19,44,2,1); |
el13gs | 4:f9a899c6ac50 | 293 | |
el13gs | 4:f9a899c6ac50 | 294 | if(joystick.direction==LEFT) { |
el13gs | 4:f9a899c6ac50 | 295 | brightness=brightness-.1; |
el13gs | 4:f9a899c6ac50 | 296 | brightnessDisplay=brightnessDisplay-1; |
el13gs | 4:f9a899c6ac50 | 297 | if(brightness<0.1||brightnessDisplay<0) { |
el13gs | 4:f9a899c6ac50 | 298 | brightnessDisplay=1; |
el13gs | 4:f9a899c6ac50 | 299 | brightness=0.1; |
el13gs | 4:f9a899c6ac50 | 300 | } |
el13gs | 4:f9a899c6ac50 | 301 | lcd.setBrightness(brightness); |
el13gs | 4:f9a899c6ac50 | 302 | |
el13gs | 4:f9a899c6ac50 | 303 | char buffer3[2]; |
el13gs | 4:f9a899c6ac50 | 304 | sprintf(buffer3,"%d",brightnessDisplay); |
el13gs | 4:f9a899c6ac50 | 305 | lcd.printString(buffer3,68,3); |
el13gs | 4:f9a899c6ac50 | 306 | } |
el13gs | 4:f9a899c6ac50 | 307 | |
el13gs | 4:f9a899c6ac50 | 308 | if(joystick.direction==RIGHT) { |
el13gs | 4:f9a899c6ac50 | 309 | brightness=brightness+.1; |
el13gs | 4:f9a899c6ac50 | 310 | brightnessDisplay=brightnessDisplay+1; |
el13gs | 4:f9a899c6ac50 | 311 | if(brightness>0.9||brightnessDisplay>9) { |
el13gs | 4:f9a899c6ac50 | 312 | brightnessDisplay=9; |
el13gs | 4:f9a899c6ac50 | 313 | brightness=0.9; |
el13gs | 4:f9a899c6ac50 | 314 | } |
el13gs | 4:f9a899c6ac50 | 315 | lcd.setBrightness(brightness); |
el13gs | 4:f9a899c6ac50 | 316 | |
el13gs | 4:f9a899c6ac50 | 317 | char buffer4[2]; |
el13gs | 4:f9a899c6ac50 | 318 | sprintf(buffer4,"%d",brightnessDisplay); |
el13gs | 4:f9a899c6ac50 | 319 | lcd.printString(buffer4,68,3); |
el13gs | 4:f9a899c6ac50 | 320 | } |
el13gs | 4:f9a899c6ac50 | 321 | |
el13gs | 4:f9a899c6ac50 | 322 | } |
el13gs | 4:f9a899c6ac50 | 323 | if (optionsPointer==3) { |
el13gs | 4:f9a899c6ac50 | 324 | lcd.drawCircle(19,44,2,1); |
el13gs | 4:f9a899c6ac50 | 325 | lcd.clearCircle(2,19,2,1); |
el13gs | 4:f9a899c6ac50 | 326 | lcd.clearCircle(2,27,2,1); |
el13gs | 4:f9a899c6ac50 | 327 | |
el13gs | 4:f9a899c6ac50 | 328 | if(buttonFlag) { |
el13gs | 4:f9a899c6ac50 | 329 | goto MainMenu; |
el13gs | 4:f9a899c6ac50 | 330 | } |
el13gs | 4:f9a899c6ac50 | 331 | } |
el13gs | 4:f9a899c6ac50 | 332 | wait(0.1); |
el13gs | 4:f9a899c6ac50 | 333 | |
el13gs | 4:f9a899c6ac50 | 334 | } |
el13gs | 4:f9a899c6ac50 | 335 | break; |
el13gs | 4:f9a899c6ac50 | 336 | } |
el13gs | 4:f9a899c6ac50 | 337 | } |
el13gs | 4:f9a899c6ac50 | 338 | |
el13gs | 4:f9a899c6ac50 | 339 | void buttonPressed() |
el13gs | 4:f9a899c6ac50 | 340 | { |
el13gs | 4:f9a899c6ac50 | 341 | buttonFlag=!buttonFlag; |
el13gs | 4:f9a899c6ac50 | 342 | } |
el13gs | 4:f9a899c6ac50 | 343 | |
el13gs | 4:f9a899c6ac50 | 344 | void movePlayer() |
el13gs | 4:f9a899c6ac50 | 345 | { |
el13gs | 4:f9a899c6ac50 | 346 | if (gamePlays) { |
el13gs | 4:f9a899c6ac50 | 347 | //lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 348 | if (joystick.direction==RIGHT&&x+w<58) { |
el13gs | 4:f9a899c6ac50 | 349 | |
el13gs | 4:f9a899c6ac50 | 350 | ClearCar(x,v,w,h); |
el13gs | 4:f9a899c6ac50 | 351 | x=x+4; |
el13gs | 4:f9a899c6ac50 | 352 | lcd.drawRect(x,v,w,h,0); |
el13gs | 4:f9a899c6ac50 | 353 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 354 | if (table[x+w][v+h]==1||table[x+w][v]==1) { |
el13gs | 4:f9a899c6ac50 | 355 | loose(); |
el13gs | 4:f9a899c6ac50 | 356 | } |
el13gs | 4:f9a899c6ac50 | 357 | |
el13gs | 4:f9a899c6ac50 | 358 | |
el13gs | 4:f9a899c6ac50 | 359 | } |
el13gs | 4:f9a899c6ac50 | 360 | |
el13gs | 4:f9a899c6ac50 | 361 | if (joystick.direction==LEFT&&x+w>10) { |
el13gs | 4:f9a899c6ac50 | 362 | |
el13gs | 4:f9a899c6ac50 | 363 | ClearCar(x,v,w,h); |
el13gs | 4:f9a899c6ac50 | 364 | x=x-4; |
el13gs | 4:f9a899c6ac50 | 365 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 366 | lcd.drawRect(x,v,w,h,0); |
el13gs | 4:f9a899c6ac50 | 367 | if (table[x][v]==1||table[x][v+h]==1) { |
el13gs | 4:f9a899c6ac50 | 368 | loose(); |
el13gs | 4:f9a899c6ac50 | 369 | } |
el13gs | 4:f9a899c6ac50 | 370 | |
el13gs | 4:f9a899c6ac50 | 371 | } |
el13gs | 4:f9a899c6ac50 | 372 | |
el13gs | 4:f9a899c6ac50 | 373 | if (joystick.direction==UP && v>2) { |
el13gs | 4:f9a899c6ac50 | 374 | |
el13gs | 4:f9a899c6ac50 | 375 | ClearCar(x,v,w,h); |
el13gs | 4:f9a899c6ac50 | 376 | v=v-4; |
el13gs | 4:f9a899c6ac50 | 377 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 378 | lcd.drawRect(x,v,w,h,0); |
el13gs | 4:f9a899c6ac50 | 379 | if (table[x][v]==1||table[x+w][v]==1) { |
el13gs | 4:f9a899c6ac50 | 380 | loose(); |
el13gs | 4:f9a899c6ac50 | 381 | } |
el13gs | 4:f9a899c6ac50 | 382 | |
el13gs | 4:f9a899c6ac50 | 383 | } |
el13gs | 4:f9a899c6ac50 | 384 | if (joystick.direction==DOWN && v<32) { |
el13gs | 4:f9a899c6ac50 | 385 | ClearCar(x,v,w,h); |
el13gs | 4:f9a899c6ac50 | 386 | v=v+4; |
el13gs | 4:f9a899c6ac50 | 387 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 388 | lcd.drawRect(x,v,w,h,0); |
el13gs | 4:f9a899c6ac50 | 389 | if (table[x][v+h]==1||table[x+w][v+h]==1) { |
el13gs | 4:f9a899c6ac50 | 390 | loose(); |
el13gs | 4:f9a899c6ac50 | 391 | } |
el13gs | 4:f9a899c6ac50 | 392 | |
el13gs | 4:f9a899c6ac50 | 393 | } |
el13gs | 4:f9a899c6ac50 | 394 | |
el13gs | 4:f9a899c6ac50 | 395 | } |
el13gs | 4:f9a899c6ac50 | 396 | } |
el13gs | 4:f9a899c6ac50 | 397 | |
el13gs | 4:f9a899c6ac50 | 398 | // read default positions of the joystick to calibrate later readings |
el13gs | 4:f9a899c6ac50 | 399 | void calibrateJoystick() |
el13gs | 4:f9a899c6ac50 | 400 | { |
el13gs | 4:f9a899c6ac50 | 401 | button.mode(PullDown); |
el13gs | 4:f9a899c6ac50 | 402 | // must not move during calibration |
el13gs | 4:f9a899c6ac50 | 403 | joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly) |
el13gs | 4:f9a899c6ac50 | 404 | joystick.y0 = yPot; |
el13gs | 4:f9a899c6ac50 | 405 | } |
el13gs | 4:f9a899c6ac50 | 406 | void updateJoystick() |
el13gs | 4:f9a899c6ac50 | 407 | { |
el13gs | 4:f9a899c6ac50 | 408 | // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred) |
el13gs | 4:f9a899c6ac50 | 409 | joystick.x = xPot - joystick.x0; |
el13gs | 4:f9a899c6ac50 | 410 | joystick.y = yPot - joystick.y0; |
el13gs | 4:f9a899c6ac50 | 411 | // read button state |
el13gs | 4:f9a899c6ac50 | 412 | joystick.button = button; |
el13gs | 4:f9a899c6ac50 | 413 | |
el13gs | 4:f9a899c6ac50 | 414 | // calculate direction depending on x,y values |
el13gs | 4:f9a899c6ac50 | 415 | // tolerance allows a little lee-way in case joystick not exactly in the stated direction |
el13gs | 4:f9a899c6ac50 | 416 | if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
el13gs | 4:f9a899c6ac50 | 417 | joystick.direction = CENTRE; |
el13gs | 4:f9a899c6ac50 | 418 | } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
el13gs | 4:f9a899c6ac50 | 419 | joystick.direction = UP; |
el13gs | 4:f9a899c6ac50 | 420 | } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
el13gs | 4:f9a899c6ac50 | 421 | joystick.direction = DOWN; |
el13gs | 4:f9a899c6ac50 | 422 | } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { |
el13gs | 4:f9a899c6ac50 | 423 | joystick.direction = LEFT; |
el13gs | 4:f9a899c6ac50 | 424 | } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { |
el13gs | 4:f9a899c6ac50 | 425 | joystick.direction = RIGHT; |
el13gs | 4:f9a899c6ac50 | 426 | } else { |
el13gs | 4:f9a899c6ac50 | 427 | joystick.direction = UNKNOWN; |
el13gs | 4:f9a899c6ac50 | 428 | } |
el13gs | 4:f9a899c6ac50 | 429 | |
el13gs | 4:f9a899c6ac50 | 430 | // set flag for printing |
el13gs | 4:f9a899c6ac50 | 431 | printFlag = 1; |
el13gs | 4:f9a899c6ac50 | 432 | } |
el13gs | 4:f9a899c6ac50 | 433 | |
el13gs | 4:f9a899c6ac50 | 434 | |
el13gs | 4:f9a899c6ac50 | 435 | void ClearCar(int x,int v,int w,int h) |
el13gs | 4:f9a899c6ac50 | 436 | { |
el13gs | 4:f9a899c6ac50 | 437 | for(int i=x; i<=x+w; i++) { |
el13gs | 4:f9a899c6ac50 | 438 | for(int j=v; j<=v+h; j++) { |
el13gs | 4:f9a899c6ac50 | 439 | lcd.clearPixel(i,j); |
el13gs | 4:f9a899c6ac50 | 440 | table[i][j]=0; |
el13gs | 4:f9a899c6ac50 | 441 | } |
el13gs | 4:f9a899c6ac50 | 442 | } |
el13gs | 4:f9a899c6ac50 | 443 | } |
el13gs | 4:f9a899c6ac50 | 444 | |
el13gs | 4:f9a899c6ac50 | 445 | void gameInitial() |
el13gs | 4:f9a899c6ac50 | 446 | { |
el13gs | 4:f9a899c6ac50 | 447 | lcd.drawLine(60,0,60,48,1); |
el13gs | 4:f9a899c6ac50 | 448 | lcd.drawLine(60,16,84,16,1); |
el13gs | 4:f9a899c6ac50 | 449 | lcd.drawLine(60,32,84,32,1); |
el13gs | 4:f9a899c6ac50 | 450 | lcd.drawLine(20,0,20,48,2); |
el13gs | 4:f9a899c6ac50 | 451 | lcd.drawLine(40,0,40,48,2); |
el13gs | 4:f9a899c6ac50 | 452 | } |
el13gs | 4:f9a899c6ac50 | 453 | |
el13gs | 4:f9a899c6ac50 | 454 | |
el13gs | 4:f9a899c6ac50 | 455 | |
el13gs | 4:f9a899c6ac50 | 456 | |
el13gs | 4:f9a899c6ac50 | 457 | void enemy1MovesDown() |
el13gs | 4:f9a899c6ac50 | 458 | { |
el13gs | 4:f9a899c6ac50 | 459 | ClearCar(enemy1x,(j-4),w,h); |
el13gs | 4:f9a899c6ac50 | 460 | lcd.drawRect(enemy1x,j,w,h,1); |
el13gs | 4:f9a899c6ac50 | 461 | setCells(enemy1x,j,w,h); |
el13gs | 4:f9a899c6ac50 | 462 | wait(0.05); |
el13gs | 4:f9a899c6ac50 | 463 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 464 | |
el13gs | 4:f9a899c6ac50 | 465 | |
el13gs | 4:f9a899c6ac50 | 466 | j=j+4; |
el13gs | 4:f9a899c6ac50 | 467 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 468 | |
el13gs | 4:f9a899c6ac50 | 469 | if(j>60) { |
el13gs | 4:f9a899c6ac50 | 470 | j=-(rand()%100+80); |
el13gs | 4:f9a899c6ac50 | 471 | } |
el13gs | 4:f9a899c6ac50 | 472 | |
el13gs | 4:f9a899c6ac50 | 473 | } |
el13gs | 4:f9a899c6ac50 | 474 | |
el13gs | 4:f9a899c6ac50 | 475 | |
el13gs | 4:f9a899c6ac50 | 476 | |
el13gs | 4:f9a899c6ac50 | 477 | void enemy2MovesDown() |
el13gs | 4:f9a899c6ac50 | 478 | { |
el13gs | 4:f9a899c6ac50 | 479 | ClearCar(enemy2x,(p-4),w,h); |
el13gs | 4:f9a899c6ac50 | 480 | lcd.drawRect(enemy2x,p,w,h,1); |
el13gs | 4:f9a899c6ac50 | 481 | setCells(enemy2x,p,w,h); |
el13gs | 4:f9a899c6ac50 | 482 | wait(0.05); |
el13gs | 4:f9a899c6ac50 | 483 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 484 | p=p+4; |
el13gs | 4:f9a899c6ac50 | 485 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 486 | |
el13gs | 4:f9a899c6ac50 | 487 | if(p>60) { |
el13gs | 4:f9a899c6ac50 | 488 | p=-(rand()%40+20); |
el13gs | 4:f9a899c6ac50 | 489 | } |
el13gs | 4:f9a899c6ac50 | 490 | while(p==q) { |
el13gs | 4:f9a899c6ac50 | 491 | p=-(rand()%40+20); |
el13gs | 4:f9a899c6ac50 | 492 | } |
el13gs | 4:f9a899c6ac50 | 493 | |
el13gs | 4:f9a899c6ac50 | 494 | } |
el13gs | 4:f9a899c6ac50 | 495 | |
el13gs | 4:f9a899c6ac50 | 496 | void enemy3MovesDown() |
el13gs | 4:f9a899c6ac50 | 497 | { |
el13gs | 4:f9a899c6ac50 | 498 | ClearCar(enemy3x,(q-4),w,h); |
el13gs | 4:f9a899c6ac50 | 499 | lcd.drawRect(enemy3x,q,w,h,1); |
el13gs | 4:f9a899c6ac50 | 500 | setCells(enemy3x,q,w,h); |
el13gs | 4:f9a899c6ac50 | 501 | wait(0.05); |
el13gs | 4:f9a899c6ac50 | 502 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 503 | q=q+4; |
el13gs | 4:f9a899c6ac50 | 504 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 505 | if (q>70) { |
el13gs | 4:f9a899c6ac50 | 506 | q=-(rand()%10+1); |
el13gs | 4:f9a899c6ac50 | 507 | } |
el13gs | 4:f9a899c6ac50 | 508 | |
el13gs | 4:f9a899c6ac50 | 509 | } |
el13gs | 4:f9a899c6ac50 | 510 | |
el13gs | 4:f9a899c6ac50 | 511 | void setCells(int x,int v,int w,int h) |
el13gs | 4:f9a899c6ac50 | 512 | { |
el13gs | 4:f9a899c6ac50 | 513 | |
el13gs | 4:f9a899c6ac50 | 514 | for(int i=x; i<=x+w; i++) { |
el13gs | 4:f9a899c6ac50 | 515 | for(int j=v; j<=v+h; j++) { |
el13gs | 4:f9a899c6ac50 | 516 | if(j>0&&j<48) { |
el13gs | 4:f9a899c6ac50 | 517 | table[i][j]=1; |
el13gs | 4:f9a899c6ac50 | 518 | } |
el13gs | 4:f9a899c6ac50 | 519 | } |
el13gs | 4:f9a899c6ac50 | 520 | } |
el13gs | 4:f9a899c6ac50 | 521 | } |
el13gs | 4:f9a899c6ac50 | 522 | |
el13gs | 4:f9a899c6ac50 | 523 | void initTable() |
el13gs | 4:f9a899c6ac50 | 524 | { |
el13gs | 4:f9a899c6ac50 | 525 | for (int i=0; i<=84; i++) { |
el13gs | 4:f9a899c6ac50 | 526 | for(int j=0; j<=48; j++) { |
el13gs | 4:f9a899c6ac50 | 527 | table[i][j]=0; |
el13gs | 4:f9a899c6ac50 | 528 | } |
el13gs | 4:f9a899c6ac50 | 529 | } |
el13gs | 4:f9a899c6ac50 | 530 | } |
el13gs | 4:f9a899c6ac50 | 531 | |
el13gs | 4:f9a899c6ac50 | 532 | void checkPlayerPos() |
el13gs | 4:f9a899c6ac50 | 533 | { |
el13gs | 4:f9a899c6ac50 | 534 | if (table[x+w][v+h]==1||table[x][v+h]==1||table[x][v]==1||table[x+w][v]==1) { |
el13gs | 4:f9a899c6ac50 | 535 | loose(); |
el13gs | 4:f9a899c6ac50 | 536 | |
el13gs | 4:f9a899c6ac50 | 537 | } |
el13gs | 4:f9a899c6ac50 | 538 | if (table[x+w][v+h]==2||table[x][v+h]==2||table[x][v]==2||table[x+w][v]==2) { |
el13gs | 4:f9a899c6ac50 | 539 | coins=coins+10; |
el13gs | 4:f9a899c6ac50 | 540 | coinAppear=0; |
el13gs | 4:f9a899c6ac50 | 541 | if(sounds) { |
el13gs | 4:f9a899c6ac50 | 542 | buzzer.beep(2200,0.4); |
el13gs | 4:f9a899c6ac50 | 543 | buzzer.beep(1000,0.2); |
el13gs | 4:f9a899c6ac50 | 544 | } |
el13gs | 4:f9a899c6ac50 | 545 | } |
el13gs | 4:f9a899c6ac50 | 546 | |
el13gs | 4:f9a899c6ac50 | 547 | } |
el13gs | 4:f9a899c6ac50 | 548 | |
el13gs | 4:f9a899c6ac50 | 549 | |
el13gs | 4:f9a899c6ac50 | 550 | void coinMoves() |
el13gs | 4:f9a899c6ac50 | 551 | { |
el13gs | 4:f9a899c6ac50 | 552 | clearCoin(c); |
el13gs | 4:f9a899c6ac50 | 553 | c=c+2; |
el13gs | 4:f9a899c6ac50 | 554 | drawCoin(c); |
el13gs | 4:f9a899c6ac50 | 555 | |
el13gs | 4:f9a899c6ac50 | 556 | wait(0.05); |
el13gs | 4:f9a899c6ac50 | 557 | if(c>70) { |
el13gs | 4:f9a899c6ac50 | 558 | randomizeCoin(); |
el13gs | 4:f9a899c6ac50 | 559 | coinAppear=1; |
el13gs | 4:f9a899c6ac50 | 560 | c=-100; |
el13gs | 4:f9a899c6ac50 | 561 | } |
el13gs | 4:f9a899c6ac50 | 562 | } |
el13gs | 4:f9a899c6ac50 | 563 | |
el13gs | 4:f9a899c6ac50 | 564 | void drawCoin(int c) |
el13gs | 4:f9a899c6ac50 | 565 | { |
el13gs | 4:f9a899c6ac50 | 566 | if (table[xPos][c+4]==0&&table[xPos][c-4]==0&&coinAppear) { |
el13gs | 4:f9a899c6ac50 | 567 | lcd.drawCircle(xPos,c,4,0); |
el13gs | 4:f9a899c6ac50 | 568 | setCircleCells(xPos,c,4); |
el13gs | 4:f9a899c6ac50 | 569 | |
el13gs | 4:f9a899c6ac50 | 570 | lcd.setPixel(xPos,c-1); |
el13gs | 4:f9a899c6ac50 | 571 | lcd.setPixel(xPos,c+2); |
el13gs | 4:f9a899c6ac50 | 572 | |
el13gs | 4:f9a899c6ac50 | 573 | lcd.setPixel(xPos+1,c-1); |
el13gs | 4:f9a899c6ac50 | 574 | lcd.setPixel(xPos+1,c+2); |
el13gs | 4:f9a899c6ac50 | 575 | |
el13gs | 4:f9a899c6ac50 | 576 | lcd.setPixel(xPos-1,c); |
el13gs | 4:f9a899c6ac50 | 577 | lcd.setPixel(xPos-1,c+1); |
el13gs | 4:f9a899c6ac50 | 578 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 579 | } |
el13gs | 4:f9a899c6ac50 | 580 | } |
el13gs | 4:f9a899c6ac50 | 581 | |
el13gs | 4:f9a899c6ac50 | 582 | void clearCoin(int c) |
el13gs | 4:f9a899c6ac50 | 583 | { |
el13gs | 4:f9a899c6ac50 | 584 | lcd.clearCircle(xPos,c,4,0); |
el13gs | 4:f9a899c6ac50 | 585 | clearCircleCells(xPos,c,4); |
el13gs | 4:f9a899c6ac50 | 586 | |
el13gs | 4:f9a899c6ac50 | 587 | lcd.clearPixel(xPos,c-1); |
el13gs | 4:f9a899c6ac50 | 588 | lcd.clearPixel(xPos,c+2); |
el13gs | 4:f9a899c6ac50 | 589 | |
el13gs | 4:f9a899c6ac50 | 590 | lcd.clearPixel(xPos+1,c-1); |
el13gs | 4:f9a899c6ac50 | 591 | lcd.clearPixel(xPos+1,c+2); |
el13gs | 4:f9a899c6ac50 | 592 | |
el13gs | 4:f9a899c6ac50 | 593 | lcd.clearPixel(xPos-1,c); |
el13gs | 4:f9a899c6ac50 | 594 | lcd.clearPixel(xPos-1,c+1); |
el13gs | 4:f9a899c6ac50 | 595 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 596 | |
el13gs | 4:f9a899c6ac50 | 597 | } |
el13gs | 4:f9a899c6ac50 | 598 | |
el13gs | 4:f9a899c6ac50 | 599 | void randomizeCoin() |
el13gs | 4:f9a899c6ac50 | 600 | { |
el13gs | 4:f9a899c6ac50 | 601 | int randX; |
el13gs | 4:f9a899c6ac50 | 602 | |
el13gs | 4:f9a899c6ac50 | 603 | randX=rand()%3+1; |
el13gs | 4:f9a899c6ac50 | 604 | |
el13gs | 4:f9a899c6ac50 | 605 | if (randX==1) { |
el13gs | 4:f9a899c6ac50 | 606 | xPos=6; |
el13gs | 4:f9a899c6ac50 | 607 | } |
el13gs | 4:f9a899c6ac50 | 608 | if (randX==2) { |
el13gs | 4:f9a899c6ac50 | 609 | xPos=26; |
el13gs | 4:f9a899c6ac50 | 610 | } |
el13gs | 4:f9a899c6ac50 | 611 | if (randX==3) { |
el13gs | 4:f9a899c6ac50 | 612 | xPos=46; |
el13gs | 4:f9a899c6ac50 | 613 | } |
el13gs | 4:f9a899c6ac50 | 614 | } |
el13gs | 4:f9a899c6ac50 | 615 | |
el13gs | 4:f9a899c6ac50 | 616 | void setCircleCells(int x0,int y0,int radius) |
el13gs | 4:f9a899c6ac50 | 617 | { |
el13gs | 4:f9a899c6ac50 | 618 | int x = radius; |
el13gs | 4:f9a899c6ac50 | 619 | int y = 0; |
el13gs | 4:f9a899c6ac50 | 620 | if(y0>0) { |
el13gs | 4:f9a899c6ac50 | 621 | while(x >= y) { |
el13gs | 4:f9a899c6ac50 | 622 | |
el13gs | 4:f9a899c6ac50 | 623 | table[x+x0][y+y0]=2; |
el13gs | 4:f9a899c6ac50 | 624 | table[-x+x0][y+y0]=2; |
el13gs | 4:f9a899c6ac50 | 625 | table[y+x0][x+y0]=2; |
el13gs | 4:f9a899c6ac50 | 626 | |
el13gs | 4:f9a899c6ac50 | 627 | table[-y+x0][x+y0]=2; |
el13gs | 4:f9a899c6ac50 | 628 | table[-y+x0][-x+y0]=2; |
el13gs | 4:f9a899c6ac50 | 629 | |
el13gs | 4:f9a899c6ac50 | 630 | table[y+x0][-x+y0]=2; |
el13gs | 4:f9a899c6ac50 | 631 | table[-x+x0][-y+y0]=2; |
el13gs | 4:f9a899c6ac50 | 632 | table[-x+x0][-y+y0]=2; |
el13gs | 4:f9a899c6ac50 | 633 | y++; |
el13gs | 4:f9a899c6ac50 | 634 | } |
el13gs | 4:f9a899c6ac50 | 635 | } |
el13gs | 4:f9a899c6ac50 | 636 | } |
el13gs | 4:f9a899c6ac50 | 637 | |
el13gs | 4:f9a899c6ac50 | 638 | void clearCircleCells(int x0,int y0,int radius) |
el13gs | 4:f9a899c6ac50 | 639 | { |
el13gs | 4:f9a899c6ac50 | 640 | int x = radius; |
el13gs | 4:f9a899c6ac50 | 641 | int y = 0; |
el13gs | 4:f9a899c6ac50 | 642 | |
el13gs | 4:f9a899c6ac50 | 643 | while(x >= y) { |
el13gs | 4:f9a899c6ac50 | 644 | |
el13gs | 4:f9a899c6ac50 | 645 | // if transparent, just draw outline |
el13gs | 4:f9a899c6ac50 | 646 | table[x+x0][y+y0]=0; |
el13gs | 4:f9a899c6ac50 | 647 | table[-x+x0][y+y0]=0; |
el13gs | 4:f9a899c6ac50 | 648 | table[y+x0][x+y0]=0; |
el13gs | 4:f9a899c6ac50 | 649 | |
el13gs | 4:f9a899c6ac50 | 650 | table[-y+x0][x+y0]=0; |
el13gs | 4:f9a899c6ac50 | 651 | table[-y+x0][-x+y0]=0; |
el13gs | 4:f9a899c6ac50 | 652 | |
el13gs | 4:f9a899c6ac50 | 653 | table[y+x0][-x+y0]=0; |
el13gs | 4:f9a899c6ac50 | 654 | table[-x+x0][-y+y0]=0; |
el13gs | 4:f9a899c6ac50 | 655 | table[-x+x0][-y+y0]=0; |
el13gs | 4:f9a899c6ac50 | 656 | y++; |
el13gs | 4:f9a899c6ac50 | 657 | } |
el13gs | 4:f9a899c6ac50 | 658 | } |
el13gs | 4:f9a899c6ac50 | 659 | |
el13gs | 4:f9a899c6ac50 | 660 | void clearCells(int x,int y) |
el13gs | 4:f9a899c6ac50 | 661 | { |
el13gs | 4:f9a899c6ac50 | 662 | for(int i=0; i<=x; i++) { |
el13gs | 4:f9a899c6ac50 | 663 | for (int j=0; j<=y; j++) { |
el13gs | 4:f9a899c6ac50 | 664 | lcd.clearPixel(i,j); |
el13gs | 4:f9a899c6ac50 | 665 | table[i][j]=0; |
el13gs | 4:f9a899c6ac50 | 666 | } |
el13gs | 4:f9a899c6ac50 | 667 | } |
el13gs | 4:f9a899c6ac50 | 668 | |
el13gs | 4:f9a899c6ac50 | 669 | } |
el13gs | 4:f9a899c6ac50 | 670 | |
el13gs | 4:f9a899c6ac50 | 671 | void loose() |
el13gs | 4:f9a899c6ac50 | 672 | { |
el13gs | 4:f9a899c6ac50 | 673 | if (sounds) { |
el13gs | 4:f9a899c6ac50 | 674 | buzzer.beep(500,0.1); |
el13gs | 4:f9a899c6ac50 | 675 | } |
el13gs | 4:f9a899c6ac50 | 676 | lives=lives-1; |
el13gs | 4:f9a899c6ac50 | 677 | gamePlays=0; |
el13gs | 4:f9a899c6ac50 | 678 | wait(0.5); |
el13gs | 4:f9a899c6ac50 | 679 | ClearCar(x,v,w,h); |
el13gs | 4:f9a899c6ac50 | 680 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 681 | clearCells(60,48); |
el13gs | 4:f9a899c6ac50 | 682 | lcd.setXYAddress(0,0); |
el13gs | 4:f9a899c6ac50 | 683 | |
el13gs | 4:f9a899c6ac50 | 684 | wait(1); |
el13gs | 4:f9a899c6ac50 | 685 | lcd.refresh(); |
el13gs | 4:f9a899c6ac50 | 686 | x=26; |
el13gs | 4:f9a899c6ac50 | 687 | v=30; |
el13gs | 4:f9a899c6ac50 | 688 | lcd.drawRect(x,v,w,h,0); |
el13gs | 4:f9a899c6ac50 | 689 | wait(0.5); |
el13gs | 4:f9a899c6ac50 | 690 | gamePlays=1; |
el13gs | 4:f9a899c6ac50 | 691 | j=-100; |
el13gs | 4:f9a899c6ac50 | 692 | p=-50; |
el13gs | 4:f9a899c6ac50 | 693 | q=-40; |
el13gs | 4:f9a899c6ac50 | 694 | } |
el13gs | 4:f9a899c6ac50 | 695 |