ELEC2645 (2018/19) / Mbed 2 deprecated el17dg

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

Committer:
Noximilien
Date:
Thu May 02 13:35:22 2019 +0000
Revision:
36:207ec7db8648
Parent:
35:172db1608332
Child:
37:6a2bf4488022
Have added boss explosion animation. have added debug sections. Have cleaned a code a bit. positioned some functions from public to private.

Who changed what in which revision?

UserRevisionLine numberNew 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 36:207ec7db8648 56 #ifdef DEBUGel17dg
Noximilien 36:207ec7db8648 57 printf("Intro starts\n");
Noximilien 36:207ec7db8648 58 #endif
Noximilien 1:5aa2312d3e94 59 intro();
Noximilien 35:172db1608332 60 createdByIntro();
Noximilien 35:172db1608332 61 noteToPlayer();
Noximilien 35:172db1608332 62 //Makeing the generated y position for the enemy to be trully random.
Noximilien 35:172db1608332 63 srand(rand_y * 1000000);
Noximilien 35:172db1608332 64 while(1){
Noximilien 1:5aa2312d3e94 65 lcd.clear();
Noximilien 29:579e00b7f118 66 menuSelection();
Noximilien 1:5aa2312d3e94 67 lcd.refresh();
Noximilien 14:e8de27c4d0d4 68 wait_ms(1000/fps);
Noximilien 1:5aa2312d3e94 69 }
Noximilien 1:5aa2312d3e94 70 }
Noximilien 1:5aa2312d3e94 71
Noximilien 19:b78fa41d04a9 72 void intro(){
Noximilien 32:5403bb974294 73 int start_game_text_counter = 0;
Noximilien 29:579e00b7f118 74 setupIntroValues();
Noximilien 29:579e00b7f118 75 updateAndDrawIntroPartOne();
Noximilien 29:579e00b7f118 76 updateAndDrawIntroPartTwo();
Noximilien 29:579e00b7f118 77 wait(1);
Noximilien 29:579e00b7f118 78 //Stop just a few pixels above the bottom screen border.
Noximilien 29:579e00b7f118 79 while (!gamepad.check_event(gamepad.START_PRESSED)){
Noximilien 29:579e00b7f118 80 lcd.clear();
Noximilien 29:579e00b7f118 81 introPartOneText();
Noximilien 29:579e00b7f118 82 if (start_game_text_counter >= 2){
Noximilien 29:579e00b7f118 83 lcd.printString("Press START",10,5);
Noximilien 34:754915ce9de5 84 if (start_game_text_counter == 4){
Noximilien 34:754915ce9de5 85 start_game_text_counter = 0;
Noximilien 34:754915ce9de5 86 }
Noximilien 29:579e00b7f118 87 }
Noximilien 29:579e00b7f118 88 start_game_text_counter += 1;
Noximilien 29:579e00b7f118 89 lcd.refresh();
Noximilien 29:579e00b7f118 90 }
Noximilien 29:579e00b7f118 91 }
Noximilien 29:579e00b7f118 92
Noximilien 29:579e00b7f118 93 void setupIntroValues(){
Noximilien 28:35af3843de8f 94 lineOne.pos.x = -63; // The width of the sprite.
Noximilien 28:35af3843de8f 95 lineOne.pos.y = 1; // This just will be an intro for the game.//////////////////
Noximilien 28:35af3843de8f 96 lineOneStars.pos.x = screen_width;
Noximilien 28:35af3843de8f 97 lineOneStars.pos.y = 1;
Noximilien 19:b78fa41d04a9 98
Noximilien 28:35af3843de8f 99 lineTwo.pos.y = 15;
Noximilien 28:35af3843de8f 100 lineTwo.pos.x = screen_width;
Noximilien 29:579e00b7f118 101 lineTwoShips.pos.x = -46; // Starting position outside the screen limits, with the length of the sprite.
Noximilien 29:579e00b7f118 102 lineTwoShips.pos.y = 14; // the height of the "The last One" and a few pixels for gaps.
Noximilien 20:557e84189a57 103
Noximilien 28:35af3843de8f 104 lineThree.pos.x = 2;
Noximilien 29:579e00b7f118 105 lineThree.pos.y = screen_height; // Starting outside the screen limits on the botto - the screen's height + the sprite's height.
Noximilien 29:579e00b7f118 106 }
Noximilien 24:0570cb4b92d7 107
Noximilien 24:0570cb4b92d7 108 void updateAndDrawIntroPartOne(){
Noximilien 23:240bc00ef25b 109 // the width of the line one + 2.
Noximilien 20:557e84189a57 110 for (int i = 0; i < 65; i++){
Noximilien 19:b78fa41d04a9 111 lcd.clear();
Noximilien 28:35af3843de8f 112 lineOne.pos.x +=1;
Noximilien 28:35af3843de8f 113 if (lineOneStars.pos.x > 70){ lineOneStars.pos.x -= 1; }
Noximilien 20:557e84189a57 114 // to stop moving at the position of its width.
Noximilien 28:35af3843de8f 115 if (lineTwo.pos.x > screen_width - 30){ lineTwo.pos.x -=1; }
Noximilien 29:579e00b7f118 116 if (lineTwoShips.pos.x < 0){ lineTwoShips.pos.x += 1; }
Noximilien 20:557e84189a57 117
Noximilien 24:0570cb4b92d7 118 introPartOneText();
Noximilien 31:becb8f6bf7b7 119 gamepad.tone(200,2);
Noximilien 20:557e84189a57 120
Noximilien 19:b78fa41d04a9 121 lcd.refresh();
Noximilien 20:557e84189a57 122 wait(0.01);
Noximilien 20:557e84189a57 123 }
Noximilien 24:0570cb4b92d7 124 }
Noximilien 24:0570cb4b92d7 125
Noximilien 24:0570cb4b92d7 126 void updateAndDrawIntroPartTwo(){
Noximilien 32:5403bb974294 127 int low_frequency_music_counter = 0;
Noximilien 20:557e84189a57 128 for (int i = 0; i < 19 + 3; i++){
Noximilien 20:557e84189a57 129 lcd.clear();
Noximilien 28:35af3843de8f 130 lineThree.pos.y -= 1;
Noximilien 24:0570cb4b92d7 131 introPartOneText();
Noximilien 29:579e00b7f118 132 drawSprite(lineThree.pos, intro_line_three_sprite);
Noximilien 20:557e84189a57 133 lcd.refresh();
Noximilien 20:557e84189a57 134 wait(0.1);
Noximilien 32:5403bb974294 135 introMusic(low_frequency_music_counter);
Noximilien 32:5403bb974294 136 low_frequency_music_counter++;
Noximilien 26:676874c42883 137 }
Noximilien 24:0570cb4b92d7 138 }
Noximilien 24:0570cb4b92d7 139 /**@brief
Noximilien 24:0570cb4b92d7 140 * I have put the upper part of the intro into a separate function because it
Noximilien 24:0570cb4b92d7 141 * it is being called several times in this file
Noximilien 24:0570cb4b92d7 142 */
Noximilien 24:0570cb4b92d7 143 void introPartOneText(){
Noximilien 29:579e00b7f118 144 drawSprite(lineOne.pos, intro_line_one_sprite);
Noximilien 29:579e00b7f118 145 drawSprite(lineOneStars.pos, intro_line_one_stars_sprite);
Noximilien 29:579e00b7f118 146 drawSprite(lineTwo.pos, intro_line_two_sprite);
Noximilien 29:579e00b7f118 147 drawSprite(lineTwoShips.pos, intro_line_two_ships_sprite);
Noximilien 29:579e00b7f118 148 }
Noximilien 29:579e00b7f118 149
Noximilien 29:579e00b7f118 150 void menuSelection(){
Noximilien 29:579e00b7f118 151 if (current_screen == ScreenOption_Game) {
Noximilien 29:579e00b7f118 152 bool game_is_paused = game.updateAndDraw();
Noximilien 32:5403bb974294 153 if (game_is_paused) { current_screen = ScreenOption_Menu;}
Noximilien 29:579e00b7f118 154
Noximilien 32:5403bb974294 155 } if (current_screen == ScreenOption_Tutorial) {
Noximilien 32:5403bb974294 156 bool back_to_menu = tutorial.updateAndWriteTutorial();
Noximilien 29:579e00b7f118 157 if (back_to_menu) {
Noximilien 29:579e00b7f118 158 current_screen = ScreenOption_Menu;
Noximilien 29:579e00b7f118 159 }
Noximilien 32:5403bb974294 160 } if (current_screen == ScreenOption_Settings) {
Noximilien 30:d454d0cb72bc 161 bool back_to_menu = settings.updateAndWriteSettings();
Noximilien 30:d454d0cb72bc 162 if (back_to_menu) {
Noximilien 30:d454d0cb72bc 163 current_screen = ScreenOption_Menu;
Noximilien 30:d454d0cb72bc 164 }
Noximilien 32:5403bb974294 165 } else if (current_screen == ScreenOption_Menu) {
Noximilien 29:579e00b7f118 166 bool wantsToChangeScreen = menu.updateAndDraw();
Noximilien 29:579e00b7f118 167 if (wantsToChangeScreen) {
Noximilien 29:579e00b7f118 168 current_screen = menu.getCurrentScreenSelection();
Noximilien 29:579e00b7f118 169 }
Noximilien 29:579e00b7f118 170 }
Noximilien 30:d454d0cb72bc 171 }
Noximilien 30:d454d0cb72bc 172
Noximilien 32:5403bb974294 173 void introMusic(int low_frequency_music_counter){
Noximilien 31:becb8f6bf7b7 174 if (low_frequency_music_counter == 0){ gamepad.tone(90,2);}
Noximilien 31:becb8f6bf7b7 175 else if (low_frequency_music_counter == 2){gamepad.tone(60,2);}
Noximilien 31:becb8f6bf7b7 176 else if (low_frequency_music_counter == 4){gamepad.tone(190,2);}
Noximilien 31:becb8f6bf7b7 177 else if (low_frequency_music_counter == 6){gamepad.tone(60,2);}
Noximilien 31:becb8f6bf7b7 178 else if (low_frequency_music_counter == 8){gamepad.tone(90,2);}
Noximilien 31:becb8f6bf7b7 179 else if (low_frequency_music_counter == 10){gamepad.tone(160,2);}
Noximilien 31:becb8f6bf7b7 180 else if (low_frequency_music_counter== 12){
Noximilien 30:d454d0cb72bc 181 gamepad.tone(90,1);
Noximilien 30:d454d0cb72bc 182 low_frequency_music_counter = 0;
Noximilien 30:d454d0cb72bc 183 }
Noximilien 35:172db1608332 184 }
Noximilien 35:172db1608332 185 void createdByIntro(){
Noximilien 35:172db1608332 186 lcd.clear();
Noximilien 35:172db1608332 187 lcd.printString("Created and",0,0);
Noximilien 35:172db1608332 188 lcd.printString("Developed by",0,1);
Noximilien 35:172db1608332 189 lcd.printString("D Griskovs",10,3);
Noximilien 35:172db1608332 190 lcd.printString("el17dg",20,4);
Noximilien 35:172db1608332 191 lcd.printString("201160286",12,5);
Noximilien 35:172db1608332 192 lcd.refresh();
Noximilien 35:172db1608332 193 wait(2);
Noximilien 35:172db1608332 194 }
Noximilien 35:172db1608332 195
Noximilien 35:172db1608332 196 void noteToPlayer(){
Noximilien 35:172db1608332 197 lcd.clear();
Noximilien 35:172db1608332 198 lcd.printString("Please Read",0,0);
Noximilien 35:172db1608332 199 lcd.printString("The TUTORIAL",10,2);
Noximilien 35:172db1608332 200 lcd.printString("First!",30,4);
Noximilien 35:172db1608332 201 lcd.refresh();
Noximilien 35:172db1608332 202 wait(3);
Noximilien 31:becb8f6bf7b7 203 }