Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed Gamepad N5110 mbed-rtos
main.cpp@0:99fa5a619081, 2019-04-13 (annotated)
- Committer:
- RexRoshan
- Date:
- Sat Apr 13 01:13:53 2019 +0000
- Revision:
- 0:99fa5a619081
- Child:
- 1:45493d1d0689
Mission 1 & 2 works perfectly
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RexRoshan | 0:99fa5a619081 | 1 | #include "mbed.h" |
RexRoshan | 0:99fa5a619081 | 2 | #include "N5110.h" |
RexRoshan | 0:99fa5a619081 | 3 | #include "Gamepad.h" |
RexRoshan | 0:99fa5a619081 | 4 | #include "Instruction.h" |
RexRoshan | 0:99fa5a619081 | 5 | #include "Spacecraft.h" |
RexRoshan | 0:99fa5a619081 | 6 | #include "GameEngine.h" |
RexRoshan | 0:99fa5a619081 | 7 | #include "Solar.h" |
RexRoshan | 0:99fa5a619081 | 8 | #include "Music.h" |
RexRoshan | 0:99fa5a619081 | 9 | #include "rtos.h" |
RexRoshan | 0:99fa5a619081 | 10 | |
RexRoshan | 0:99fa5a619081 | 11 | struct UserInput { |
RexRoshan | 0:99fa5a619081 | 12 | Direction d; |
RexRoshan | 0:99fa5a619081 | 13 | float mag; |
RexRoshan | 0:99fa5a619081 | 14 | }; |
RexRoshan | 0:99fa5a619081 | 15 | |
RexRoshan | 0:99fa5a619081 | 16 | enum MissionState { Mission1,Mission1Pass,Mission1Fail,Mission2,Mission2Pass,Mission2Fail }; |
RexRoshan | 0:99fa5a619081 | 17 | |
RexRoshan | 0:99fa5a619081 | 18 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); // K64F - pwr from 3V3 |
RexRoshan | 0:99fa5a619081 | 19 | Gamepad pad; |
RexRoshan | 0:99fa5a619081 | 20 | Music play; |
RexRoshan | 0:99fa5a619081 | 21 | Instruction draw; |
RexRoshan | 0:99fa5a619081 | 22 | Thread thread; |
RexRoshan | 0:99fa5a619081 | 23 | Spacecraft game; |
RexRoshan | 0:99fa5a619081 | 24 | GameEngine shoot; |
RexRoshan | 0:99fa5a619081 | 25 | |
RexRoshan | 0:99fa5a619081 | 26 | void init(); |
RexRoshan | 0:99fa5a619081 | 27 | void welcome(); |
RexRoshan | 0:99fa5a619081 | 28 | void render(); |
RexRoshan | 0:99fa5a619081 | 29 | void render2(); |
RexRoshan | 0:99fa5a619081 | 30 | void intro(); |
RexRoshan | 0:99fa5a619081 | 31 | void instruction(); |
RexRoshan | 0:99fa5a619081 | 32 | //void games(); |
RexRoshan | 0:99fa5a619081 | 33 | |
RexRoshan | 0:99fa5a619081 | 34 | |
RexRoshan | 0:99fa5a619081 | 35 | int main() |
RexRoshan | 0:99fa5a619081 | 36 | { |
RexRoshan | 0:99fa5a619081 | 37 | // first need to initialise display |
RexRoshan | 0:99fa5a619081 | 38 | int fps = 8; |
RexRoshan | 0:99fa5a619081 | 39 | lcd.setContrast(0.4); |
RexRoshan | 0:99fa5a619081 | 40 | // It will return 0 by default and a 1 when pressed i.e. cause a rising edge |
RexRoshan | 0:99fa5a619081 | 41 | init(); |
RexRoshan | 0:99fa5a619081 | 42 | // 0.4 appears to be a good starting point |
RexRoshan | 0:99fa5a619081 | 43 | thread.start(welcome); |
RexRoshan | 0:99fa5a619081 | 44 | // intro(); |
RexRoshan | 0:99fa5a619081 | 45 | thread.terminate(); |
RexRoshan | 0:99fa5a619081 | 46 | instruction(); |
RexRoshan | 0:99fa5a619081 | 47 | render(); |
RexRoshan | 0:99fa5a619081 | 48 | wait(1.0f/fps); |
RexRoshan | 0:99fa5a619081 | 49 | MissionState currentState = Mission1; |
RexRoshan | 0:99fa5a619081 | 50 | |
RexRoshan | 0:99fa5a619081 | 51 | while((currentState != Mission2Pass) && (pad.check_event(Gamepad::A_PRESSED) == false)) { |
RexRoshan | 0:99fa5a619081 | 52 | |
RexRoshan | 0:99fa5a619081 | 53 | switch(currentState){ |
RexRoshan | 0:99fa5a619081 | 54 | case Mission1: |
RexRoshan | 0:99fa5a619081 | 55 | shoot.read_input(pad); |
RexRoshan | 0:99fa5a619081 | 56 | shoot.update(pad,lcd); |
RexRoshan | 0:99fa5a619081 | 57 | render(); |
RexRoshan | 0:99fa5a619081 | 58 | wait(1.0f/fps); |
RexRoshan | 0:99fa5a619081 | 59 | if(shoot.get_game_stage() == 1){ |
RexRoshan | 0:99fa5a619081 | 60 | currentState = Mission1Fail; |
RexRoshan | 0:99fa5a619081 | 61 | break; |
RexRoshan | 0:99fa5a619081 | 62 | } |
RexRoshan | 0:99fa5a619081 | 63 | else if(shoot.get_game_stage() == 2){ |
RexRoshan | 0:99fa5a619081 | 64 | currentState = Mission1Pass; |
RexRoshan | 0:99fa5a619081 | 65 | break; |
RexRoshan | 0:99fa5a619081 | 66 | } else { |
RexRoshan | 0:99fa5a619081 | 67 | currentState = Mission1; |
RexRoshan | 0:99fa5a619081 | 68 | } |
RexRoshan | 0:99fa5a619081 | 69 | break; |
RexRoshan | 0:99fa5a619081 | 70 | case Mission1Fail: |
RexRoshan | 0:99fa5a619081 | 71 | lcd.clear(); |
RexRoshan | 0:99fa5a619081 | 72 | lcd.drawSprite(6,5,42,73,(int *)mission_one_failure); |
RexRoshan | 0:99fa5a619081 | 73 | lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 74 | if (pad.check_event(Gamepad::B_PRESSED) == true){ |
RexRoshan | 0:99fa5a619081 | 75 | currentState = Mission1; |
RexRoshan | 0:99fa5a619081 | 76 | shoot.restart_game_stage(); |
RexRoshan | 0:99fa5a619081 | 77 | init(); |
RexRoshan | 0:99fa5a619081 | 78 | } |
RexRoshan | 0:99fa5a619081 | 79 | break; |
RexRoshan | 0:99fa5a619081 | 80 | case Mission1Pass: |
RexRoshan | 0:99fa5a619081 | 81 | lcd.clear(); |
RexRoshan | 0:99fa5a619081 | 82 | lcd.drawSprite(0,0,48,84,(int *)mission_one); |
RexRoshan | 0:99fa5a619081 | 83 | lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 84 | if (pad.check_event(Gamepad::A_PRESSED) == true){ |
RexRoshan | 0:99fa5a619081 | 85 | currentState = Mission2; |
RexRoshan | 0:99fa5a619081 | 86 | shoot.restart_game_stage(); |
RexRoshan | 0:99fa5a619081 | 87 | } |
RexRoshan | 0:99fa5a619081 | 88 | break; |
RexRoshan | 0:99fa5a619081 | 89 | case Mission2: |
RexRoshan | 0:99fa5a619081 | 90 | shoot.read_input(pad); |
RexRoshan | 0:99fa5a619081 | 91 | shoot.update2(pad,lcd); |
RexRoshan | 0:99fa5a619081 | 92 | render2(); |
RexRoshan | 0:99fa5a619081 | 93 | wait(1.0f/fps); |
RexRoshan | 0:99fa5a619081 | 94 | if(shoot.get_game_stage() == 3 ){ |
RexRoshan | 0:99fa5a619081 | 95 | currentState = Mission2Fail; |
RexRoshan | 0:99fa5a619081 | 96 | } |
RexRoshan | 0:99fa5a619081 | 97 | if(shoot.get_game_stage() == 4){ |
RexRoshan | 0:99fa5a619081 | 98 | currentState = Mission2Pass; |
RexRoshan | 0:99fa5a619081 | 99 | } |
RexRoshan | 0:99fa5a619081 | 100 | break; |
RexRoshan | 0:99fa5a619081 | 101 | case Mission2Fail: |
RexRoshan | 0:99fa5a619081 | 102 | lcd.clear(); |
RexRoshan | 0:99fa5a619081 | 103 | lcd.drawSprite(6,5,42,73,(int *)mission_two_failure); |
RexRoshan | 0:99fa5a619081 | 104 | lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 105 | if (pad.check_event(Gamepad::B_PRESSED) == true){ |
RexRoshan | 0:99fa5a619081 | 106 | currentState = Mission1; |
RexRoshan | 0:99fa5a619081 | 107 | shoot.restart_game_stage(); |
RexRoshan | 0:99fa5a619081 | 108 | init(); |
RexRoshan | 0:99fa5a619081 | 109 | } |
RexRoshan | 0:99fa5a619081 | 110 | break; |
RexRoshan | 0:99fa5a619081 | 111 | case Mission2Pass: |
RexRoshan | 0:99fa5a619081 | 112 | lcd.clear(); |
RexRoshan | 0:99fa5a619081 | 113 | lcd.drawSprite(0,0,48,84,(int *)mission_two); |
RexRoshan | 0:99fa5a619081 | 114 | lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 115 | break; |
RexRoshan | 0:99fa5a619081 | 116 | // case Mission3: |
RexRoshan | 0:99fa5a619081 | 117 | // shoot.read_input(pad); |
RexRoshan | 0:99fa5a619081 | 118 | // shoot.update3(pad,lcd); |
RexRoshan | 0:99fa5a619081 | 119 | // render3(); |
RexRoshan | 0:99fa5a619081 | 120 | // if(_stage_three == false ){ |
RexRoshan | 0:99fa5a619081 | 121 | // currentState = Mission3Fail; |
RexRoshan | 0:99fa5a619081 | 122 | // } |
RexRoshan | 0:99fa5a619081 | 123 | // if(_stage_four == true){ |
RexRoshan | 0:99fa5a619081 | 124 | // currentState = Mission3Pass; |
RexRoshan | 0:99fa5a619081 | 125 | // } |
RexRoshan | 0:99fa5a619081 | 126 | // break; |
RexRoshan | 0:99fa5a619081 | 127 | // case Mission3Fail: |
RexRoshan | 0:99fa5a619081 | 128 | // lcd.clear(); |
RexRoshan | 0:99fa5a619081 | 129 | // lcd.drawSprite(6,5,42,73,(int *)mission_three_failure); |
RexRoshan | 0:99fa5a619081 | 130 | // lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 131 | // if (pad.check_event(Gamepad::B_PRESSED) == true){ |
RexRoshan | 0:99fa5a619081 | 132 | // currentState = Mission1; |
RexRoshan | 0:99fa5a619081 | 133 | // } |
RexRoshan | 0:99fa5a619081 | 134 | // break; |
RexRoshan | 0:99fa5a619081 | 135 | // case Mission3Pass: |
RexRoshan | 0:99fa5a619081 | 136 | // lcd.clear(); |
RexRoshan | 0:99fa5a619081 | 137 | // lcd.drawSprite(0,0,48,84,(int *)mission_three); |
RexRoshan | 0:99fa5a619081 | 138 | // lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 139 | // break; |
RexRoshan | 0:99fa5a619081 | 140 | } |
RexRoshan | 0:99fa5a619081 | 141 | } |
RexRoshan | 0:99fa5a619081 | 142 | } |
RexRoshan | 0:99fa5a619081 | 143 | |
RexRoshan | 0:99fa5a619081 | 144 | |
RexRoshan | 0:99fa5a619081 | 145 | void init(){ |
RexRoshan | 0:99fa5a619081 | 146 | // need to initialise LCD and Gamepad |
RexRoshan | 0:99fa5a619081 | 147 | lcd.init(); |
RexRoshan | 0:99fa5a619081 | 148 | pad.init(); |
RexRoshan | 0:99fa5a619081 | 149 | shoot.init(WIDTH/12,HEIGHT/2-5,12,4,12,10,3,2,4); |
RexRoshan | 0:99fa5a619081 | 150 | |
RexRoshan | 0:99fa5a619081 | 151 | } |
RexRoshan | 0:99fa5a619081 | 152 | |
RexRoshan | 0:99fa5a619081 | 153 | void render() |
RexRoshan | 0:99fa5a619081 | 154 | { |
RexRoshan | 0:99fa5a619081 | 155 | // clear screen, re-draw and refresh |
RexRoshan | 0:99fa5a619081 | 156 | lcd.clear(); |
RexRoshan | 0:99fa5a619081 | 157 | shoot.draw(pad,lcd); |
RexRoshan | 0:99fa5a619081 | 158 | lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 159 | } |
RexRoshan | 0:99fa5a619081 | 160 | |
RexRoshan | 0:99fa5a619081 | 161 | void render2() |
RexRoshan | 0:99fa5a619081 | 162 | { |
RexRoshan | 0:99fa5a619081 | 163 | // clear screen, re-draw and refresh |
RexRoshan | 0:99fa5a619081 | 164 | lcd.clear(); |
RexRoshan | 0:99fa5a619081 | 165 | shoot.draw2(pad,lcd); |
RexRoshan | 0:99fa5a619081 | 166 | lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 167 | } |
RexRoshan | 0:99fa5a619081 | 168 | |
RexRoshan | 0:99fa5a619081 | 169 | void welcome() { |
RexRoshan | 0:99fa5a619081 | 170 | |
RexRoshan | 0:99fa5a619081 | 171 | lcd.drawSprite(6,0,48,71,(int *)screen); |
RexRoshan | 0:99fa5a619081 | 172 | |
RexRoshan | 0:99fa5a619081 | 173 | lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 174 | |
RexRoshan | 0:99fa5a619081 | 175 | while ( pad.check_event(Gamepad::START_PRESSED) == false) { |
RexRoshan | 0:99fa5a619081 | 176 | if(pad.check_event(Gamepad::START_PRESSED) == true){break;} |
RexRoshan | 0:99fa5a619081 | 177 | pad.leds_on(); |
RexRoshan | 0:99fa5a619081 | 178 | lcd.drawSprite(21,43,5,40,(int *)start); |
RexRoshan | 0:99fa5a619081 | 179 | lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 180 | Thread::wait(800); |
RexRoshan | 0:99fa5a619081 | 181 | if(pad.check_event(Gamepad::START_PRESSED) == true){break;} |
RexRoshan | 0:99fa5a619081 | 182 | pad.leds_off(); |
RexRoshan | 0:99fa5a619081 | 183 | lcd.drawSprite(21,43,5,40,(int *)start2); |
RexRoshan | 0:99fa5a619081 | 184 | lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 185 | Thread::wait(800); |
RexRoshan | 0:99fa5a619081 | 186 | if(pad.check_event(Gamepad::START_PRESSED) == true){break;} |
RexRoshan | 0:99fa5a619081 | 187 | |
RexRoshan | 0:99fa5a619081 | 188 | } |
RexRoshan | 0:99fa5a619081 | 189 | pad.leds_off(); |
RexRoshan | 0:99fa5a619081 | 190 | } |
RexRoshan | 0:99fa5a619081 | 191 | |
RexRoshan | 0:99fa5a619081 | 192 | void intro() { |
RexRoshan | 0:99fa5a619081 | 193 | play.intro_song(pad); |
RexRoshan | 0:99fa5a619081 | 194 | } |
RexRoshan | 0:99fa5a619081 | 195 | |
RexRoshan | 0:99fa5a619081 | 196 | void instruction(){ |
RexRoshan | 0:99fa5a619081 | 197 | |
RexRoshan | 0:99fa5a619081 | 198 | pad.leds_off(); |
RexRoshan | 0:99fa5a619081 | 199 | draw.instruction(lcd,pad); |
RexRoshan | 0:99fa5a619081 | 200 | draw.instruction2(lcd,pad); |
RexRoshan | 0:99fa5a619081 | 201 | draw.instruction3(lcd,pad); |
RexRoshan | 0:99fa5a619081 | 202 | draw.instruction4(lcd,pad); |
RexRoshan | 0:99fa5a619081 | 203 | draw.instruction5(lcd,pad); |
RexRoshan | 0:99fa5a619081 | 204 | draw.instruction6(lcd,pad); |
RexRoshan | 0:99fa5a619081 | 205 | draw.instruction7(lcd,pad); |
RexRoshan | 0:99fa5a619081 | 206 | |
RexRoshan | 0:99fa5a619081 | 207 | } |
RexRoshan | 0:99fa5a619081 | 208 | |
RexRoshan | 0:99fa5a619081 | 209 | //void games(){ |
RexRoshan | 0:99fa5a619081 | 210 | // lcd.clear(); |
RexRoshan | 0:99fa5a619081 | 211 | // game.background(lcd); |
RexRoshan | 0:99fa5a619081 | 212 | // game.character(lcd); |
RexRoshan | 0:99fa5a619081 | 213 | // game.enemy(lcd); |
RexRoshan | 0:99fa5a619081 | 214 | // game.move_update(pad.get_direction(), pad.get_mag()); |
RexRoshan | 0:99fa5a619081 | 215 | // lcd.refresh(); |
RexRoshan | 0:99fa5a619081 | 216 | //} |
RexRoshan | 0:99fa5a619081 | 217 |