Initial publish

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

Committer:
Noximilien
Date:
Sat Apr 06 20:13:33 2019 +0000
Revision:
26:676874c42883
Parent:
24:0570cb4b92d7
Child:
27:f05f4e738ba9
I have created a difficulty feature based on the in-game score. As the score gets higher, so does the game. Have added more comments. Started cleaning up the code and simplify it.

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