My ELEC2645 project. Nikollao Sulollari. 200804685

Dependencies:   N5110 SoftPWM mbed

Fork of Treasure_Hunt by ELEC2645 (2015/16)

Committer:
Nikollao
Date:
Mon Mar 28 12:10:24 2016 +0000
Revision:
6:c11bb31a06b3
Parent:
5:ffa498d7071f
Child:
7:f31a4b4beb91
close to getting overlap, needs improvement.

Who changed what in which revision?

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