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@29:579e00b7f118, 2019-04-15 (annotated)
- Committer:
- Noximilien
- Date:
- Mon Apr 15 12:59:51 2019 +0000
- Revision:
- 29:579e00b7f118
- Parent:
- 28:35af3843de8f
- Child:
- 30:d454d0cb72bc
Added a lot of comments.
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 | 3:10918b0f7a7d | 19 | |
| Noximilien | 0:69abdc43ae39 | 20 | |
| Noximilien | 1:5aa2312d3e94 | 21 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
| Noximilien | 4:02c63aaa2df9 | 22 | |
| Noximilien | 1:5aa2312d3e94 | 23 | AnalogIn pot(PTB2); |
| Noximilien | 2:ec89189860e0 | 24 | AnalogIn x_dir(PTB11); |
| Noximilien | 2:ec89189860e0 | 25 | AnalogIn y_dir(PTB10); |
| Noximilien | 17:69a85c909566 | 26 | AnalogIn rand_y(PTB3); |
| Noximilien | 2:ec89189860e0 | 27 | |
| Noximilien | 4:02c63aaa2df9 | 28 | Menu menu; |
| Noximilien | 4:02c63aaa2df9 | 29 | Game game; |
| Noximilien | 24:0570cb4b92d7 | 30 | Tutorial tutorial; |
| Noximilien | 29:579e00b7f118 | 31 | Gamepad gamepad; |
| Noximilien | 4:02c63aaa2df9 | 32 | |
| Noximilien | 28:35af3843de8f | 33 | GameObject lineOne; |
| Noximilien | 28:35af3843de8f | 34 | GameObject lineOneStars; |
| Noximilien | 28:35af3843de8f | 35 | GameObject lineTwo; |
| Noximilien | 28:35af3843de8f | 36 | GameObject lineTwoShips; |
| Noximilien | 28:35af3843de8f | 37 | GameObject lineThree; |
| Noximilien | 20:557e84189a57 | 38 | |
| Noximilien | 29:579e00b7f118 | 39 | void setupIntroValues(); |
| Noximilien | 24:0570cb4b92d7 | 40 | void updateAndDrawIntroPartOne(); |
| Noximilien | 24:0570cb4b92d7 | 41 | void updateAndDrawIntroPartTwo(); |
| Noximilien | 24:0570cb4b92d7 | 42 | void introPartOneText(); |
| Noximilien | 1:5aa2312d3e94 | 43 | void intro(); |
| Noximilien | 2:ec89189860e0 | 44 | void pointer(int x, int y); |
| Noximilien | 2:ec89189860e0 | 45 | void pointer_position(int menu_number); |
| Noximilien | 3:10918b0f7a7d | 46 | void ship_movement(); |
| Noximilien | 29:579e00b7f118 | 47 | void menuSelection(); |
| Noximilien | 0:69abdc43ae39 | 48 | |
| Noximilien | 4:02c63aaa2df9 | 49 | ScreenOption current_screen = ScreenOption_Menu; |
| Noximilien | 4:02c63aaa2df9 | 50 | |
| Noximilien | 4:02c63aaa2df9 | 51 | void intro(); |
| Noximilien | 4:02c63aaa2df9 | 52 | |
| Noximilien | 1:5aa2312d3e94 | 53 | int main(){ |
| Noximilien | 1:5aa2312d3e94 | 54 | lcd.init(); |
| Noximilien | 4:02c63aaa2df9 | 55 | gamepad.init(); |
| Noximilien | 29:579e00b7f118 | 56 | //printf("Intro starts\n"); |
| Noximilien | 1:5aa2312d3e94 | 57 | intro(); |
| Noximilien | 17:69a85c909566 | 58 | srand(rand_y * 1000000); //Makeing the generated y position for the enemy to be trully random. |
| Noximilien | 1:5aa2312d3e94 | 59 | |
| Noximilien | 4:02c63aaa2df9 | 60 | while(1){ //Waiting for the option "start game" to be selected and for the button B to be pressed |
| Noximilien | 1:5aa2312d3e94 | 61 | lcd.clear(); |
| Noximilien | 29:579e00b7f118 | 62 | menuSelection(); |
| Noximilien | 1:5aa2312d3e94 | 63 | lcd.refresh(); |
| Noximilien | 14:e8de27c4d0d4 | 64 | wait_ms(1000/fps); |
| Noximilien | 1:5aa2312d3e94 | 65 | } |
| Noximilien | 1:5aa2312d3e94 | 66 | } |
| Noximilien | 1:5aa2312d3e94 | 67 | |
| Noximilien | 19:b78fa41d04a9 | 68 | void intro(){ |
| Noximilien | 29:579e00b7f118 | 69 | setupIntroValues(); |
| Noximilien | 29:579e00b7f118 | 70 | int start_game_text_counter = 0; |
| Noximilien | 29:579e00b7f118 | 71 | updateAndDrawIntroPartOne(); |
| Noximilien | 29:579e00b7f118 | 72 | updateAndDrawIntroPartTwo(); |
| Noximilien | 29:579e00b7f118 | 73 | wait(1); |
| Noximilien | 29:579e00b7f118 | 74 | //Stop just a few pixels above the bottom screen border. |
| Noximilien | 29:579e00b7f118 | 75 | while (!gamepad.check_event(gamepad.START_PRESSED)){ |
| Noximilien | 29:579e00b7f118 | 76 | lcd.clear(); |
| Noximilien | 29:579e00b7f118 | 77 | introPartOneText(); |
| Noximilien | 29:579e00b7f118 | 78 | if (start_game_text_counter >= 2){ |
| Noximilien | 29:579e00b7f118 | 79 | lcd.printString("Press START",10,5); |
| Noximilien | 29:579e00b7f118 | 80 | if (start_game_text_counter == 4){start_game_text_counter = 0;} |
| Noximilien | 29:579e00b7f118 | 81 | } |
| Noximilien | 29:579e00b7f118 | 82 | start_game_text_counter += 1; |
| Noximilien | 29:579e00b7f118 | 83 | lcd.refresh(); |
| Noximilien | 29:579e00b7f118 | 84 | } |
| Noximilien | 29:579e00b7f118 | 85 | } |
| Noximilien | 29:579e00b7f118 | 86 | |
| Noximilien | 29:579e00b7f118 | 87 | void setupIntroValues(){ |
| Noximilien | 28:35af3843de8f | 88 | lineOne.pos.x = -63; // The width of the sprite. |
| Noximilien | 28:35af3843de8f | 89 | lineOne.pos.y = 1; // This just will be an intro for the game.////////////////// |
| Noximilien | 28:35af3843de8f | 90 | lineOneStars.pos.x = screen_width; |
| Noximilien | 28:35af3843de8f | 91 | lineOneStars.pos.y = 1; |
| Noximilien | 19:b78fa41d04a9 | 92 | |
| Noximilien | 28:35af3843de8f | 93 | lineTwo.pos.y = 15; |
| Noximilien | 28:35af3843de8f | 94 | lineTwo.pos.x = screen_width; |
| Noximilien | 29:579e00b7f118 | 95 | lineTwoShips.pos.x = -46; // Starting position outside the screen limits, with the length of the sprite. |
| Noximilien | 29:579e00b7f118 | 96 | lineTwoShips.pos.y = 14; // the height of the "The last One" and a few pixels for gaps. |
| Noximilien | 20:557e84189a57 | 97 | |
| Noximilien | 28:35af3843de8f | 98 | lineThree.pos.x = 2; |
| Noximilien | 29:579e00b7f118 | 99 | lineThree.pos.y = screen_height; // Starting outside the screen limits on the botto - the screen's height + the sprite's height. |
| Noximilien | 24:0570cb4b92d7 | 100 | |
| Noximilien | 24:0570cb4b92d7 | 101 | |
| Noximilien | 29:579e00b7f118 | 102 | } |
| Noximilien | 24:0570cb4b92d7 | 103 | |
| Noximilien | 24:0570cb4b92d7 | 104 | void updateAndDrawIntroPartOne(){ |
| Noximilien | 23:240bc00ef25b | 105 | // the width of the line one + 2. |
| Noximilien | 20:557e84189a57 | 106 | for (int i = 0; i < 65; i++){ |
| Noximilien | 19:b78fa41d04a9 | 107 | lcd.clear(); |
| Noximilien | 28:35af3843de8f | 108 | lineOne.pos.x +=1; |
| Noximilien | 28:35af3843de8f | 109 | if (lineOneStars.pos.x > 70){ lineOneStars.pos.x -= 1; } |
| Noximilien | 20:557e84189a57 | 110 | // to stop moving at the position of its width. |
| Noximilien | 28:35af3843de8f | 111 | if (lineTwo.pos.x > screen_width - 30){ lineTwo.pos.x -=1; } |
| Noximilien | 29:579e00b7f118 | 112 | if (lineTwoShips.pos.x < 0){ lineTwoShips.pos.x += 1; } |
| Noximilien | 20:557e84189a57 | 113 | |
| Noximilien | 24:0570cb4b92d7 | 114 | introPartOneText(); |
| Noximilien | 20:557e84189a57 | 115 | |
| Noximilien | 19:b78fa41d04a9 | 116 | lcd.refresh(); |
| Noximilien | 20:557e84189a57 | 117 | wait(0.01); |
| Noximilien | 20:557e84189a57 | 118 | } |
| Noximilien | 24:0570cb4b92d7 | 119 | } |
| Noximilien | 24:0570cb4b92d7 | 120 | |
| Noximilien | 24:0570cb4b92d7 | 121 | void updateAndDrawIntroPartTwo(){ |
| Noximilien | 20:557e84189a57 | 122 | for (int i = 0; i < 19 + 3; i++){ |
| Noximilien | 20:557e84189a57 | 123 | lcd.clear(); |
| Noximilien | 28:35af3843de8f | 124 | lineThree.pos.y -= 1; |
| Noximilien | 24:0570cb4b92d7 | 125 | introPartOneText(); |
| Noximilien | 29:579e00b7f118 | 126 | drawSprite(lineThree.pos, intro_line_three_sprite); |
| Noximilien | 20:557e84189a57 | 127 | lcd.refresh(); |
| Noximilien | 20:557e84189a57 | 128 | wait(0.1); |
| Noximilien | 26:676874c42883 | 129 | } |
| Noximilien | 24:0570cb4b92d7 | 130 | } |
| Noximilien | 24:0570cb4b92d7 | 131 | /**@brief |
| Noximilien | 24:0570cb4b92d7 | 132 | * I have put the upper part of the intro into a separate function because it |
| Noximilien | 24:0570cb4b92d7 | 133 | * it is being called several times in this file |
| Noximilien | 24:0570cb4b92d7 | 134 | */ |
| Noximilien | 24:0570cb4b92d7 | 135 | void introPartOneText(){ |
| Noximilien | 29:579e00b7f118 | 136 | drawSprite(lineOne.pos, intro_line_one_sprite); |
| Noximilien | 29:579e00b7f118 | 137 | drawSprite(lineOneStars.pos, intro_line_one_stars_sprite); |
| Noximilien | 29:579e00b7f118 | 138 | drawSprite(lineTwo.pos, intro_line_two_sprite); |
| Noximilien | 29:579e00b7f118 | 139 | drawSprite(lineTwoShips.pos, intro_line_two_ships_sprite); |
| Noximilien | 29:579e00b7f118 | 140 | } |
| Noximilien | 29:579e00b7f118 | 141 | |
| Noximilien | 29:579e00b7f118 | 142 | void menuSelection(){ |
| Noximilien | 29:579e00b7f118 | 143 | if (current_screen == ScreenOption_Game) { |
| Noximilien | 29:579e00b7f118 | 144 | bool game_is_paused = game.updateAndDraw(); |
| Noximilien | 29:579e00b7f118 | 145 | if (game_is_paused) { |
| Noximilien | 29:579e00b7f118 | 146 | current_screen = ScreenOption_Menu; |
| Noximilien | 29:579e00b7f118 | 147 | } |
| Noximilien | 29:579e00b7f118 | 148 | } |
| Noximilien | 29:579e00b7f118 | 149 | if (current_screen == ScreenOption_Tutorial) { |
| Noximilien | 29:579e00b7f118 | 150 | bool back_to_menu = tutorial.updateAndWriteTutorial(); |
| Noximilien | 29:579e00b7f118 | 151 | |
| Noximilien | 29:579e00b7f118 | 152 | if (back_to_menu) { |
| Noximilien | 29:579e00b7f118 | 153 | current_screen = ScreenOption_Menu; |
| Noximilien | 29:579e00b7f118 | 154 | } |
| Noximilien | 29:579e00b7f118 | 155 | } |
| Noximilien | 29:579e00b7f118 | 156 | else if (current_screen == ScreenOption_Menu) { |
| Noximilien | 29:579e00b7f118 | 157 | bool wantsToChangeScreen = menu.updateAndDraw(); |
| Noximilien | 29:579e00b7f118 | 158 | if (wantsToChangeScreen) { |
| Noximilien | 29:579e00b7f118 | 159 | current_screen = menu.getCurrentScreenSelection(); |
| Noximilien | 29:579e00b7f118 | 160 | } |
| Noximilien | 29:579e00b7f118 | 161 | } |
| Noximilien | 4:02c63aaa2df9 | 162 | } |
