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
Fork of el17dg by
main/main.cpp@37:6a2bf4488022, 2019-05-06 (annotated)
- Committer:
- Noximilien
- Date:
- Mon May 06 22:35:51 2019 +0000
- Revision:
- 37:6a2bf4488022
- Parent:
- 36:207ec7db8648
- Child:
- 38:ef3968546d36
Have made finishing changes for comments and game. Have added a debug in main.h. Have separate the simplified sprite drawing into sprite.h.
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| Noximilien | 23:240bc00ef25b | 1 | /** | 
| Noximilien | 23:240bc00ef25b | 2 | ELEC2645 Embedded Systems Project | 
| Noximilien | 23:240bc00ef25b | 3 | School of Electronic & Electrical Engineering | 
| Noximilien | 23:240bc00ef25b | 4 | University of Leeds | 
| Noximilien | 23:240bc00ef25b | 5 | Name: Dmitrijs Griskovs | 
| Noximilien | 23:240bc00ef25b | 6 | Username: el17dg | 
| Noximilien | 23:240bc00ef25b | 7 | Student ID Number: 201160286 | 
| Noximilien | 23:240bc00ef25b | 8 | date: start - 25/02/2019 | 
| Noximilien | 0:69abdc43ae39 | 9 | */ | 
| Noximilien | 0:69abdc43ae39 | 10 | |
| Noximilien | 21:0eb394495b8a | 11 | #include "constants.h" | 
| Noximilien | 0:69abdc43ae39 | 12 | |
| Noximilien | 4:02c63aaa2df9 | 13 | #include "main.h" | 
| Noximilien | 3:10918b0f7a7d | 14 | #include "game.h" | 
| Noximilien | 4:02c63aaa2df9 | 15 | #include "menu.h" | 
| Noximilien | 19:b78fa41d04a9 | 16 | #include "models.h" | 
| Noximilien | 24:0570cb4b92d7 | 17 | #include "tutorial.h" | 
| Noximilien | 28:35af3843de8f | 18 | #include "gameobject.h" | 
| Noximilien | 30:d454d0cb72bc | 19 | #include "settings.h" | 
| Noximilien | 3:10918b0f7a7d | 20 | |
| Noximilien | 0:69abdc43ae39 | 21 | |
| Noximilien | 1:5aa2312d3e94 | 22 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); | 
| Noximilien | 4:02c63aaa2df9 | 23 | |
| Noximilien | 1:5aa2312d3e94 | 24 | AnalogIn pot(PTB2); | 
| Noximilien | 2:ec89189860e0 | 25 | AnalogIn x_dir(PTB11); | 
| Noximilien | 2:ec89189860e0 | 26 | AnalogIn y_dir(PTB10); | 
| Noximilien | 17:69a85c909566 | 27 | AnalogIn rand_y(PTB3); | 
| Noximilien | 2:ec89189860e0 | 28 | |
| Noximilien | 4:02c63aaa2df9 | 29 | Menu menu; | 
| Noximilien | 4:02c63aaa2df9 | 30 | Game game; | 
| Noximilien | 24:0570cb4b92d7 | 31 | Tutorial tutorial; | 
| Noximilien | 30:d454d0cb72bc | 32 | Settings settings; | 
| Noximilien | 29:579e00b7f118 | 33 | Gamepad gamepad; | 
| Noximilien | 4:02c63aaa2df9 | 34 | |
| Noximilien | 28:35af3843de8f | 35 | GameObject lineOne; | 
| Noximilien | 28:35af3843de8f | 36 | GameObject lineOneStars; | 
| Noximilien | 28:35af3843de8f | 37 | GameObject lineTwo; | 
| Noximilien | 28:35af3843de8f | 38 | GameObject lineTwoShips; | 
| Noximilien | 28:35af3843de8f | 39 | GameObject lineThree; | 
| Noximilien | 20:557e84189a57 | 40 | |
| Noximilien | 29:579e00b7f118 | 41 | void setupIntroValues(); | 
| Noximilien | 24:0570cb4b92d7 | 42 | void updateAndDrawIntroPartOne(); | 
| Noximilien | 24:0570cb4b92d7 | 43 | void updateAndDrawIntroPartTwo(); | 
| Noximilien | 32:5403bb974294 | 44 | void introMusic(int low_frequency_music_counter); | 
| Noximilien | 24:0570cb4b92d7 | 45 | void introPartOneText(); | 
| Noximilien | 1:5aa2312d3e94 | 46 | void intro(); | 
| Noximilien | 35:172db1608332 | 47 | void createdByIntro(); | 
| Noximilien | 35:172db1608332 | 48 | void noteToPlayer(); | 
| Noximilien | 29:579e00b7f118 | 49 | void menuSelection(); | 
| Noximilien | 0:69abdc43ae39 | 50 | |
| Noximilien | 4:02c63aaa2df9 | 51 | ScreenOption current_screen = ScreenOption_Menu; | 
| Noximilien | 4:02c63aaa2df9 | 52 | |
| Noximilien | 1:5aa2312d3e94 | 53 | int main(){ | 
| Noximilien | 1:5aa2312d3e94 | 54 | lcd.init(); | 
| Noximilien | 4:02c63aaa2df9 | 55 | gamepad.init(); | 
| Noximilien | 37:6a2bf4488022 | 56 | DG_PRINTF("Intro starts\n"); | 
| Noximilien | 1:5aa2312d3e94 | 57 | intro(); | 
| Noximilien | 35:172db1608332 | 58 | createdByIntro(); | 
| Noximilien | 35:172db1608332 | 59 | noteToPlayer(); | 
| Noximilien | 35:172db1608332 | 60 | //Makeing the generated y position for the enemy to be trully random. | 
| Noximilien | 35:172db1608332 | 61 | srand(rand_y * 1000000); | 
| Noximilien | 35:172db1608332 | 62 | while(1){ | 
| Noximilien | 1:5aa2312d3e94 | 63 | lcd.clear(); | 
| Noximilien | 29:579e00b7f118 | 64 | menuSelection(); | 
| Noximilien | 1:5aa2312d3e94 | 65 | lcd.refresh(); | 
| Noximilien | 14:e8de27c4d0d4 | 66 | wait_ms(1000/fps); | 
| Noximilien | 1:5aa2312d3e94 | 67 | } | 
| Noximilien | 1:5aa2312d3e94 | 68 | } | 
| Noximilien | 1:5aa2312d3e94 | 69 | |
| Noximilien | 19:b78fa41d04a9 | 70 | void intro(){ | 
| Noximilien | 32:5403bb974294 | 71 | int start_game_text_counter = 0; | 
| Noximilien | 29:579e00b7f118 | 72 | setupIntroValues(); | 
| Noximilien | 29:579e00b7f118 | 73 | updateAndDrawIntroPartOne(); | 
| Noximilien | 29:579e00b7f118 | 74 | updateAndDrawIntroPartTwo(); | 
| Noximilien | 29:579e00b7f118 | 75 | wait(1); | 
| Noximilien | 29:579e00b7f118 | 76 | //Stop just a few pixels above the bottom screen border. | 
| Noximilien | 29:579e00b7f118 | 77 | while (!gamepad.check_event(gamepad.START_PRESSED)){ | 
| Noximilien | 29:579e00b7f118 | 78 | lcd.clear(); | 
| Noximilien | 29:579e00b7f118 | 79 | introPartOneText(); | 
| Noximilien | 29:579e00b7f118 | 80 | if (start_game_text_counter >= 2){ | 
| Noximilien | 29:579e00b7f118 | 81 | lcd.printString("Press START",10,5); | 
| Noximilien | 34:754915ce9de5 | 82 | if (start_game_text_counter == 4){ | 
| Noximilien | 34:754915ce9de5 | 83 | start_game_text_counter = 0; | 
| Noximilien | 34:754915ce9de5 | 84 | } | 
| Noximilien | 29:579e00b7f118 | 85 | } | 
| Noximilien | 29:579e00b7f118 | 86 | start_game_text_counter += 1; | 
| Noximilien | 29:579e00b7f118 | 87 | lcd.refresh(); | 
| Noximilien | 29:579e00b7f118 | 88 | } | 
| Noximilien | 29:579e00b7f118 | 89 | } | 
| Noximilien | 29:579e00b7f118 | 90 | |
| Noximilien | 29:579e00b7f118 | 91 | void setupIntroValues(){ | 
| Noximilien | 28:35af3843de8f | 92 | lineOne.pos.x = -63; // The width of the sprite. | 
| Noximilien | 28:35af3843de8f | 93 | lineOne.pos.y = 1; // This just will be an intro for the game.////////////////// | 
| Noximilien | 28:35af3843de8f | 94 | lineOneStars.pos.x = screen_width; | 
| Noximilien | 28:35af3843de8f | 95 | lineOneStars.pos.y = 1; | 
| Noximilien | 19:b78fa41d04a9 | 96 | |
| Noximilien | 28:35af3843de8f | 97 | lineTwo.pos.y = 15; | 
| Noximilien | 28:35af3843de8f | 98 | lineTwo.pos.x = screen_width; | 
| Noximilien | 29:579e00b7f118 | 99 | lineTwoShips.pos.x = -46; // Starting position outside the screen limits, with the length of the sprite. | 
| Noximilien | 29:579e00b7f118 | 100 | lineTwoShips.pos.y = 14; // the height of the "The last One" and a few pixels for gaps. | 
| Noximilien | 20:557e84189a57 | 101 | |
| Noximilien | 28:35af3843de8f | 102 | lineThree.pos.x = 2; | 
| Noximilien | 29:579e00b7f118 | 103 | lineThree.pos.y = screen_height; // Starting outside the screen limits on the botto - the screen's height + the sprite's height. | 
| Noximilien | 29:579e00b7f118 | 104 | } | 
| Noximilien | 24:0570cb4b92d7 | 105 | |
| Noximilien | 24:0570cb4b92d7 | 106 | void updateAndDrawIntroPartOne(){ | 
| Noximilien | 23:240bc00ef25b | 107 | // the width of the line one + 2. | 
| Noximilien | 20:557e84189a57 | 108 | for (int i = 0; i < 65; i++){ | 
| Noximilien | 19:b78fa41d04a9 | 109 | lcd.clear(); | 
| Noximilien | 28:35af3843de8f | 110 | lineOne.pos.x +=1; | 
| Noximilien | 28:35af3843de8f | 111 | if (lineOneStars.pos.x > 70){ lineOneStars.pos.x -= 1; } | 
| Noximilien | 20:557e84189a57 | 112 | // to stop moving at the position of its width. | 
| Noximilien | 28:35af3843de8f | 113 | if (lineTwo.pos.x > screen_width - 30){ lineTwo.pos.x -=1; } | 
| Noximilien | 29:579e00b7f118 | 114 | if (lineTwoShips.pos.x < 0){ lineTwoShips.pos.x += 1; } | 
| Noximilien | 20:557e84189a57 | 115 | |
| Noximilien | 24:0570cb4b92d7 | 116 | introPartOneText(); | 
| Noximilien | 31:becb8f6bf7b7 | 117 | gamepad.tone(200,2); | 
| Noximilien | 20:557e84189a57 | 118 | |
| Noximilien | 19:b78fa41d04a9 | 119 | lcd.refresh(); | 
| Noximilien | 20:557e84189a57 | 120 | wait(0.01); | 
| Noximilien | 20:557e84189a57 | 121 | } | 
| Noximilien | 24:0570cb4b92d7 | 122 | } | 
| Noximilien | 24:0570cb4b92d7 | 123 | |
| Noximilien | 24:0570cb4b92d7 | 124 | void updateAndDrawIntroPartTwo(){ | 
| Noximilien | 32:5403bb974294 | 125 | int low_frequency_music_counter = 0; | 
| Noximilien | 20:557e84189a57 | 126 | for (int i = 0; i < 19 + 3; i++){ | 
| Noximilien | 20:557e84189a57 | 127 | lcd.clear(); | 
| Noximilien | 28:35af3843de8f | 128 | lineThree.pos.y -= 1; | 
| Noximilien | 24:0570cb4b92d7 | 129 | introPartOneText(); | 
| Noximilien | 29:579e00b7f118 | 130 | drawSprite(lineThree.pos, intro_line_three_sprite); | 
| Noximilien | 20:557e84189a57 | 131 | lcd.refresh(); | 
| Noximilien | 20:557e84189a57 | 132 | wait(0.1); | 
| Noximilien | 32:5403bb974294 | 133 | introMusic(low_frequency_music_counter); | 
| Noximilien | 32:5403bb974294 | 134 | low_frequency_music_counter++; | 
| Noximilien | 26:676874c42883 | 135 | } | 
| Noximilien | 24:0570cb4b92d7 | 136 | } | 
| Noximilien | 24:0570cb4b92d7 | 137 | /**@brief | 
| Noximilien | 24:0570cb4b92d7 | 138 | * I have put the upper part of the intro into a separate function because it | 
| Noximilien | 24:0570cb4b92d7 | 139 | * it is being called several times in this file | 
| Noximilien | 24:0570cb4b92d7 | 140 | */ | 
| Noximilien | 24:0570cb4b92d7 | 141 | void introPartOneText(){ | 
| Noximilien | 29:579e00b7f118 | 142 | drawSprite(lineOne.pos, intro_line_one_sprite); | 
| Noximilien | 29:579e00b7f118 | 143 | drawSprite(lineOneStars.pos, intro_line_one_stars_sprite); | 
| Noximilien | 29:579e00b7f118 | 144 | drawSprite(lineTwo.pos, intro_line_two_sprite); | 
| Noximilien | 29:579e00b7f118 | 145 | drawSprite(lineTwoShips.pos, intro_line_two_ships_sprite); | 
| Noximilien | 29:579e00b7f118 | 146 | } | 
| Noximilien | 29:579e00b7f118 | 147 | |
| Noximilien | 29:579e00b7f118 | 148 | void menuSelection(){ | 
| Noximilien | 29:579e00b7f118 | 149 | if (current_screen == ScreenOption_Game) { | 
| Noximilien | 29:579e00b7f118 | 150 | bool game_is_paused = game.updateAndDraw(); | 
| Noximilien | 32:5403bb974294 | 151 | if (game_is_paused) { current_screen = ScreenOption_Menu;} | 
| Noximilien | 29:579e00b7f118 | 152 | |
| Noximilien | 32:5403bb974294 | 153 | } if (current_screen == ScreenOption_Tutorial) { | 
| Noximilien | 32:5403bb974294 | 154 | bool back_to_menu = tutorial.updateAndWriteTutorial(); | 
| Noximilien | 29:579e00b7f118 | 155 | if (back_to_menu) { | 
| Noximilien | 29:579e00b7f118 | 156 | current_screen = ScreenOption_Menu; | 
| Noximilien | 29:579e00b7f118 | 157 | } | 
| Noximilien | 32:5403bb974294 | 158 | } if (current_screen == ScreenOption_Settings) { | 
| Noximilien | 30:d454d0cb72bc | 159 | bool back_to_menu = settings.updateAndWriteSettings(); | 
| Noximilien | 30:d454d0cb72bc | 160 | if (back_to_menu) { | 
| Noximilien | 30:d454d0cb72bc | 161 | current_screen = ScreenOption_Menu; | 
| Noximilien | 30:d454d0cb72bc | 162 | } | 
| Noximilien | 32:5403bb974294 | 163 | } else if (current_screen == ScreenOption_Menu) { | 
| Noximilien | 29:579e00b7f118 | 164 | bool wantsToChangeScreen = menu.updateAndDraw(); | 
| Noximilien | 29:579e00b7f118 | 165 | if (wantsToChangeScreen) { | 
| Noximilien | 29:579e00b7f118 | 166 | current_screen = menu.getCurrentScreenSelection(); | 
| Noximilien | 29:579e00b7f118 | 167 | } | 
| Noximilien | 29:579e00b7f118 | 168 | } | 
| Noximilien | 30:d454d0cb72bc | 169 | } | 
| Noximilien | 30:d454d0cb72bc | 170 | |
| Noximilien | 32:5403bb974294 | 171 | void introMusic(int low_frequency_music_counter){ | 
| Noximilien | 31:becb8f6bf7b7 | 172 | if (low_frequency_music_counter == 0){ gamepad.tone(90,2);} | 
| Noximilien | 31:becb8f6bf7b7 | 173 | else if (low_frequency_music_counter == 2){gamepad.tone(60,2);} | 
| Noximilien | 31:becb8f6bf7b7 | 174 | else if (low_frequency_music_counter == 4){gamepad.tone(190,2);} | 
| Noximilien | 31:becb8f6bf7b7 | 175 | else if (low_frequency_music_counter == 6){gamepad.tone(60,2);} | 
| Noximilien | 31:becb8f6bf7b7 | 176 | else if (low_frequency_music_counter == 8){gamepad.tone(90,2);} | 
| Noximilien | 31:becb8f6bf7b7 | 177 | else if (low_frequency_music_counter == 10){gamepad.tone(160,2);} | 
| Noximilien | 31:becb8f6bf7b7 | 178 | else if (low_frequency_music_counter== 12){ | 
| Noximilien | 30:d454d0cb72bc | 179 | gamepad.tone(90,1); | 
| Noximilien | 30:d454d0cb72bc | 180 | low_frequency_music_counter = 0; | 
| Noximilien | 30:d454d0cb72bc | 181 | } | 
| Noximilien | 35:172db1608332 | 182 | } | 
| Noximilien | 35:172db1608332 | 183 | void createdByIntro(){ | 
| Noximilien | 35:172db1608332 | 184 | lcd.clear(); | 
| Noximilien | 35:172db1608332 | 185 | lcd.printString("Created and",0,0); | 
| Noximilien | 35:172db1608332 | 186 | lcd.printString("Developed by",0,1); | 
| Noximilien | 35:172db1608332 | 187 | lcd.printString("D Griskovs",10,3); | 
| Noximilien | 35:172db1608332 | 188 | lcd.printString("el17dg",20,4); | 
| Noximilien | 35:172db1608332 | 189 | lcd.printString("201160286",12,5); | 
| Noximilien | 35:172db1608332 | 190 | lcd.refresh(); | 
| Noximilien | 35:172db1608332 | 191 | wait(2); | 
| Noximilien | 35:172db1608332 | 192 | } | 
| Noximilien | 35:172db1608332 | 193 | |
| Noximilien | 35:172db1608332 | 194 | void noteToPlayer(){ | 
| Noximilien | 35:172db1608332 | 195 | lcd.clear(); | 
| Noximilien | 35:172db1608332 | 196 | lcd.printString("Please Read",0,0); | 
| Noximilien | 35:172db1608332 | 197 | lcd.printString("The TUTORIAL",10,2); | 
| Noximilien | 35:172db1608332 | 198 | lcd.printString("First!",30,4); | 
| Noximilien | 35:172db1608332 | 199 | lcd.refresh(); | 
| Noximilien | 35:172db1608332 | 200 | wait(3); | 
| Noximilien | 31:becb8f6bf7b7 | 201 | } | 
