My ELEC2645 project. Nikollao Sulollari. 200804685
Dependencies: N5110 SoftPWM mbed
Fork of Treasure_Hunt by
main.h@7:f31a4b4beb91, 2016-04-04 (annotated)
- Committer:
- Nikollao
- Date:
- Mon Apr 04 12:20:42 2016 +0000
- Revision:
- 7:f31a4b4beb91
- Parent:
- 6:c11bb31a06b3
- Child:
- 8:606a488fa720
Hero is now controlled, buzzer connected, obstacles progressing, need to finish obstacles and enemies
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Nikollao | 5:ffa498d7071f | 1 | /** |
Nikollao | 5:ffa498d7071f | 2 | @file main.h |
Nikollao | 5:ffa498d7071f | 3 | @brief Header file contains functions and variables |
Nikollao | 5:ffa498d7071f | 4 | @brief Treasure Hunt - Embedded Systems Project |
Nikollao | 5:ffa498d7071f | 5 | @brief Revision 1.0 |
Nikollao | 5:ffa498d7071f | 6 | @author Nikollao Sulollari |
Nikollao | 5:ffa498d7071f | 7 | @Date 26/03/2016 |
Nikollao | 5:ffa498d7071f | 8 | */ |
Nikollao | 5:ffa498d7071f | 9 | |
Nikollao | 5:ffa498d7071f | 10 | #ifndef MAIN_H |
Nikollao | 5:ffa498d7071f | 11 | #define MAIN_H |
Nikollao | 5:ffa498d7071f | 12 | #include "mbed.h" |
Nikollao | 7:f31a4b4beb91 | 13 | #include "N5110.h" |
Nikollao | 5:ffa498d7071f | 14 | |
Nikollao | 7:f31a4b4beb91 | 15 | #define DIRECTION_TOLERANCE 0.05 |
Nikollao | 7:f31a4b4beb91 | 16 | /** |
Nikollao | 7:f31a4b4beb91 | 17 | @nameSpace r_led |
Nikollao | 7:f31a4b4beb91 | 18 | @brief output for status of red LED |
Nikollao | 7:f31a4b4beb91 | 19 | */ |
Nikollao | 7:f31a4b4beb91 | 20 | DigitalOut r_led(LED_RED); |
Nikollao | 7:f31a4b4beb91 | 21 | |
Nikollao | 7:f31a4b4beb91 | 22 | /** |
Nikollao | 7:f31a4b4beb91 | 23 | @nameSpace g_led |
Nikollao | 7:f31a4b4beb91 | 24 | @brief output for status of green LED |
Nikollao | 7:f31a4b4beb91 | 25 | */ |
Nikollao | 7:f31a4b4beb91 | 26 | DigitalOut g_led(LED_GREEN); |
Nikollao | 5:ffa498d7071f | 27 | |
Nikollao | 5:ffa498d7071f | 28 | /** |
Nikollao | 7:f31a4b4beb91 | 29 | @nameSpace b_led |
Nikollao | 7:f31a4b4beb91 | 30 | @brief output for status of blue LED |
Nikollao | 5:ffa498d7071f | 31 | */ |
Nikollao | 2:af5b5d42e835 | 32 | DigitalOut b_led(LED_BLUE); |
Nikollao | 2:af5b5d42e835 | 33 | |
Nikollao | 7:f31a4b4beb91 | 34 | /** |
Nikollao | 7:f31a4b4beb91 | 35 | @nameSpace lcd |
Nikollao | 7:f31a4b4beb91 | 36 | @brief object of the N5110 class |
Nikollao | 7:f31a4b4beb91 | 37 | */ |
Nikollao | 7:f31a4b4beb91 | 38 | N5110 lcd(PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); |
Nikollao | 7:f31a4b4beb91 | 39 | |
Nikollao | 7:f31a4b4beb91 | 40 | /** |
Nikollao | 7:f31a4b4beb91 | 41 | @nameSpace pc |
Nikollao | 7:f31a4b4beb91 | 42 | @brief serial connection between mbed and pc |
Nikollao | 7:f31a4b4beb91 | 43 | */ |
Nikollao | 7:f31a4b4beb91 | 44 | Serial pc(USBTX,USBRX); |
Nikollao | 7:f31a4b4beb91 | 45 | |
Nikollao | 2:af5b5d42e835 | 46 | // K64F on-board switches |
Nikollao | 2:af5b5d42e835 | 47 | InterruptIn sw2(SW2); |
Nikollao | 2:af5b5d42e835 | 48 | InterruptIn sw3(SW3); |
Nikollao | 2:af5b5d42e835 | 49 | |
Nikollao | 7:f31a4b4beb91 | 50 | /** |
Nikollao | 7:f31a4b4beb91 | 51 | @nameSpace button |
Nikollao | 7:f31a4b4beb91 | 52 | @brief interrupt executes an event triggered task |
Nikollao | 7:f31a4b4beb91 | 53 | */ |
Nikollao | 2:af5b5d42e835 | 54 | InterruptIn button(PTB2); |
Nikollao | 7:f31a4b4beb91 | 55 | |
Nikollao | 7:f31a4b4beb91 | 56 | /** |
Nikollao | 7:f31a4b4beb91 | 57 | @nameSpace xPot |
Nikollao | 7:f31a4b4beb91 | 58 | @brief read x-axis position from the value of the joystick |
Nikollao | 7:f31a4b4beb91 | 59 | */ |
Nikollao | 2:af5b5d42e835 | 60 | AnalogIn xPot(PTB3); |
Nikollao | 7:f31a4b4beb91 | 61 | |
Nikollao | 7:f31a4b4beb91 | 62 | /** |
Nikollao | 7:f31a4b4beb91 | 63 | @nameSpace yPot |
Nikollao | 7:f31a4b4beb91 | 64 | @brief read y-axis position from the value of the joystick |
Nikollao | 7:f31a4b4beb91 | 65 | */ |
Nikollao | 2:af5b5d42e835 | 66 | AnalogIn yPot(PTB10); |
Nikollao | 7:f31a4b4beb91 | 67 | |
Nikollao | 7:f31a4b4beb91 | 68 | /** |
Nikollao | 7:f31a4b4beb91 | 69 | @nameSpace buzzer |
Nikollao | 7:f31a4b4beb91 | 70 | @brief create PWM signal to set buzzer duty cycle and period |
Nikollao | 7:f31a4b4beb91 | 71 | */ |
Nikollao | 7:f31a4b4beb91 | 72 | PwmOut buzzer(PTC11); |
Nikollao | 7:f31a4b4beb91 | 73 | |
Nikollao | 7:f31a4b4beb91 | 74 | /** |
Nikollao | 7:f31a4b4beb91 | 75 | @nameSpace ticker |
Nikollao | 7:f31a4b4beb91 | 76 | @brief interrupt executes a time-triggered task |
Nikollao | 7:f31a4b4beb91 | 77 | */ |
Nikollao | 7:f31a4b4beb91 | 78 | Ticker ticker; |
Nikollao | 7:f31a4b4beb91 | 79 | |
Nikollao | 7:f31a4b4beb91 | 80 | /** |
Nikollao | 7:f31a4b4beb91 | 81 | @nameSpace game_ticker |
Nikollao | 7:f31a4b4beb91 | 82 | @brief interrupt executes a time-triggered task |
Nikollao | 7:f31a4b4beb91 | 83 | */ |
Nikollao | 7:f31a4b4beb91 | 84 | Ticker game_ticker; |
Nikollao | 7:f31a4b4beb91 | 85 | |
Nikollao | 7:f31a4b4beb91 | 86 | /** |
Nikollao | 7:f31a4b4beb91 | 87 | @nameSpace timeout |
Nikollao | 7:f31a4b4beb91 | 88 | @brief interrupt calls a function after a specified amount of time |
Nikollao | 7:f31a4b4beb91 | 89 | */ |
Nikollao | 7:f31a4b4beb91 | 90 | Timeout timeout; |
Nikollao | 7:f31a4b4beb91 | 91 | |
Nikollao | 7:f31a4b4beb91 | 92 | |
Nikollao | 7:f31a4b4beb91 | 93 | /** |
Nikollao | 7:f31a4b4beb91 | 94 | @nameSpace DirectionName |
Nikollao | 7:f31a4b4beb91 | 95 | @brief define joystick's direction based on its x,y values |
Nikollao | 7:f31a4b4beb91 | 96 | */ |
Nikollao | 7:f31a4b4beb91 | 97 | enum DirectionName { |
Nikollao | 7:f31a4b4beb91 | 98 | UP, |
Nikollao | 7:f31a4b4beb91 | 99 | DOWN, |
Nikollao | 7:f31a4b4beb91 | 100 | LEFT, |
Nikollao | 7:f31a4b4beb91 | 101 | RIGHT, |
Nikollao | 7:f31a4b4beb91 | 102 | CENTRE, |
Nikollao | 7:f31a4b4beb91 | 103 | UP_LEFT, |
Nikollao | 7:f31a4b4beb91 | 104 | UP_RIGHT, |
Nikollao | 7:f31a4b4beb91 | 105 | DOWN_LEFT, |
Nikollao | 7:f31a4b4beb91 | 106 | DOWN_RIGHT |
Nikollao | 7:f31a4b4beb91 | 107 | }; |
Nikollao | 7:f31a4b4beb91 | 108 | |
Nikollao | 7:f31a4b4beb91 | 109 | /** |
Nikollao | 7:f31a4b4beb91 | 110 | @nameSpace Joystick |
Nikollao | 7:f31a4b4beb91 | 111 | @brief create strcut Joystick |
Nikollao | 7:f31a4b4beb91 | 112 | */ |
Nikollao | 7:f31a4b4beb91 | 113 | typedef struct JoyStick Joystick; |
Nikollao | 7:f31a4b4beb91 | 114 | struct JoyStick { |
Nikollao | 7:f31a4b4beb91 | 115 | double x; /// current x value |
Nikollao | 7:f31a4b4beb91 | 116 | double x0; /// 'centred' x value |
Nikollao | 7:f31a4b4beb91 | 117 | double y; /// current y value |
Nikollao | 7:f31a4b4beb91 | 118 | double y0; /// 'centred' y value |
Nikollao | 7:f31a4b4beb91 | 119 | int button; /// button state (assume pull-down used, so 1 = pressed, 0 = unpressed) |
Nikollao | 7:f31a4b4beb91 | 120 | DirectionName direction; // current direction |
Nikollao | 7:f31a4b4beb91 | 121 | }; |
Nikollao | 7:f31a4b4beb91 | 122 | /// create struct variable |
Nikollao | 7:f31a4b4beb91 | 123 | Joystick joystick; |
Nikollao | 2:af5b5d42e835 | 124 | |
Nikollao | 5:ffa498d7071f | 125 | /** |
Nikollao | 5:ffa498d7071f | 126 | Displays an error message |
Nikollao | 5:ffa498d7071f | 127 | */ |
Nikollao | 2:af5b5d42e835 | 128 | void error(); |
Nikollao | 5:ffa498d7071f | 129 | |
Nikollao | 5:ffa498d7071f | 130 | /** |
Nikollao | 5:ffa498d7071f | 131 | set-up serial port |
Nikollao | 5:ffa498d7071f | 132 | */ |
Nikollao | 2:af5b5d42e835 | 133 | void init_serial(); |
Nikollao | 5:ffa498d7071f | 134 | |
Nikollao | 5:ffa498d7071f | 135 | /** |
Nikollao | 5:ffa498d7071f | 136 | set-up the on-board LEDs and switches |
Nikollao | 5:ffa498d7071f | 137 | */ |
Nikollao | 2:af5b5d42e835 | 138 | void init_K64F(); |
Nikollao | 5:ffa498d7071f | 139 | |
Nikollao | 5:ffa498d7071f | 140 | /** |
Nikollao | 5:ffa498d7071f | 141 | Set-up random variables and game menu |
Nikollao | 5:ffa498d7071f | 142 | */ |
Nikollao | 2:af5b5d42e835 | 143 | void init_game(); |
Nikollao | 5:ffa498d7071f | 144 | |
Nikollao | 5:ffa498d7071f | 145 | /** |
Nikollao | 5:ffa498d7071f | 146 | Set-up flag to 1 |
Nikollao | 5:ffa498d7071f | 147 | */ |
Nikollao | 5:ffa498d7071f | 148 | |
Nikollao | 5:ffa498d7071f | 149 | /** |
Nikollao | 5:ffa498d7071f | 150 | Set-up flag to 1 |
Nikollao | 5:ffa498d7071f | 151 | */ |
Nikollao | 2:af5b5d42e835 | 152 | void timer_isr(); |
Nikollao | 5:ffa498d7071f | 153 | |
Nikollao | 5:ffa498d7071f | 154 | /** |
Nikollao | 5:ffa498d7071f | 155 | Set-up flag to 1 |
Nikollao | 5:ffa498d7071f | 156 | */ |
Nikollao | 5:ffa498d7071f | 157 | |
Nikollao | 5:ffa498d7071f | 158 | /** |
Nikollao | 5:ffa498d7071f | 159 | Set-up flag to 1 |
Nikollao | 5:ffa498d7071f | 160 | */ |
Nikollao | 2:af5b5d42e835 | 161 | void game_timer_isr(); |
Nikollao | 5:ffa498d7071f | 162 | |
Nikollao | 5:ffa498d7071f | 163 | /** |
Nikollao | 5:ffa498d7071f | 164 | Set-up flag to 1 |
Nikollao | 5:ffa498d7071f | 165 | */ |
Nikollao | 2:af5b5d42e835 | 166 | void sw2_isr(); |
Nikollao | 5:ffa498d7071f | 167 | |
Nikollao | 5:ffa498d7071f | 168 | /** |
Nikollao | 5:ffa498d7071f | 169 | Set-up flag to 1 |
Nikollao | 5:ffa498d7071f | 170 | */ |
Nikollao | 2:af5b5d42e835 | 171 | void sw3_isr(); |
Nikollao | 5:ffa498d7071f | 172 | |
Nikollao | 5:ffa498d7071f | 173 | /** |
Nikollao | 5:ffa498d7071f | 174 | Set-up flag to 1 |
Nikollao | 5:ffa498d7071f | 175 | */ |
Nikollao | 2:af5b5d42e835 | 176 | void button_isr(); |
Nikollao | 5:ffa498d7071f | 177 | |
Nikollao | 5:ffa498d7071f | 178 | /** |
Nikollao | 5:ffa498d7071f | 179 | Set-up flag to 1 |
Nikollao | 5:ffa498d7071f | 180 | */ |
Nikollao | 2:af5b5d42e835 | 181 | void timeout_isr(); |
Nikollao | 2:af5b5d42e835 | 182 | |
Nikollao | 5:ffa498d7071f | 183 | /** |
Nikollao | 5:ffa498d7071f | 184 | Set current position to default position of Joystick |
Nikollao | 5:ffa498d7071f | 185 | */ |
Nikollao | 2:af5b5d42e835 | 186 | void calibrateJoystick(); |
Nikollao | 5:ffa498d7071f | 187 | |
Nikollao | 5:ffa498d7071f | 188 | /** |
Nikollao | 5:ffa498d7071f | 189 | Update the values of the joystick to get current position |
Nikollao | 5:ffa498d7071f | 190 | */ |
Nikollao | 2:af5b5d42e835 | 191 | void updateJoystick(); |
Nikollao | 2:af5b5d42e835 | 192 | |
Nikollao | 5:ffa498d7071f | 193 | /** |
Nikollao | 5:ffa498d7071f | 194 | Create an enemy rectangular shape |
Nikollao | 5:ffa498d7071f | 195 | */ |
Nikollao | 2:af5b5d42e835 | 196 | void enemyRect(); |
Nikollao | 5:ffa498d7071f | 197 | |
Nikollao | 5:ffa498d7071f | 198 | /** |
Nikollao | 5:ffa498d7071f | 199 | Create circle shape enemy |
Nikollao | 5:ffa498d7071f | 200 | */ |
Nikollao | 2:af5b5d42e835 | 201 | void enemyCircle(); |
Nikollao | 5:ffa498d7071f | 202 | |
Nikollao | 5:ffa498d7071f | 203 | /** |
Nikollao | 5:ffa498d7071f | 204 | creates the hero of the game |
Nikollao | 5:ffa498d7071f | 205 | */ |
Nikollao | 2:af5b5d42e835 | 206 | void hero(); |
Nikollao | 5:ffa498d7071f | 207 | |
Nikollao | 5:ffa498d7071f | 208 | /** |
Nikollao | 5:ffa498d7071f | 209 | Shows the right direction |
Nikollao | 5:ffa498d7071f | 210 | */ |
Nikollao | 2:af5b5d42e835 | 211 | void guidance(); |
Nikollao | 5:ffa498d7071f | 212 | |
Nikollao | 5:ffa498d7071f | 213 | /** |
Nikollao | 5:ffa498d7071f | 214 | Locates obstacles in the screen |
Nikollao | 5:ffa498d7071f | 215 | */ |
Nikollao | 2:af5b5d42e835 | 216 | void obstacles(); |
Nikollao | 5:ffa498d7071f | 217 | |
Nikollao | 5:ffa498d7071f | 218 | /** |
Nikollao | 5:ffa498d7071f | 219 | Gets enemies depending on the level |
Nikollao | 5:ffa498d7071f | 220 | */ |
Nikollao | 3:d2cc054e8605 | 221 | void enemies(); |
Nikollao | 5:ffa498d7071f | 222 | |
Nikollao | 5:ffa498d7071f | 223 | /** |
Nikollao | 5:ffa498d7071f | 224 | Get s vslue of the .y position, control menu |
Nikollao | 5:ffa498d7071f | 225 | */ |
Nikollao | 2:af5b5d42e835 | 226 | int menu(); |
Nikollao | 4:f31bdc212241 | 227 | |
Nikollao | 6:c11bb31a06b3 | 228 | //testing |
Nikollao | 6:c11bb31a06b3 | 229 | void checkOverlap(); |
Nikollao | 6:c11bb31a06b3 | 230 | void userTouched(); |
Nikollao | 6:c11bb31a06b3 | 231 | |
Nikollao | 5:ffa498d7071f | 232 | /** |
Nikollao | 5:ffa498d7071f | 233 | Check for intrersection |
Nikollao | 5:ffa498d7071f | 234 | @param i loops through x direction |
Nikollao | 5:ffa498d7071f | 235 | @param j loops through y direction |
Nikollao | 5:ffa498d7071f | 236 | @returns the number of pixels aroun the hero detected |
Nikollao | 5:ffa498d7071f | 237 | */ |
Nikollao | 5:ffa498d7071f | 238 | int intersection(int i, int j); |
Nikollao | 5:ffa498d7071f | 239 | |
Nikollao | 5:ffa498d7071f | 240 | |
Nikollao | 7:f31a4b4beb91 | 241 | //vars |
Nikollao | 7:f31a4b4beb91 | 242 | volatile int rectX; /*!< used to determine x-axis position of the rect enemy */ |
Nikollao | 7:f31a4b4beb91 | 243 | |
Nikollao | 7:f31a4b4beb91 | 244 | volatile int rectY ;/*!< used to determine y-axis position of the rect enemy */ |
Nikollao | 5:ffa498d7071f | 245 | |
Nikollao | 6:c11bb31a06b3 | 246 | volatile int circleX;/*!< used to determine x-axis position of the circular enemy */ |
Nikollao | 5:ffa498d7071f | 247 | |
Nikollao | 6:c11bb31a06b3 | 248 | volatile int circleY;/*!< used to determine y-axis position of the circular enemy */ |
Nikollao | 5:ffa498d7071f | 249 | |
Nikollao | 6:c11bb31a06b3 | 250 | volatile int heroX;/*!< used to move the hero along x-axis */ |
Nikollao | 5:ffa498d7071f | 251 | |
Nikollao | 6:c11bb31a06b3 | 252 | volatile int heroY;/*!< used to move the hero along y-axis */ |
Nikollao | 5:ffa498d7071f | 253 | |
Nikollao | 6:c11bb31a06b3 | 254 | volatile int level = 0; /*!< initiate the level difficulty of the game */ |
Nikollao | 2:af5b5d42e835 | 255 | |
Nikollao | 6:c11bb31a06b3 | 256 | volatile int g_timer_flag = 0; /*!< set timer flag in the isr, timer trigger interrupt */ |
Nikollao | 5:ffa498d7071f | 257 | |
Nikollao | 6:c11bb31a06b3 | 258 | volatile int g_game_timer_flag = 0; /*!< set timer flag in the isr, timer trigger interrupt */ |
Nikollao | 5:ffa498d7071f | 259 | |
Nikollao | 6:c11bb31a06b3 | 260 | volatile int g_sw2_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */ |
Nikollao | 5:ffa498d7071f | 261 | |
Nikollao | 6:c11bb31a06b3 | 262 | volatile int g_sw3_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */ |
Nikollao | 5:ffa498d7071f | 263 | |
Nikollao | 6:c11bb31a06b3 | 264 | volatile int g_button_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */ |
Nikollao | 2:af5b5d42e835 | 265 | |
Nikollao | 6:c11bb31a06b3 | 266 | volatile int option = 0; /*!< select option in menu based on Joystick's movement */ |
Nikollao | 5:ffa498d7071f | 267 | |
Nikollao | 6:c11bb31a06b3 | 268 | volatile int play = 0; /*!< counts the number of plays */ |
Nikollao | 5:ffa498d7071f | 269 | |
Nikollao | 6:c11bb31a06b3 | 270 | volatile int tries = 0;/*!< counts the number of trials */ |
Nikollao | 4:f31bdc212241 | 271 | |
Nikollao | 6:c11bb31a06b3 | 272 | volatile int n;/*!< number of pixels overlapping */ |
Nikollao | 6:c11bb31a06b3 | 273 | int pixels[84][48]; |
Nikollao | 4:f31bdc212241 | 274 | |
Nikollao | 6:c11bb31a06b3 | 275 | int reset = 0; /*!< used to save current level of difficulty */ |
Nikollao | 4:f31bdc212241 | 276 | |
Nikollao | 7:f31a4b4beb91 | 277 | int objectX = 10; |
Nikollao | 7:f31a4b4beb91 | 278 | |
Nikollao | 7:f31a4b4beb91 | 279 | int objectY = 20; |
Nikollao | 7:f31a4b4beb91 | 280 | |
Nikollao | 7:f31a4b4beb91 | 281 | void enemies() |
Nikollao | 7:f31a4b4beb91 | 282 | { |
Nikollao | 7:f31a4b4beb91 | 283 | /// generate enemies in the screen depending on the level difficulty |
Nikollao | 7:f31a4b4beb91 | 284 | |
Nikollao | 7:f31a4b4beb91 | 285 | if (level == 0) { |
Nikollao | 7:f31a4b4beb91 | 286 | |
Nikollao | 7:f31a4b4beb91 | 287 | enemyRect(); |
Nikollao | 7:f31a4b4beb91 | 288 | //enemyCircle(); |
Nikollao | 7:f31a4b4beb91 | 289 | } else if (level == 1) { |
Nikollao | 7:f31a4b4beb91 | 290 | |
Nikollao | 7:f31a4b4beb91 | 291 | enemyRect(); |
Nikollao | 7:f31a4b4beb91 | 292 | //enemyCircle(); |
Nikollao | 7:f31a4b4beb91 | 293 | } else if (level == 2) { |
Nikollao | 7:f31a4b4beb91 | 294 | |
Nikollao | 7:f31a4b4beb91 | 295 | } else if (level == 3) { |
Nikollao | 7:f31a4b4beb91 | 296 | |
Nikollao | 7:f31a4b4beb91 | 297 | } |
Nikollao | 7:f31a4b4beb91 | 298 | enemyCircle(); |
Nikollao | 7:f31a4b4beb91 | 299 | } |
Nikollao | 7:f31a4b4beb91 | 300 | |
Nikollao | 7:f31a4b4beb91 | 301 | void enemyRect() |
Nikollao | 7:f31a4b4beb91 | 302 | { |
Nikollao | 7:f31a4b4beb91 | 303 | ///generate rect shape enemy |
Nikollao | 7:f31a4b4beb91 | 304 | lcd.drawRect(rectX,rectY,5,4,1); |
Nikollao | 7:f31a4b4beb91 | 305 | rectX = rectX + rand()%4 - 2; |
Nikollao | 7:f31a4b4beb91 | 306 | rectY++; ///enemy moving towards hero |
Nikollao | 7:f31a4b4beb91 | 307 | } |
Nikollao | 7:f31a4b4beb91 | 308 | |
Nikollao | 7:f31a4b4beb91 | 309 | void hero() |
Nikollao | 7:f31a4b4beb91 | 310 | { |
Nikollao | 7:f31a4b4beb91 | 311 | ///cotrol hero |
Nikollao | 7:f31a4b4beb91 | 312 | |
Nikollao | 7:f31a4b4beb91 | 313 | if (xPot > 0.5) { |
Nikollao | 7:f31a4b4beb91 | 314 | heroX++; |
Nikollao | 7:f31a4b4beb91 | 315 | } else { |
Nikollao | 7:f31a4b4beb91 | 316 | heroX--; |
Nikollao | 7:f31a4b4beb91 | 317 | } |
Nikollao | 7:f31a4b4beb91 | 318 | |
Nikollao | 7:f31a4b4beb91 | 319 | if (yPot > 0.5) { |
Nikollao | 7:f31a4b4beb91 | 320 | heroY--; |
Nikollao | 7:f31a4b4beb91 | 321 | } else { |
Nikollao | 7:f31a4b4beb91 | 322 | heroY++; |
Nikollao | 7:f31a4b4beb91 | 323 | } |
Nikollao | 7:f31a4b4beb91 | 324 | ///set x-axis boundaries so hero does not go out of screen |
Nikollao | 7:f31a4b4beb91 | 325 | if (heroX > 35) { |
Nikollao | 7:f31a4b4beb91 | 326 | heroX = 35; |
Nikollao | 7:f31a4b4beb91 | 327 | } |
Nikollao | 7:f31a4b4beb91 | 328 | if (heroX < -40) { |
Nikollao | 7:f31a4b4beb91 | 329 | heroX = -40; |
Nikollao | 7:f31a4b4beb91 | 330 | } |
Nikollao | 7:f31a4b4beb91 | 331 | ///draw hero |
Nikollao | 7:f31a4b4beb91 | 332 | lcd.drawLine(40+heroX, 47+heroY, 48+heroX, 43+heroY,1); |
Nikollao | 7:f31a4b4beb91 | 333 | lcd.drawLine(40+heroX, 43+heroY,48+heroX, 47+heroY,1); |
Nikollao | 7:f31a4b4beb91 | 334 | lcd.drawLine(44+heroX, 45+heroY,44+heroX, 41+heroY,1); |
Nikollao | 7:f31a4b4beb91 | 335 | lcd.drawCircle(44+heroX, 39+heroY,2,0); |
Nikollao | 7:f31a4b4beb91 | 336 | } |
Nikollao | 7:f31a4b4beb91 | 337 | |
Nikollao | 7:f31a4b4beb91 | 338 | void enemyCircle() |
Nikollao | 7:f31a4b4beb91 | 339 | { |
Nikollao | 7:f31a4b4beb91 | 340 | ///generate circle shape enemy |
Nikollao | 7:f31a4b4beb91 | 341 | lcd.drawCircle(circleX,circleY,4,1); |
Nikollao | 7:f31a4b4beb91 | 342 | circleY = circleY + rand() %4 - 2; |
Nikollao | 7:f31a4b4beb91 | 343 | |
Nikollao | 7:f31a4b4beb91 | 344 | circleX++; ///enemy moving towards hero |
Nikollao | 7:f31a4b4beb91 | 345 | } |
Nikollao | 7:f31a4b4beb91 | 346 | |
Nikollao | 7:f31a4b4beb91 | 347 | void init_game() |
Nikollao | 7:f31a4b4beb91 | 348 | { |
Nikollao | 7:f31a4b4beb91 | 349 | ///initialise game |
Nikollao | 7:f31a4b4beb91 | 350 | //button.mode(PullNone); |
Nikollao | 7:f31a4b4beb91 | 351 | srand(time(NULL)); /// generate random numbers |
Nikollao | 7:f31a4b4beb91 | 352 | rectY = 0; /// init rectX, rectY |
Nikollao | 7:f31a4b4beb91 | 353 | rectX = rand() %40 + 20; |
Nikollao | 7:f31a4b4beb91 | 354 | circleY = rand() %20 + 10; /// init circleX, circleY |
Nikollao | 7:f31a4b4beb91 | 355 | circleX = 0; |
Nikollao | 7:f31a4b4beb91 | 356 | |
Nikollao | 7:f31a4b4beb91 | 357 | if ( play == 0) { ///if its first play print welcome message, otherwise don't |
Nikollao | 7:f31a4b4beb91 | 358 | |
Nikollao | 7:f31a4b4beb91 | 359 | lcd.setBrightness(0.5); // put LED backlight on 50% |
Nikollao | 7:f31a4b4beb91 | 360 | timeout.attach(&timeout_isr,2); |
Nikollao | 7:f31a4b4beb91 | 361 | lcd.printString("Welcome to",11,1); |
Nikollao | 7:f31a4b4beb91 | 362 | lcd.printString("Treasure Hunt!",1,3); |
Nikollao | 7:f31a4b4beb91 | 363 | lcd.refresh(); |
Nikollao | 7:f31a4b4beb91 | 364 | sleep(); |
Nikollao | 7:f31a4b4beb91 | 365 | lcd.clear(); |
Nikollao | 7:f31a4b4beb91 | 366 | } |
Nikollao | 7:f31a4b4beb91 | 367 | game_ticker.attach(game_timer_isr,0.2); |
Nikollao | 7:f31a4b4beb91 | 368 | |
Nikollao | 7:f31a4b4beb91 | 369 | while (1) { |
Nikollao | 7:f31a4b4beb91 | 370 | |
Nikollao | 7:f31a4b4beb91 | 371 | if (g_game_timer_flag) { |
Nikollao | 7:f31a4b4beb91 | 372 | |
Nikollao | 7:f31a4b4beb91 | 373 | g_game_timer_flag = 0; |
Nikollao | 7:f31a4b4beb91 | 374 | updateJoystick(); |
Nikollao | 7:f31a4b4beb91 | 375 | lcd.clear(); |
Nikollao | 7:f31a4b4beb91 | 376 | menu(); ///get Joystick's value to select option in menu |
Nikollao | 7:f31a4b4beb91 | 377 | //option = menu(); |
Nikollao | 7:f31a4b4beb91 | 378 | |
Nikollao | 7:f31a4b4beb91 | 379 | if (option == 0) { /// select Start Game |
Nikollao | 7:f31a4b4beb91 | 380 | |
Nikollao | 7:f31a4b4beb91 | 381 | lcd.printString("Start Game <",0,0); |
Nikollao | 7:f31a4b4beb91 | 382 | lcd.printString("Settings",0,2); |
Nikollao | 7:f31a4b4beb91 | 383 | lcd.printString("Exit",0,4); |
Nikollao | 7:f31a4b4beb91 | 384 | } else if (option == 1) { /// select Settings |
Nikollao | 7:f31a4b4beb91 | 385 | |
Nikollao | 7:f31a4b4beb91 | 386 | lcd.printString("Start Game",0,0); |
Nikollao | 7:f31a4b4beb91 | 387 | lcd.printString("Settings <",0,2); |
Nikollao | 7:f31a4b4beb91 | 388 | lcd.printString("Exit",0,4); |
Nikollao | 7:f31a4b4beb91 | 389 | } else { /// select Exit |
Nikollao | 7:f31a4b4beb91 | 390 | |
Nikollao | 7:f31a4b4beb91 | 391 | lcd.printString("Start Game",0,0); |
Nikollao | 7:f31a4b4beb91 | 392 | lcd.printString("Settings",0,2); |
Nikollao | 7:f31a4b4beb91 | 393 | lcd.printString("Exit <",0,4); |
Nikollao | 7:f31a4b4beb91 | 394 | } |
Nikollao | 7:f31a4b4beb91 | 395 | } |
Nikollao | 7:f31a4b4beb91 | 396 | if (g_button_flag) { |
Nikollao | 7:f31a4b4beb91 | 397 | |
Nikollao | 7:f31a4b4beb91 | 398 | g_button_flag = 0; |
Nikollao | 7:f31a4b4beb91 | 399 | |
Nikollao | 7:f31a4b4beb91 | 400 | if (option == 0) { |
Nikollao | 7:f31a4b4beb91 | 401 | |
Nikollao | 7:f31a4b4beb91 | 402 | game_ticker.detach(); |
Nikollao | 7:f31a4b4beb91 | 403 | break; |
Nikollao | 7:f31a4b4beb91 | 404 | } else if (option == 1) { |
Nikollao | 7:f31a4b4beb91 | 405 | |
Nikollao | 7:f31a4b4beb91 | 406 | //settings_menu(); |
Nikollao | 7:f31a4b4beb91 | 407 | pc.printf("Modify Settings!"); |
Nikollao | 7:f31a4b4beb91 | 408 | } else { |
Nikollao | 7:f31a4b4beb91 | 409 | |
Nikollao | 7:f31a4b4beb91 | 410 | lcd.turnOff(); |
Nikollao | 7:f31a4b4beb91 | 411 | deepsleep(); |
Nikollao | 7:f31a4b4beb91 | 412 | } |
Nikollao | 7:f31a4b4beb91 | 413 | } |
Nikollao | 7:f31a4b4beb91 | 414 | sleep(); |
Nikollao | 7:f31a4b4beb91 | 415 | } |
Nikollao | 7:f31a4b4beb91 | 416 | } |
Nikollao | 7:f31a4b4beb91 | 417 | void guidance() |
Nikollao | 7:f31a4b4beb91 | 418 | { |
Nikollao | 7:f31a4b4beb91 | 419 | /// show arrow to act as guidance towards the treasure |
Nikollao | 7:f31a4b4beb91 | 420 | if (level < 7) { ///check level of difficulty |
Nikollao | 7:f31a4b4beb91 | 421 | |
Nikollao | 7:f31a4b4beb91 | 422 | lcd.drawLine(42,0,42,4,1); |
Nikollao | 7:f31a4b4beb91 | 423 | lcd.drawLine(42,0,40,2,1); |
Nikollao | 7:f31a4b4beb91 | 424 | lcd.drawLine(42,0,44,2,1); |
Nikollao | 7:f31a4b4beb91 | 425 | } else if (level == 7) { |
Nikollao | 7:f31a4b4beb91 | 426 | |
Nikollao | 7:f31a4b4beb91 | 427 | lcd.printString("F",42,0); /// print the treasure icon |
Nikollao | 7:f31a4b4beb91 | 428 | } else if (level == 8) { |
Nikollao | 7:f31a4b4beb91 | 429 | |
Nikollao | 7:f31a4b4beb91 | 430 | ticker.detach(); |
Nikollao | 7:f31a4b4beb91 | 431 | lcd.clear(); |
Nikollao | 7:f31a4b4beb91 | 432 | lcd.printString("Well done!",0,0); |
Nikollao | 7:f31a4b4beb91 | 433 | lcd.refresh(); |
Nikollao | 7:f31a4b4beb91 | 434 | timeout.attach(&timeout_isr,2); |
Nikollao | 7:f31a4b4beb91 | 435 | sleep(); |
Nikollao | 7:f31a4b4beb91 | 436 | lcd.clear(); |
Nikollao | 7:f31a4b4beb91 | 437 | lcd.printString("Play again <",0,0); |
Nikollao | 7:f31a4b4beb91 | 438 | lcd.refresh(); |
Nikollao | 7:f31a4b4beb91 | 439 | sleep(); |
Nikollao | 7:f31a4b4beb91 | 440 | |
Nikollao | 7:f31a4b4beb91 | 441 | if (g_button_flag) { |
Nikollao | 7:f31a4b4beb91 | 442 | |
Nikollao | 7:f31a4b4beb91 | 443 | g_button_flag = 0; |
Nikollao | 7:f31a4b4beb91 | 444 | level = 0; |
Nikollao | 7:f31a4b4beb91 | 445 | play++; |
Nikollao | 7:f31a4b4beb91 | 446 | lcd.clear(); |
Nikollao | 7:f31a4b4beb91 | 447 | //main(); |
Nikollao | 7:f31a4b4beb91 | 448 | } |
Nikollao | 7:f31a4b4beb91 | 449 | } |
Nikollao | 7:f31a4b4beb91 | 450 | } |
Nikollao | 7:f31a4b4beb91 | 451 | |
Nikollao | 7:f31a4b4beb91 | 452 | void obstacles() |
Nikollao | 7:f31a4b4beb91 | 453 | { |
Nikollao | 7:f31a4b4beb91 | 454 | /// place obstacles in the screen |
Nikollao | 7:f31a4b4beb91 | 455 | /// as level difficulty increases, more obstacles are added |
Nikollao | 7:f31a4b4beb91 | 456 | if (level == 1) { |
Nikollao | 7:f31a4b4beb91 | 457 | |
Nikollao | 7:f31a4b4beb91 | 458 | lcd.drawRect(10,15,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 459 | lcd.drawRect(74,15,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 460 | } else if (level == 2) { |
Nikollao | 7:f31a4b4beb91 | 461 | |
Nikollao | 7:f31a4b4beb91 | 462 | lcd.drawRect(10,15,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 463 | lcd.drawRect(74,15,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 464 | lcd.drawRect(10,28,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 465 | lcd.drawRect(74,28,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 466 | } else if (level == 3) { |
Nikollao | 7:f31a4b4beb91 | 467 | |
Nikollao | 7:f31a4b4beb91 | 468 | lcd.drawRect(10,15,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 469 | lcd.drawRect(74,15,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 470 | lcd.drawRect(10,28,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 471 | lcd.drawRect(74,28,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 472 | lcd.drawRect(30,15,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 473 | lcd.drawRect(54,15,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 474 | lcd.drawRect(30,28,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 475 | lcd.drawRect(54,28,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 476 | } else if (level == 4) { |
Nikollao | 7:f31a4b4beb91 | 477 | |
Nikollao | 7:f31a4b4beb91 | 478 | lcd.drawRect(10 + rand() %4 - 2,15 + rand() &4 -2,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 479 | lcd.drawRect(74 + rand() %4 - 2,15 + rand() %4 - 2,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 480 | lcd.drawRect(10 + rand() %4 - 2,28 + rand() %4 - 2,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 481 | lcd.drawRect(74 + rand() %4 - 2,28 + rand() %4 - 2,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 482 | lcd.drawRect(30 + rand() %4 - 2,15,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 483 | lcd.drawRect(54,15 + rand() %4 - 2,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 484 | lcd.drawRect(30,28 + rand() %4 - 2,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 485 | lcd.drawRect(54 + rand() %4 - 2,28,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 486 | } else if ( level == 5) { |
Nikollao | 7:f31a4b4beb91 | 487 | |
Nikollao | 7:f31a4b4beb91 | 488 | bool state = 0; |
Nikollao | 7:f31a4b4beb91 | 489 | if (objectX == 71) { |
Nikollao | 7:f31a4b4beb91 | 490 | state = 1; |
Nikollao | 7:f31a4b4beb91 | 491 | } |
Nikollao | 7:f31a4b4beb91 | 492 | if (objectX == 15) { |
Nikollao | 7:f31a4b4beb91 | 493 | state = 0; |
Nikollao | 7:f31a4b4beb91 | 494 | } |
Nikollao | 7:f31a4b4beb91 | 495 | if (state == 0) { |
Nikollao | 7:f31a4b4beb91 | 496 | objectX++; |
Nikollao | 7:f31a4b4beb91 | 497 | } else if (state == 1) { |
Nikollao | 7:f31a4b4beb91 | 498 | objectX--; |
Nikollao | 7:f31a4b4beb91 | 499 | } |
Nikollao | 7:f31a4b4beb91 | 500 | |
Nikollao | 7:f31a4b4beb91 | 501 | objectY = objectY + rand() %4 - 2; |
Nikollao | 7:f31a4b4beb91 | 502 | ///keep moving object within boundaries |
Nikollao | 7:f31a4b4beb91 | 503 | if (objectY <= 10) { |
Nikollao | 7:f31a4b4beb91 | 504 | objectY = 10; |
Nikollao | 7:f31a4b4beb91 | 505 | } |
Nikollao | 7:f31a4b4beb91 | 506 | if (objectY >= 37) { |
Nikollao | 7:f31a4b4beb91 | 507 | objectY = 37; |
Nikollao | 7:f31a4b4beb91 | 508 | } |
Nikollao | 7:f31a4b4beb91 | 509 | |
Nikollao | 7:f31a4b4beb91 | 510 | lcd.drawLine(15,10,15,37,1); |
Nikollao | 7:f31a4b4beb91 | 511 | lcd.drawLine(71,10,71,37,1); |
Nikollao | 7:f31a4b4beb91 | 512 | lcd.drawRect(10+objectX,objectY,2,2,1); |
Nikollao | 7:f31a4b4beb91 | 513 | } else if (level == 6) { |
Nikollao | 7:f31a4b4beb91 | 514 | |
Nikollao | 7:f31a4b4beb91 | 515 | } else if (level == 7) { |
Nikollao | 7:f31a4b4beb91 | 516 | |
Nikollao | 7:f31a4b4beb91 | 517 | /* |
Nikollao | 7:f31a4b4beb91 | 518 | lcd.drawLine(50,15,30,15,1); |
Nikollao | 7:f31a4b4beb91 | 519 | lcd.drawLine(30,15,30,35,1); |
Nikollao | 7:f31a4b4beb91 | 520 | lcd.drawLine(30,25,45,25,1); |
Nikollao | 7:f31a4b4beb91 | 521 | */ |
Nikollao | 7:f31a4b4beb91 | 522 | } |
Nikollao | 7:f31a4b4beb91 | 523 | } |
Nikollao | 7:f31a4b4beb91 | 524 | |
Nikollao | 7:f31a4b4beb91 | 525 | |
Nikollao | 7:f31a4b4beb91 | 526 | void calibrateJoystick() |
Nikollao | 7:f31a4b4beb91 | 527 | { |
Nikollao | 7:f31a4b4beb91 | 528 | // must not move during calibration |
Nikollao | 7:f31a4b4beb91 | 529 | joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly) |
Nikollao | 7:f31a4b4beb91 | 530 | joystick.y0 = yPot; |
Nikollao | 7:f31a4b4beb91 | 531 | } |
Nikollao | 7:f31a4b4beb91 | 532 | void updateJoystick() |
Nikollao | 7:f31a4b4beb91 | 533 | { |
Nikollao | 7:f31a4b4beb91 | 534 | // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred) |
Nikollao | 7:f31a4b4beb91 | 535 | joystick.x = xPot - joystick.x0; |
Nikollao | 7:f31a4b4beb91 | 536 | joystick.y = yPot - joystick.y0; |
Nikollao | 7:f31a4b4beb91 | 537 | // read button state |
Nikollao | 7:f31a4b4beb91 | 538 | joystick.button = button; |
Nikollao | 7:f31a4b4beb91 | 539 | |
Nikollao | 7:f31a4b4beb91 | 540 | // calculate direction depending on x,y values |
Nikollao | 7:f31a4b4beb91 | 541 | // tolerance allows a little lee-way in case joystick not exactly in the stated direction |
Nikollao | 7:f31a4b4beb91 | 542 | if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
Nikollao | 7:f31a4b4beb91 | 543 | joystick.direction = CENTRE; |
Nikollao | 7:f31a4b4beb91 | 544 | } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
Nikollao | 7:f31a4b4beb91 | 545 | joystick.direction = UP; |
Nikollao | 7:f31a4b4beb91 | 546 | } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
Nikollao | 7:f31a4b4beb91 | 547 | joystick.direction = DOWN; |
Nikollao | 7:f31a4b4beb91 | 548 | } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { |
Nikollao | 7:f31a4b4beb91 | 549 | joystick.direction = RIGHT; |
Nikollao | 7:f31a4b4beb91 | 550 | } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { |
Nikollao | 7:f31a4b4beb91 | 551 | joystick.direction = LEFT; |
Nikollao | 7:f31a4b4beb91 | 552 | } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) { |
Nikollao | 7:f31a4b4beb91 | 553 | joystick.direction = UP_LEFT; |
Nikollao | 7:f31a4b4beb91 | 554 | } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) { |
Nikollao | 7:f31a4b4beb91 | 555 | joystick.direction = UP_RIGHT; |
Nikollao | 7:f31a4b4beb91 | 556 | } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) { |
Nikollao | 7:f31a4b4beb91 | 557 | joystick.direction = DOWN_LEFT; |
Nikollao | 7:f31a4b4beb91 | 558 | } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) { |
Nikollao | 7:f31a4b4beb91 | 559 | joystick.direction = DOWN_RIGHT; |
Nikollao | 7:f31a4b4beb91 | 560 | } |
Nikollao | 7:f31a4b4beb91 | 561 | } |
Nikollao | 7:f31a4b4beb91 | 562 | |
Nikollao | 7:f31a4b4beb91 | 563 | int menu() |
Nikollao | 7:f31a4b4beb91 | 564 | { |
Nikollao | 7:f31a4b4beb91 | 565 | |
Nikollao | 7:f31a4b4beb91 | 566 | if (joystick.y <= 0.33) { /// if Joystick moves up |
Nikollao | 7:f31a4b4beb91 | 567 | option = 0; /// the pointer moves upper in the menu display |
Nikollao | 7:f31a4b4beb91 | 568 | } else if (joystick.y <= 0.66) { /// if joystick moves down |
Nikollao | 7:f31a4b4beb91 | 569 | option = 1; /// else pointer moves down |
Nikollao | 7:f31a4b4beb91 | 570 | } else { |
Nikollao | 7:f31a4b4beb91 | 571 | option = 2; |
Nikollao | 7:f31a4b4beb91 | 572 | } |
Nikollao | 7:f31a4b4beb91 | 573 | return option; |
Nikollao | 7:f31a4b4beb91 | 574 | } |
Nikollao | 7:f31a4b4beb91 | 575 | |
Nikollao | 7:f31a4b4beb91 | 576 | int intersection(int i, int j) |
Nikollao | 7:f31a4b4beb91 | 577 | { |
Nikollao | 7:f31a4b4beb91 | 578 | /// check for overlap between enemies and hero |
Nikollao | 7:f31a4b4beb91 | 579 | n=0; |
Nikollao | 7:f31a4b4beb91 | 580 | |
Nikollao | 7:f31a4b4beb91 | 581 | if (lcd.getPixel(i-1,j-1)!=0) //pixel to the top-left |
Nikollao | 7:f31a4b4beb91 | 582 | n++; // increase n by 1 |
Nikollao | 7:f31a4b4beb91 | 583 | if (lcd.getPixel(i-1,j)!=0) //pixel to the left |
Nikollao | 7:f31a4b4beb91 | 584 | n++; // increase n by 1 |
Nikollao | 7:f31a4b4beb91 | 585 | if (lcd.getPixel(i-1,j+1)!=0) //pixel to the bottom-left |
Nikollao | 7:f31a4b4beb91 | 586 | n++; // increase n by 1 |
Nikollao | 7:f31a4b4beb91 | 587 | if (lcd.getPixel(i,j-1)!=0) // pixel to the top |
Nikollao | 7:f31a4b4beb91 | 588 | n++; // increase n by 1 |
Nikollao | 7:f31a4b4beb91 | 589 | if (lcd.getPixel(i,j+1)!=0) //pixel to the bottom |
Nikollao | 7:f31a4b4beb91 | 590 | n++; // increase n by 1 |
Nikollao | 7:f31a4b4beb91 | 591 | if (lcd.getPixel(i+1,j-1)!=0) //pixel to the top-right |
Nikollao | 7:f31a4b4beb91 | 592 | n++; // increase n by 1 |
Nikollao | 7:f31a4b4beb91 | 593 | if (lcd.getPixel(i+1,j)!=0) // pixel to the right |
Nikollao | 7:f31a4b4beb91 | 594 | n++; // increase n by 1 |
Nikollao | 7:f31a4b4beb91 | 595 | if (lcd.getPixel(i+1,j+1)!=0) //pixel to the bottom right |
Nikollao | 7:f31a4b4beb91 | 596 | n++; // increase n by 1 |
Nikollao | 7:f31a4b4beb91 | 597 | return n; |
Nikollao | 7:f31a4b4beb91 | 598 | } |
Nikollao | 7:f31a4b4beb91 | 599 | |
Nikollao | 7:f31a4b4beb91 | 600 | void checkOverlap() |
Nikollao | 7:f31a4b4beb91 | 601 | { |
Nikollao | 7:f31a4b4beb91 | 602 | |
Nikollao | 7:f31a4b4beb91 | 603 | for (int i=40+heroX; i<50+heroX; i++) { |
Nikollao | 7:f31a4b4beb91 | 604 | for (int j=35+heroY; j<48+heroY; j++) { |
Nikollao | 7:f31a4b4beb91 | 605 | |
Nikollao | 7:f31a4b4beb91 | 606 | int count = intersection(i,j); |
Nikollao | 7:f31a4b4beb91 | 607 | //lcd.setPixel(i,j); |
Nikollao | 7:f31a4b4beb91 | 608 | } |
Nikollao | 7:f31a4b4beb91 | 609 | } |
Nikollao | 7:f31a4b4beb91 | 610 | } |
Nikollao | 7:f31a4b4beb91 | 611 | |
Nikollao | 7:f31a4b4beb91 | 612 | void error() |
Nikollao | 7:f31a4b4beb91 | 613 | { |
Nikollao | 7:f31a4b4beb91 | 614 | /// display error message |
Nikollao | 7:f31a4b4beb91 | 615 | while (1) { |
Nikollao | 7:f31a4b4beb91 | 616 | |
Nikollao | 7:f31a4b4beb91 | 617 | lcd.printString("Error!",0,0); |
Nikollao | 7:f31a4b4beb91 | 618 | r_led = 0; |
Nikollao | 7:f31a4b4beb91 | 619 | wait(0.2); |
Nikollao | 7:f31a4b4beb91 | 620 | r_led = 1; |
Nikollao | 7:f31a4b4beb91 | 621 | wait(0.2); |
Nikollao | 7:f31a4b4beb91 | 622 | } |
Nikollao | 7:f31a4b4beb91 | 623 | } |
Nikollao | 7:f31a4b4beb91 | 624 | |
Nikollao | 7:f31a4b4beb91 | 625 | |
Nikollao | 5:ffa498d7071f | 626 | #endif |
Nikollao | 5:ffa498d7071f | 627 | |
Nikollao | 7:f31a4b4beb91 | 628 |