ELEC2645 (2018/19) / Mbed 2 deprecated el17dg

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

Committer:
Noximilien
Date:
Mon Apr 08 14:41:57 2019 +0000
Revision:
27:f05f4e738ba9
Parent:
26:676874c42883
Child:
28:35af3843de8f
I have created "press START" for the intro pause. Added more comments for the report. Fixed the bug I had in my small star function. Changed some drawsprite functions to new one I made. Slightly simplified the code.

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