ELEC2645 (2018/19) / Mbed 2 deprecated el17dg

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

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?

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 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 }