My ELEC2645 project. Nikollao Sulollari. 200804685

Dependencies:   N5110 SoftPWM mbed

Committer:
Nikollao
Date:
Thu Mar 24 11:46:35 2016 +0000
Revision:
4:f31bdc212241
Parent:
3:d2cc054e8605
Child:
5:ffa498d7071f
improvements, fixed the button, can press play again, need to improve obstacles, and enemies.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nikollao 4:f31bdc212241 1 //Fadia
Nikollao 4:f31bdc212241 2
Nikollao 0:2d0f77943105 3 #include "mbed.h"
Nikollao 0:2d0f77943105 4 #include "N5110.h"
Nikollao 0:2d0f77943105 5 #include "stdlib.h"
Nikollao 2:af5b5d42e835 6 #include "main.h"
Nikollao 2:af5b5d42e835 7
Nikollao 0:2d0f77943105 8 N5110 lcd(PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);
Nikollao 0:2d0f77943105 9 Serial pc(USBTX,USBRX);
Nikollao 0:2d0f77943105 10
Nikollao 4:f31bdc212241 11 #define DIRECTION_TOLERANCE 0.05
Nikollao 0:2d0f77943105 12
Nikollao 0:2d0f77943105 13 Ticker ticker;
Nikollao 1:12803d645d32 14 Ticker game_ticker;
Nikollao 1:12803d645d32 15 Timeout timeout;
Nikollao 0:2d0f77943105 16
Nikollao 4:f31bdc212241 17 enum DirectionName {
Nikollao 4:f31bdc212241 18 UP,
Nikollao 4:f31bdc212241 19 DOWN,
Nikollao 4:f31bdc212241 20 LEFT,
Nikollao 4:f31bdc212241 21 RIGHT,
Nikollao 4:f31bdc212241 22 CENTRE,
Nikollao 4:f31bdc212241 23 UP_LEFT,
Nikollao 4:f31bdc212241 24 UP_RIGHT,
Nikollao 4:f31bdc212241 25 DOWN_LEFT,
Nikollao 4:f31bdc212241 26 DOWN_RIGHT
Nikollao 4:f31bdc212241 27 };
Nikollao 0:2d0f77943105 28
Nikollao 0:2d0f77943105 29 typedef struct JoyStick Joystick;
Nikollao 0:2d0f77943105 30 struct JoyStick {
Nikollao 1:12803d645d32 31 double x; // current x value
Nikollao 1:12803d645d32 32 double x0; // 'centred' x value
Nikollao 1:12803d645d32 33 double y; // current y value
Nikollao 1:12803d645d32 34 double y0; // 'centred' y value
Nikollao 0:2d0f77943105 35 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
Nikollao 0:2d0f77943105 36 DirectionName direction; // current direction
Nikollao 0:2d0f77943105 37 };
Nikollao 0:2d0f77943105 38 // create struct variable
Nikollao 0:2d0f77943105 39 Joystick joystick;
Nikollao 0:2d0f77943105 40
Nikollao 0:2d0f77943105 41
Nikollao 0:2d0f77943105 42 int main()
Nikollao 0:2d0f77943105 43 {
Nikollao 0:2d0f77943105 44 lcd.init();
Nikollao 0:2d0f77943105 45 init_K64F();
Nikollao 0:2d0f77943105 46 init_serial();
Nikollao 3:d2cc054e8605 47 button.rise(&button_isr);
Nikollao 0:2d0f77943105 48 init_game();
Nikollao 0:2d0f77943105 49 calibrateJoystick();
Nikollao 0:2d0f77943105 50
Nikollao 3:d2cc054e8605 51 ticker.attach(&timer_isr, 0.1);
Nikollao 0:2d0f77943105 52 reset = level;
Nikollao 0:2d0f77943105 53
Nikollao 0:2d0f77943105 54 while (1) {
Nikollao 0:2d0f77943105 55
Nikollao 0:2d0f77943105 56 if (g_timer_flag) {
Nikollao 0:2d0f77943105 57
Nikollao 0:2d0f77943105 58 g_timer_flag = 0;
Nikollao 0:2d0f77943105 59 lcd.clear();
Nikollao 0:2d0f77943105 60 guidance();
Nikollao 0:2d0f77943105 61 hero();
Nikollao 3:d2cc054e8605 62 enemies();
Nikollao 0:2d0f77943105 63 obstacles();
Nikollao 0:2d0f77943105 64
Nikollao 0:2d0f77943105 65 if (heroY < -45) {
Nikollao 0:2d0f77943105 66 heroY = 0;
Nikollao 0:2d0f77943105 67 level++;
Nikollao 0:2d0f77943105 68 }
Nikollao 0:2d0f77943105 69
Nikollao 0:2d0f77943105 70 if (reset < level) {
Nikollao 0:2d0f77943105 71
Nikollao 0:2d0f77943105 72 reset = level;
Nikollao 0:2d0f77943105 73 rectX = rand() % 84;
Nikollao 0:2d0f77943105 74 rectY = 0;
Nikollao 0:2d0f77943105 75 circleX = 0;
Nikollao 0:2d0f77943105 76 circleY = rand() % 47;
Nikollao 0:2d0f77943105 77 }
Nikollao 4:f31bdc212241 78 /*for (int i=0; i<84; i++) {
Nikollao 3:d2cc054e8605 79 for (int j=0; j<48; j++) {
Nikollao 3:d2cc054e8605 80 // loop through the cells on the grid
Nikollao 3:d2cc054e8605 81
Nikollao 4:f31bdc212241 82 bool n = intersection(i,j);
Nikollao 3:d2cc054e8605 83
Nikollao 3:d2cc054e8605 84 if ( n > 0) {
Nikollao 3:d2cc054e8605 85
Nikollao 3:d2cc054e8605 86 lcd.clear();
Nikollao 3:d2cc054e8605 87 lcd.printString("enemy touched",0,0);
Nikollao 3:d2cc054e8605 88 break;
Nikollao 3:d2cc054e8605 89 }
Nikollao 3:d2cc054e8605 90 }
Nikollao 4:f31bdc212241 91 }*/
Nikollao 0:2d0f77943105 92
Nikollao 0:2d0f77943105 93 pc.printf("x = %f y = %f button = %d ",joystick.x,joystick.y,joystick.button);
Nikollao 0:2d0f77943105 94
Nikollao 0:2d0f77943105 95 // check joystick direction
Nikollao 0:2d0f77943105 96 if (joystick.direction == UP)
Nikollao 0:2d0f77943105 97 pc.printf(" UP\n");
Nikollao 0:2d0f77943105 98 if (joystick.direction == DOWN)
Nikollao 0:2d0f77943105 99 pc.printf(" DOWN\n");
Nikollao 0:2d0f77943105 100 if (joystick.direction == LEFT)
Nikollao 0:2d0f77943105 101 pc.printf(" LEFT\n");
Nikollao 0:2d0f77943105 102 if (joystick.direction == RIGHT)
Nikollao 0:2d0f77943105 103 pc.printf(" RIGHT\n");
Nikollao 0:2d0f77943105 104 if (joystick.direction == CENTRE)
Nikollao 0:2d0f77943105 105 pc.printf(" CENTRE\n");
Nikollao 1:12803d645d32 106 if (joystick.direction == UP_RIGHT)
Nikollao 1:12803d645d32 107 pc.printf(" UP - RIGHT\n");
Nikollao 1:12803d645d32 108 if (joystick.direction == UP_LEFT)
Nikollao 1:12803d645d32 109 pc.printf(" UP - LEFT\n");
Nikollao 1:12803d645d32 110 if (joystick.direction == DOWN_RIGHT)
Nikollao 1:12803d645d32 111 pc.printf(" DOWN - RIGHT\n");
Nikollao 1:12803d645d32 112 if (joystick.direction == DOWN_LEFT)
Nikollao 4:f31bdc212241 113 pc.printf(" DOWN - LEFT\n");
Nikollao 0:2d0f77943105 114 }
Nikollao 0:2d0f77943105 115 updateJoystick();
Nikollao 1:12803d645d32 116 //callibrateJoystick();
Nikollao 0:2d0f77943105 117 lcd.refresh();
Nikollao 0:2d0f77943105 118 sleep();
Nikollao 0:2d0f77943105 119 }
Nikollao 0:2d0f77943105 120 }
Nikollao 0:2d0f77943105 121
Nikollao 0:2d0f77943105 122 void init_serial()
Nikollao 0:2d0f77943105 123 {
Nikollao 0:2d0f77943105 124 // set to highest baud - ensure terminal software matches
Nikollao 0:2d0f77943105 125 pc.baud(115200);
Nikollao 0:2d0f77943105 126 }
Nikollao 0:2d0f77943105 127
Nikollao 0:2d0f77943105 128 void init_K64F()
Nikollao 0:2d0f77943105 129 {
Nikollao 0:2d0f77943105 130 // on-board LEDs are active-low, so set pin high to turn them off.
Nikollao 0:2d0f77943105 131 r_led = 1;
Nikollao 0:2d0f77943105 132 g_led = 1;
Nikollao 0:2d0f77943105 133 b_led = 1;
Nikollao 0:2d0f77943105 134
Nikollao 0:2d0f77943105 135 // since the on-board switches have external pull-ups, we should disable the internal pull-down
Nikollao 0:2d0f77943105 136 // resistors that are enabled by default using InterruptIn
Nikollao 0:2d0f77943105 137 sw2.mode(PullNone);
Nikollao 0:2d0f77943105 138 sw3.mode(PullNone);
Nikollao 0:2d0f77943105 139 }
Nikollao 0:2d0f77943105 140
Nikollao 0:2d0f77943105 141 void timer_isr ()
Nikollao 0:2d0f77943105 142 {
Nikollao 0:2d0f77943105 143
Nikollao 0:2d0f77943105 144 g_timer_flag = 1;
Nikollao 0:2d0f77943105 145 // lcd.refresh();
Nikollao 0:2d0f77943105 146 }
Nikollao 0:2d0f77943105 147
Nikollao 0:2d0f77943105 148 void game_timer_isr()
Nikollao 0:2d0f77943105 149 {
Nikollao 0:2d0f77943105 150 g_game_timer_flag = 1;
Nikollao 0:2d0f77943105 151 }
Nikollao 0:2d0f77943105 152
Nikollao 0:2d0f77943105 153 void sw2_isr()
Nikollao 0:2d0f77943105 154 {
Nikollao 0:2d0f77943105 155 g_sw2_flag = 1;
Nikollao 0:2d0f77943105 156 }
Nikollao 0:2d0f77943105 157
Nikollao 4:f31bdc212241 158 void sw3_isr()
Nikollao 4:f31bdc212241 159 {
Nikollao 1:12803d645d32 160 g_sw3_flag = 1;
Nikollao 1:12803d645d32 161 }
Nikollao 1:12803d645d32 162
Nikollao 1:12803d645d32 163 void button_isr()
Nikollao 1:12803d645d32 164 {
Nikollao 1:12803d645d32 165 g_button_flag =1;
Nikollao 1:12803d645d32 166 }
Nikollao 1:12803d645d32 167
Nikollao 1:12803d645d32 168 void timeout_isr()
Nikollao 1:12803d645d32 169 {
Nikollao 1:12803d645d32 170 if (button) {
Nikollao 4:f31bdc212241 171 pc.printf("button is pressed! \n");
Nikollao 1:12803d645d32 172 }
Nikollao 1:12803d645d32 173 }
Nikollao 1:12803d645d32 174
Nikollao 0:2d0f77943105 175 void enemyRect()
Nikollao 0:2d0f77943105 176 {
Nikollao 0:2d0f77943105 177 lcd.drawRect(rectX,rectY,5,4,1);
Nikollao 0:2d0f77943105 178 rectX = rectX + rand()%4 - 2;
Nikollao 0:2d0f77943105 179 //rectY = rand()%4-2;
Nikollao 0:2d0f77943105 180 //rectX++;
Nikollao 0:2d0f77943105 181 rectY++;
Nikollao 0:2d0f77943105 182 }
Nikollao 0:2d0f77943105 183
Nikollao 0:2d0f77943105 184 void hero()
Nikollao 0:2d0f77943105 185 {
Nikollao 3:d2cc054e8605 186 heroX = heroX + 5*xPot;
Nikollao 3:d2cc054e8605 187 heroY = heroY - 5*yPot;
Nikollao 4:f31bdc212241 188
Nikollao 3:d2cc054e8605 189 if (heroX > 35) {
Nikollao 3:d2cc054e8605 190 heroX = 35;
Nikollao 4:f31bdc212241 191 }
Nikollao 4:f31bdc212241 192 if (heroX < 5) {
Nikollao 4:f31bdc212241 193 heroX = 5;
Nikollao 4:f31bdc212241 194 }
Nikollao 3:d2cc054e8605 195 lcd.drawLine(40+heroX, 47+heroY, 48+heroX, 43+heroY,1);
Nikollao 3:d2cc054e8605 196 lcd.drawLine(40+heroX, 43+heroY,48+heroX, 47+heroY,1);
Nikollao 3:d2cc054e8605 197 lcd.drawLine(44+heroX, 45+heroY,44+heroX, 41+heroY,1);
Nikollao 3:d2cc054e8605 198 lcd.drawCircle(44+heroX, 39+heroY,2,0);
Nikollao 0:2d0f77943105 199 }
Nikollao 0:2d0f77943105 200
Nikollao 0:2d0f77943105 201 void enemyCircle()
Nikollao 0:2d0f77943105 202 {
Nikollao 4:f31bdc212241 203 lcd.drawCircle(circleX,circleY,4,1);
Nikollao 4:f31bdc212241 204 circleY = circleY + rand() %4 - 2;
Nikollao 0:2d0f77943105 205
Nikollao 4:f31bdc212241 206 circleX++;
Nikollao 0:2d0f77943105 207 }
Nikollao 0:2d0f77943105 208
Nikollao 0:2d0f77943105 209 void init_game()
Nikollao 0:2d0f77943105 210 {
Nikollao 4:f31bdc212241 211 //button.mode(PullNone);
Nikollao 0:2d0f77943105 212 srand(time(NULL));
Nikollao 0:2d0f77943105 213 rectY = 0;
Nikollao 4:f31bdc212241 214 rectX = rand() %40 + 20;
Nikollao 4:f31bdc212241 215 circleY = rand() %20 + 10;
Nikollao 0:2d0f77943105 216 circleX = 0;
Nikollao 4:f31bdc212241 217
Nikollao 4:f31bdc212241 218 if ( play == 0) {
Nikollao 4:f31bdc212241 219
Nikollao 4:f31bdc212241 220 lcd.setBrightness(0.5); // put LED backlight on 50%
Nikollao 4:f31bdc212241 221 timeout.attach(&timeout_isr,2);
Nikollao 4:f31bdc212241 222 lcd.printString("Welcome to",11,1);
Nikollao 4:f31bdc212241 223 lcd.printString("Treasure Hunt!",1,3);
Nikollao 4:f31bdc212241 224 lcd.refresh();
Nikollao 4:f31bdc212241 225 sleep();
Nikollao 4:f31bdc212241 226 lcd.clear();
Nikollao 4:f31bdc212241 227 }
Nikollao 4:f31bdc212241 228 game_ticker.attach(game_timer_isr,0.2);
Nikollao 0:2d0f77943105 229
Nikollao 0:2d0f77943105 230 while (1) {
Nikollao 0:2d0f77943105 231
Nikollao 0:2d0f77943105 232 if (g_game_timer_flag) {
Nikollao 0:2d0f77943105 233
Nikollao 0:2d0f77943105 234 g_game_timer_flag = 0;
Nikollao 0:2d0f77943105 235 updateJoystick();
Nikollao 0:2d0f77943105 236 lcd.clear();
Nikollao 1:12803d645d32 237 menu();
Nikollao 3:d2cc054e8605 238 //option = menu();
Nikollao 0:2d0f77943105 239
Nikollao 0:2d0f77943105 240 if (option == 0) {
Nikollao 0:2d0f77943105 241
Nikollao 0:2d0f77943105 242 lcd.printString("Start Game <",0,0);
Nikollao 0:2d0f77943105 243 lcd.printString("Settings",0,2);
Nikollao 0:2d0f77943105 244 lcd.printString("Exit",0,4);
Nikollao 4:f31bdc212241 245 }
Nikollao 4:f31bdc212241 246 else if (option == 1) {
Nikollao 0:2d0f77943105 247
Nikollao 0:2d0f77943105 248 lcd.printString("Start Game",0,0);
Nikollao 0:2d0f77943105 249 lcd.printString("Settings <",0,2);
Nikollao 0:2d0f77943105 250 lcd.printString("Exit",0,4);
Nikollao 4:f31bdc212241 251 }
Nikollao 4:f31bdc212241 252 else {
Nikollao 0:2d0f77943105 253
Nikollao 0:2d0f77943105 254 lcd.printString("Start Game",0,0);
Nikollao 0:2d0f77943105 255 lcd.printString("Settings",0,2);
Nikollao 0:2d0f77943105 256 lcd.printString("Exit <",0,4);
Nikollao 0:2d0f77943105 257 }
Nikollao 0:2d0f77943105 258 }
Nikollao 4:f31bdc212241 259 if (g_button_flag) {
Nikollao 4:f31bdc212241 260
Nikollao 4:f31bdc212241 261 g_button_flag = 0;
Nikollao 3:d2cc054e8605 262
Nikollao 3:d2cc054e8605 263 if (option == 0) {
Nikollao 3:d2cc054e8605 264
Nikollao 4:f31bdc212241 265 game_ticker.detach();
Nikollao 4:f31bdc212241 266 break;
Nikollao 4:f31bdc212241 267 }
Nikollao 4:f31bdc212241 268 else if (option == 1) {
Nikollao 4:f31bdc212241 269
Nikollao 3:d2cc054e8605 270 //settings_menu();
Nikollao 3:d2cc054e8605 271 pc.printf("Modify Settings!");
Nikollao 4:f31bdc212241 272 }
Nikollao 4:f31bdc212241 273 else {
Nikollao 4:f31bdc212241 274
Nikollao 3:d2cc054e8605 275 lcd.turnOff();
Nikollao 3:d2cc054e8605 276 deepsleep();
Nikollao 3:d2cc054e8605 277 }
Nikollao 4:f31bdc212241 278 }
Nikollao 4:f31bdc212241 279 sleep();
Nikollao 0:2d0f77943105 280 }
Nikollao 0:2d0f77943105 281 }
Nikollao 0:2d0f77943105 282 void guidance()
Nikollao 0:2d0f77943105 283 {
Nikollao 0:2d0f77943105 284
Nikollao 0:2d0f77943105 285 if (level < 7) {
Nikollao 0:2d0f77943105 286
Nikollao 0:2d0f77943105 287 lcd.drawLine(42,0,42,4,1);
Nikollao 0:2d0f77943105 288 lcd.drawLine(42,0,40,2,1);
Nikollao 0:2d0f77943105 289 lcd.drawLine(42,0,44,2,1);
Nikollao 0:2d0f77943105 290 } else if (level == 7) {
Nikollao 0:2d0f77943105 291
Nikollao 4:f31bdc212241 292 lcd.printString("F",42,0);
Nikollao 0:2d0f77943105 293 } else if (level == 8) {
Nikollao 0:2d0f77943105 294
Nikollao 0:2d0f77943105 295 ticker.detach();
Nikollao 0:2d0f77943105 296 lcd.clear();
Nikollao 0:2d0f77943105 297 lcd.printString("Well done!",0,0);
Nikollao 0:2d0f77943105 298 lcd.refresh();
Nikollao 4:f31bdc212241 299 timeout.attach(&timeout_isr,2);
Nikollao 4:f31bdc212241 300 sleep();
Nikollao 0:2d0f77943105 301 lcd.clear();
Nikollao 4:f31bdc212241 302 lcd.printString("Play again <",0,0);
Nikollao 0:2d0f77943105 303 lcd.refresh();
Nikollao 4:f31bdc212241 304 sleep();
Nikollao 4:f31bdc212241 305
Nikollao 4:f31bdc212241 306 if (g_button_flag) {
Nikollao 4:f31bdc212241 307
Nikollao 4:f31bdc212241 308 g_button_flag = 0;
Nikollao 4:f31bdc212241 309 level = 0;
Nikollao 4:f31bdc212241 310 play++;
Nikollao 4:f31bdc212241 311 lcd.clear();
Nikollao 4:f31bdc212241 312 main();
Nikollao 4:f31bdc212241 313 }
Nikollao 0:2d0f77943105 314 }
Nikollao 0:2d0f77943105 315 }
Nikollao 0:2d0f77943105 316
Nikollao 0:2d0f77943105 317 void obstacles()
Nikollao 0:2d0f77943105 318 {
Nikollao 0:2d0f77943105 319
Nikollao 0:2d0f77943105 320 if (level == 1) {
Nikollao 0:2d0f77943105 321
Nikollao 0:2d0f77943105 322 lcd.drawRect(10,15,2,2,1);
Nikollao 0:2d0f77943105 323 lcd.drawRect(74,15,2,2,1);
Nikollao 0:2d0f77943105 324 } else if (level == 2) {
Nikollao 0:2d0f77943105 325
Nikollao 0:2d0f77943105 326 lcd.drawRect(10,15,2,2,1);
Nikollao 0:2d0f77943105 327 lcd.drawRect(74,15,2,2,1);
Nikollao 0:2d0f77943105 328 lcd.drawRect(10,28,2,2,1);
Nikollao 0:2d0f77943105 329 lcd.drawRect(74,28,2,2,1);
Nikollao 0:2d0f77943105 330 } else if (level == 3) {
Nikollao 0:2d0f77943105 331
Nikollao 0:2d0f77943105 332 lcd.drawRect(10,15,2,2,1);
Nikollao 0:2d0f77943105 333 lcd.drawRect(74,15,2,2,1);
Nikollao 0:2d0f77943105 334 lcd.drawRect(10,28,2,2,1);
Nikollao 0:2d0f77943105 335 lcd.drawRect(74,28,2,2,1);
Nikollao 0:2d0f77943105 336 lcd.drawRect(30,15,2,2,1);
Nikollao 0:2d0f77943105 337 lcd.drawRect(54,15,2,2,1);
Nikollao 0:2d0f77943105 338 lcd.drawRect(30,28,2,2,1);
Nikollao 0:2d0f77943105 339 lcd.drawRect(54,28,2,2,1);
Nikollao 0:2d0f77943105 340 } else if (level == 4) {
Nikollao 0:2d0f77943105 341
Nikollao 0:2d0f77943105 342 lcd.drawRect(10 + rand() %4 - 2,15 + rand() &4 -2,2,2,1);
Nikollao 1:12803d645d32 343 lcd.drawRect(74 + rand() %4 - 2,15 + rand() %4 - 2,2,2,1);
Nikollao 1:12803d645d32 344 lcd.drawRect(10 + rand() %4 - 2,28 + rand() %4 - 2,2,2,1);
Nikollao 1:12803d645d32 345 lcd.drawRect(74 + rand() %4 - 2,28 + rand() %4 - 2,2,2,1);
Nikollao 1:12803d645d32 346 lcd.drawRect(30 + rand() %4 - 2,15,2,2,1);
Nikollao 1:12803d645d32 347 lcd.drawRect(54,15 + rand() %4 - 2,2,2,1);
Nikollao 1:12803d645d32 348 lcd.drawRect(30,28 + rand() %4 - 2,2,2,1);
Nikollao 1:12803d645d32 349 lcd.drawRect(54 + rand() %4 - 2,28,2,2,1);
Nikollao 4:f31bdc212241 350 } else if ( level == 5) {
Nikollao 4:f31bdc212241 351
Nikollao 1:12803d645d32 352 lcd.drawLine(50,35,65,35,1);
Nikollao 1:12803d645d32 353 lcd.drawLine(38,30,28,30,1);
Nikollao 1:12803d645d32 354 lcd.drawLine(60,25,70,25,1);
Nikollao 1:12803d645d32 355 lcd.drawLine(28,25,18,25,1);
Nikollao 1:12803d645d32 356 lcd.drawLine(70,20,80,20,1);
Nikollao 1:12803d645d32 357 lcd.drawLine(18,20,8,20,1);
Nikollao 4:f31bdc212241 358 } else if (level == 6) {
Nikollao 4:f31bdc212241 359
Nikollao 4:f31bdc212241 360 } else if (level == 7) {
Nikollao 4:f31bdc212241 361
Nikollao 4:f31bdc212241 362 /*
Nikollao 4:f31bdc212241 363 lcd.drawLine(50,15,30,15,1);
Nikollao 4:f31bdc212241 364 lcd.drawLine(30,15,30,35,1);
Nikollao 4:f31bdc212241 365 lcd.drawLine(30,25,45,25,1);
Nikollao 4:f31bdc212241 366 */
Nikollao 0:2d0f77943105 367 }
Nikollao 0:2d0f77943105 368 }
Nikollao 0:2d0f77943105 369
Nikollao 4:f31bdc212241 370 void enemies()
Nikollao 4:f31bdc212241 371 {
Nikollao 4:f31bdc212241 372
Nikollao 3:d2cc054e8605 373 if (level == 0) {
Nikollao 3:d2cc054e8605 374
Nikollao 4:f31bdc212241 375 enemyRect();
Nikollao 4:f31bdc212241 376 //enemyCircle();
Nikollao 4:f31bdc212241 377 } else if (level == 1) {
Nikollao 3:d2cc054e8605 378
Nikollao 4:f31bdc212241 379 enemyRect();
Nikollao 4:f31bdc212241 380 //enemyCircle();
Nikollao 4:f31bdc212241 381 } else if (level == 2) {
Nikollao 3:d2cc054e8605 382
Nikollao 4:f31bdc212241 383 } else if (level == 3) {
Nikollao 3:d2cc054e8605 384
Nikollao 4:f31bdc212241 385 }
Nikollao 4:f31bdc212241 386 enemyCircle();
Nikollao 3:d2cc054e8605 387 }
Nikollao 0:2d0f77943105 388 void calibrateJoystick()
Nikollao 0:2d0f77943105 389 {
Nikollao 0:2d0f77943105 390 // must not move during calibration
Nikollao 0:2d0f77943105 391 joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
Nikollao 0:2d0f77943105 392 joystick.y0 = yPot;
Nikollao 0:2d0f77943105 393 }
Nikollao 0:2d0f77943105 394 void updateJoystick()
Nikollao 0:2d0f77943105 395 {
Nikollao 0:2d0f77943105 396 // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
Nikollao 0:2d0f77943105 397 joystick.x = xPot - joystick.x0;
Nikollao 0:2d0f77943105 398 joystick.y = yPot - joystick.y0;
Nikollao 0:2d0f77943105 399 // read button state
Nikollao 0:2d0f77943105 400 joystick.button = button;
Nikollao 0:2d0f77943105 401
Nikollao 0:2d0f77943105 402 // calculate direction depending on x,y values
Nikollao 0:2d0f77943105 403 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
Nikollao 0:2d0f77943105 404 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Nikollao 0:2d0f77943105 405 joystick.direction = CENTRE;
Nikollao 0:2d0f77943105 406 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Nikollao 0:2d0f77943105 407 joystick.direction = UP;
Nikollao 0:2d0f77943105 408 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Nikollao 0:2d0f77943105 409 joystick.direction = DOWN;
Nikollao 0:2d0f77943105 410 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
Nikollao 0:2d0f77943105 411 joystick.direction = RIGHT;
Nikollao 0:2d0f77943105 412 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
Nikollao 0:2d0f77943105 413 joystick.direction = LEFT;
Nikollao 1:12803d645d32 414 } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) {
Nikollao 1:12803d645d32 415 joystick.direction = UP_LEFT;
Nikollao 1:12803d645d32 416 } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) {
Nikollao 1:12803d645d32 417 joystick.direction = UP_RIGHT;
Nikollao 1:12803d645d32 418 } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) {
Nikollao 1:12803d645d32 419 joystick.direction = DOWN_LEFT;
Nikollao 1:12803d645d32 420 } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) {
Nikollao 1:12803d645d32 421 joystick.direction = DOWN_RIGHT;
Nikollao 0:2d0f77943105 422 }
Nikollao 0:2d0f77943105 423 }
Nikollao 0:2d0f77943105 424
Nikollao 0:2d0f77943105 425 int menu()
Nikollao 0:2d0f77943105 426 {
Nikollao 0:2d0f77943105 427
Nikollao 0:2d0f77943105 428 if (joystick.y <= 0.33) {
Nikollao 0:2d0f77943105 429 option = 0;
Nikollao 0:2d0f77943105 430 } else if (joystick.y <= 0.66) {
Nikollao 0:2d0f77943105 431 option = 1;
Nikollao 0:2d0f77943105 432 } else {
Nikollao 0:2d0f77943105 433 option = 2;
Nikollao 0:2d0f77943105 434 }
Nikollao 0:2d0f77943105 435 return option;
Nikollao 0:2d0f77943105 436 }
Nikollao 3:d2cc054e8605 437
Nikollao 4:f31bdc212241 438 bool intersection (int i, int j)
Nikollao 4:f31bdc212241 439 {
Nikollao 3:d2cc054e8605 440
Nikollao 4:f31bdc212241 441 bool n=0; // set n (number of neigbours) as 0
Nikollao 3:d2cc054e8605 442
Nikollao 4:f31bdc212241 443 if (lcd.getPixel(i-1,j-1)) //pixel to the top-left
Nikollao 4:f31bdc212241 444 n = 1; // increase n by 1
Nikollao 4:f31bdc212241 445 if (lcd.getPixel(i-1,j)) //pixel to the left
Nikollao 4:f31bdc212241 446 n = 1; // increase n by 1
Nikollao 4:f31bdc212241 447 if (lcd.getPixel(i-1,j+1)) //pixel to the bottom-left
Nikollao 4:f31bdc212241 448 n = 1; // increase n by 1
Nikollao 4:f31bdc212241 449 if (lcd.getPixel(i,j-1)) // pixel to the top
Nikollao 4:f31bdc212241 450 n = 1; // increase n by 1
Nikollao 4:f31bdc212241 451 if (lcd.getPixel(i,j+1)) //pixel to the bottom
Nikollao 4:f31bdc212241 452 n = 1; // increase n by 1
Nikollao 4:f31bdc212241 453 if (lcd.getPixel(i+1,j-1)) //pixel to the top-right
Nikollao 4:f31bdc212241 454 n = 1; // increase n by 1
Nikollao 4:f31bdc212241 455 if (lcd.getPixel(i+1,j)) // pixel to the right
Nikollao 4:f31bdc212241 456 n = 1; // increase n by 1
Nikollao 4:f31bdc212241 457 if (lcd.getPixel(i+1,j+1)) //pixel to the bottom right
Nikollao 4:f31bdc212241 458 n = 1; // increase n by 1
Nikollao 4:f31bdc212241 459 //pc.printf("Number of neighbours = %d \n",n);
Nikollao 3:d2cc054e8605 460 return n;
Nikollao 3:d2cc054e8605 461 }
Nikollao 3:d2cc054e8605 462
Nikollao 0:2d0f77943105 463 void error()
Nikollao 0:2d0f77943105 464 {
Nikollao 0:2d0f77943105 465 while (1) {
Nikollao 4:f31bdc212241 466
Nikollao 0:2d0f77943105 467 lcd.printString("Error!",0,0);
Nikollao 0:2d0f77943105 468 r_led = 0;
Nikollao 0:2d0f77943105 469 wait(0.2);
Nikollao 0:2d0f77943105 470 r_led = 1;
Nikollao 0:2d0f77943105 471 wait(0.2);
Nikollao 0:2d0f77943105 472 }
Nikollao 0:2d0f77943105 473 }